之前工作中,在调试STM32时,经常碰到串口不够使或者传输速率太低的问题,如果想要与上位机、FPGA等更快的传输速率,以太网由于协议栈的问题,太过麻烦,USB就是个很不错的选择。
硬件以微雪电子TM32F407IGT6 核心板为例,该芯片USB有三种,其中OTG指可做从设备、也可以做主设备。
- USB_FS(全速、12Mbit/s)
- USB_OTG_FS(全速、12Mbit/s)
- USB_OTG_HS(高速、480Mbits)
如上图所示,USB FS的使用只要使用 DM / D- 和 DP / D+ 这两个引脚就行了,而使用USB HS大多数还需要外接PHY芯片(USB3300)。
-
在STM32CubeMX中第一步选择时钟外外部时钟。首先在STM32CubeMx中配置USB_OTG_FS
-
第二部选择调试方式,由于要使用FreeRTOS,因此基础时钟改为TIM1;
-
选择时钟,必须为48MHz.
-
选择连接方式,打开USB_OTG_FS的模式为"Device Only"。
4、选择使用USB做虚拟串口。
-
注意,此处的堆,由于USB协议栈比较大,需改大些,否则当插入USB设备,电脑主机的设备管理器中USB设备会变为“!”
-
在usbd_cdc_if.c中找到发送与接收函数。
-
将CDC_Transmit_FS函数放到线程中发送数据。