・2017/04/08
STM32 STM32F103C8T6の USB CDC Virtual COM portデバイスを実装する
(STM32 STM32F103C8T6に STCubeで CDC VCPデバイスを組み込み、動作試験のループバックを実装する)
Tags: [ワンチップCPU]
● STM32 STM32F103C8T6マイコンボードで USB CDCを使う方法
STM32CubeMX CubeMXのウィザードで USBの CDCクラス Communication Device Classを生成して、TrueSTUDIOでコンパイルをすると下記の警告が出ます。
記述/説明 リソース パス ロケーション タイプ
expected 'uint8_t * {aka unsigned char *}' but argument is of type 'char *' usbd_ctlreq.h /STM32_TEST2/Middlewares/ST/STM32_USB_Device_Library/Core/Inc 行 93 C/C++ Problem
記述/説明 リソース パス ロケーション タイプ
in expansion of macro 'USBD_CONFIGURATION_STRING_FS' usbd_desc.c /STM32_TEST2/Src 行 267 C/C++ Problem
USBD_GetString (USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length);
に (uint8_t *)のキャストを追加
USBD_GetString ((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length);
に書き換えると警告が出なくなります。(全部で 10箇所有ります。)
・STM32 STM32F103C8T6マイコンボードで USB CDCを使う方法

・STM32 STM32F103C8T6マイコンボードで USB CDCを使う方法

● STM32 STM32F103C8T6マイコンボードで USB CDCを使う方法
デフォルトの送受信バッファが 4バイトなので CDC_DATA_HS_MAX_PACKET_SIZE(512バイト)に変更します。
#define APP_RX_DATA_SIZE 4
#define APP_TX_DATA_SIZE 4
また、送受信の CDC_Receive_FS関数、CDC_Transmit_FS関数の処理が変なので修正?します。STM32CubeMXで生成する USB用のコードは「やる気が無い」「バグが多い」と各方面で言われています。
CDC_Receive_FSにはデバグ用にループバックの処理を入れました。
usbd_cdc_if.c
/* USER CODE BEGIN PRIVATE_DEFINES */
/* Define size for the receive and transmit buffer over CDC */
/* It's up to user to redefine and/or remove those define */
#define APP_RX_DATA_SIZE CDC_DATA_HS_MAX_PACKET_SIZE
#define APP_TX_DATA_SIZE CDC_DATA_HS_MAX_PACKET_SIZE
/* USER CODE END PRIVATE_DEFINES */
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
uint16_t Len16 = *Len; // デバグ用にループバックの処理
CDC_Transmit_FS(Buf, Len16); // デバグ用にループバックの処理
return (USBD_OK);
/* USER CODE END 6 */
}
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
uint8_t result = USBD_OK;
/* USER CODE BEGIN 7 */
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
if (hcdc->TxState != 0){
return USBD_BUSY;
}
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
/* USER CODE END 7 */
return result;
}
mainの whileの中にデバグ用の送信処理を入れました。
main.c
/* USER CODE BEGIN Includes */
#include "usbd_cdc_if.h"
/* USER CODE END Includes */
int main(void)
{
/* USER CODE BEGIN 1 */
uint8_t Buf[] = "test";
/* USER CODE END 1 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if (hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED) {
CDC_Transmit_FS(Buf, 4);
HAL_Delay(100);
}
}
/* USER CODE END 3 */
}
Tags: [ワンチップCPU]
●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)
Arduinoを使った HDMIの EDIDエミュレータを製作!
Arduino AVR/ UNO R4/ STM32/ ESP32/ RP2040と各種の CPUに対応!(トラ技 2024/07掲載)
STM32 STM32F103C8T6マイコンボードを ST-Link V2(中華製の互換ドングル)を使って開発
STM32F103C8 ARM Cortex-M3 72MHz CPU、ST-LINK Utilityでファームのアップデート
STM32 STM32F103C8T6の Windows用の開発環境を無料で構築する方法。CubeMX True STUDIO ST-LINK V2
Windows用の STM32F103C8 ARM Cortex-M3 72MHzの開発環境を無料で作る、STM32CubeMX、TrueSTUDIO、ST-LINK V2
STM32 STM32F103C8T6の USB CDC Virtual COM portドライバを Windows 7に組み込む方法
Windows 7で VCPドライバを組み込む時に「INFファイルが無効です」の解決方法、COMポート増殖を防ぐ方法(増えすぎた COMポートを削除)
STM32 STM32F103C8T6で ARM GCCの Cソース中にインラインアセンブラを記述する方法
ARM GCCの Cソース中にインラインアセンブラを記述する方法
STM32 STM32F103C8T6で SPI接続の 1.8インチ TFT液晶を使用する方法
STM32に 128x160 ST7735 TFT 1.8インチ LCDを SPI接続して自前アプリから文字列を描画する方法。
STM32 STM32F103C8T6マイコンボード開発、CubeMX STM32CubeMXの使い方
STM32マイコン用の初期設定コード生成ツール STM32CubeMXの使い方、USBデバイスの作成方法
STM32 STM32F103C8のクローン(複製品) 108MHz動作の GD32F103C8、CS32F103C8
STM32クローン GigaDevice GD32F103C8T6 108MHz、CKS CS32F103C8T6 72MHz
ラズパイを意識した別物製品 Orange Pi Zeroを買ってみた、Allwinner H2+ Cortex-A7 4core
オレンジパイはラズパイよりもコスパは良いが情報が無いので利用者側に一定のスキルが必要
Orange Pi PC 2を買ってみた、Allwinner H5 Cortex-A53 4core ARM64
ラズパイを意識した別物製品、オレンジパイはラズパイよりもコスパが良い、でも情報が無い
Raspberry Pi Zero Wを海外通販の Pimoroni等での購入方法、購入できる通販ショップ一覧まとめ
ラズパイゼロW ワイヤレスモデルを海外通販でサクッと簡単に個人輸入で入手。技適通過でも国内販売は常に品切れ
大人気の CPUボード、Raspberry Pi 3 Model Bで作ってみよう
Raspberry Piの開発環境の構築やタッチパネル付き液晶ディスプレイや各種センサーの使い方まとめ
Espressif ESP32 Arduino互換でスケッチが使える WROOM32開発基板
Espressif ESP32 32ビット Arduino互換マイコンボードをお手軽に開発する方法
Espressif ESP8266 Arduino互換でスケッチが使える ESP-12Eモジュール基板
Espressif ESP8266 ESP-12-E NodeMCU V1 ESP12 CP2102
BangGood通販はドローン以外にも面白い商品がまだまだ有った(電子工作編)
レーザー彫刻機、カラー液晶の DIYオシロ、Arduinoや Raspberry Pi用の小型カラー液晶
[HOME]
|
[BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c)
2017 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator
http://www.neko.ne.jp/~freewing/cpu/stm32_stm32f103c8t6_usb_cdc_vcp_device/