摘要
在stm32f103cbt6核心板使用usb cdc虚拟串口,回环发送的字符串.
关键信息
- STM32CubeIDE
- JLINK
- stm32f103cbt6
- 外部晶振:8MHz
原理简介
usb-cdc简介
[https://blog.csdn.net/weixin_52296952/article/details/135776171]
[https://www.usbzh.com/article/detail-842.html]
[https://usb.org/sites/default/files/CDC1.2_WMC1.1_012011.zip]
USB通信设备类CDC分类编号为0x0a,且必须指定为接口设备类。
USB 通信设备类(或USB CDC类)是一个复合通用串行总线 设备类。
通信设备类用于类似于网卡的计算机网络设备,提供用于将以太网或ATM帧传输到某些物理介质的接口。它还用于调制解调器、ISDN、传真机和电话应用程序以执行常规语音呼叫。
通信设备具有三个基本任务:
设备管理(控制配置特定设备并通知 USB 主机某些事件)
呼叫管理(建立和终止电话呼叫或其他连接)
数据传输(发送和接收应用数据)
USB 组件中的 CDC 实现具有:
使用CDC的ACM(抽象控制模型)子类模拟虚拟 COM 端口。
使用CDC的ACM(抽象控制模型)子类使用RDNIS协议模拟网络连接。这支持Windows 主机 PC 和嵌入式设备之间的 USB 网络连接,以及USB 设备 RNDIS 到以太网桥应用程序。
使用 CDC 的NCM(网络控制模型)子类模拟以太网适配器(仅适用于USB 设备)。使用 CDC (NCM),您可以在基于 Linux 的主机系统上创建Ethernet-over-USB(适用于 Linux 主机)应用程序。
实现
- Connective->USB开启USB Device(FS)
- Middleware->USB_DEVICE->开启Communication Device Class
- 配置时钟(参数如下)
USB部分时钟必须是48MHz
/* ########################## Oscillator Values adaptation ####################*/
/*** @brief Adjust the value of External High Speed oscillator (HSE) used in your application.* This value is used by the RCC HAL module to compute the system frequency* (when HSE is used as system clock source, directly or through the PLL).*/
#if !defined (HSE_VALUE)#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */#if !defined (HSE_STARTUP_TIMEOUT)#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT *//*** @brief Internal High Speed oscillator (HSI) value.* This value is used by the RCC HAL module to compute the system frequency* (when HSI is used as system clock source, directly or through the PLL).*/
#if !defined (HSI_VALUE)#define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE *//*** @brief Internal Low Speed oscillator (LSI) value.*/
#if !defined (LSI_VALUE)#define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in HzThe real value may vary depending on the variationsin voltage and temperature. *//*** @brief External Low Speed oscillator (LSE) value.* This value is used by the UART, RTC HAL module to compute the system frequency*/
#if !defined (LSE_VALUE)#define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/
#endif /* LSE_VALUE */#if !defined (LSE_STARTUP_TIMEOUT)#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */
#endif /* LSE_STARTUP_TIMEOUT *//* Tip: To avoid modifying this file each time you need to use different HSE,=== you can define the HSE value in your toolchain compiler preprocessor. */
时钟图 |
---|
- 修改代码
USB_DEVICE/usbd_cdc_if.c
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);CDC_Transmit_FS(Buf, *Len); // 回传return (USBD_OK);/* USER CODE END 6 */
}
- 编译&烧录
生成hex和bin文件方法:C/C++ Build->Settings->MCU Post Build outputs->convert to binary file
使用jflash烧录二进制 |
---|
烧录完成后重新上电.
效果
虚拟串口输出 |
---|