通过STM32CubeMX芯片图形化配置工具简单快速的实现一个基于STM32F407的USB接口通信。
接口框图--FS全速模式
注:
1. 只有在构建由 VBUS 供电的器件时才需要外部调压器。
2. 只有在应用必须支持由 VBUS 供电的器件时才需要 STMPS2141STR。如果应用电路板提供 5V 电源,则可以使用基本电源开关。
3. VDD 范围介于 2V 到 3.6V 之间。
接口框图--HS高速模式
注:
1. HS高速模式必须外接PHY芯片才能实现,例如USB3300等。
2. PHY通过ULPI接口与处理器相连。
USB的具体功能说明和相关寄存器配置可以参考---STM32F4xx中文参考手册,本文仅描述通过STM32CubeMX最快实现USB接口的通信。
-------------------------------------------------------------------------------------
STM32CubeMX版本:5.6.1
处理器型号:STM32F407ZG
开发工具:Keil V5.14
-------------------------------------------------------------------------------------
第一步:通过选择处理器进入工程配置。
第二步:配置高速时钟,使能外部晶振。
第三步:根据硬件情况配置USB硬件接口,有外接ULPI接口的PHY选USB_OTG_HS,无则选USB_OTG_FS,勾选上中断,其他保持默认。
第三步:根据硬件情况配置串口,用于打印信息。
第四步:Middleware中间件选择CDC,虚拟端口通信。
第五步:根据硬件情况配置时钟,红框内时钟是USB接口用到的,必须配置为48MHz。
第六步:修改Heap Size大小,选择开发工具版本,点击右上角GENERATE CODE生成代码。
第七步:打开工程,找到文件usbd_cdc_if.c,修改CDC_Receive_HS()函数,完成USB自发自收,串口数据打印。
代码如下:
static int8_t CDC_Receive_HS(uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 11 */
int i;
uint8_t my_RxBuf[100];
uint32_t my_RxLength;
memcpy(my_RxBuf,Buf,*Len);
my_RxLength=*Len;
CDC_Transmit_HS(my_RxBuf, my_RxLength);
for(i=0;i<my_RxLength;i++)
{printf("%02x ",my_RxBuf[i]);}
USBD_CDC_SetRxBuffer(&hUsbDeviceHS, &Buf[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceHS);
return (USBD_OK);
/* USER CODE END 11 */
}
第八步:安装ST VCP虚拟端口驱动。将串口和USB插入PC进行简单的通信测试,如下:
其中,左为USB接口自发自收,右为串口打印数据。
如果不需要串口打印数据,可以去掉串口配置的步骤。
------------------------------------------------------------------------------