打印
[其他ST产品]

STM32CubeMX之USB从机

[复制链接]
256|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
USB接口是我们生活中使用非常广泛的一种接口,在嵌入式中使用也很广泛,相比于UART口,USB的通信协议要复杂的多。本篇文章不介绍底层协议的内容,感兴趣的读者可以自行查找相关资料,本文主要介绍如何使用STM32CubeMX工具快速实现USB虚拟串口通讯。


STM32的USB接口简介
简单来说,USB有主机(Host)和设备(Device)之分。一般电脑的USB接口为主机接口,而键盘、鼠标、U盘等则为设备。部分型号的STM32芯片有1~2个USB接口。像STM32F103系列的有一个USB Device接口,STM32F407系列的有2个USB接口,既可以作为HOST,又可以作为Device,还可以作为OTG接口。STM32的USB接口支持USB2.0协议,内部集成了全速PHY,速度可达12Mbps,直接外接USB接口即可实现USB通信。高端系列的芯片还支持USB高速接口(480Mbps),一般需要外接高速PHY芯片。而STM32F723芯片则内置了高速USB-PHY,不需要外部PHY就可以实现USB高速通讯。


使用特权

评论回复
沙发
在水一方00|  楼主 | 2023-5-31 22:26 | 只看该作者
硬件电路

以STM32F072为例,该单片机有一个USB Device接口,为PA11、PA12引脚,外部只需要直接连接USB接口即可。电路图如下图所示。



另外,USB通讯需要48MHz的时钟,且对于时钟精度要求较高,F072内部有高精度的48MHz的时钟,可以满足USB通讯的要求,不需要再使用外部晶振。需要注意的是F103系列的单片机必须使用外部晶振,且DP(D+)引脚必须外接1.5K的上拉电阻,上拉到3.3V。

使用特权

评论回复
板凳
在水一方00|  楼主 | 2023-5-31 22:26 | 只看该作者
硬件电路

以STM32F072为例,该单片机有一个USB Device接口,为PA11、PA12引脚,外部只需要直接连接USB接口即可。电路图如下图所示。



另外,USB通讯需要48MHz的时钟,且对于时钟精度要求较高,F072内部有高精度的48MHz的时钟,可以满足USB通讯的要求,不需要再使用外部晶振。需要注意的是F103系列的单片机必须使用外部晶振,且DP(D+)引脚必须外接1.5K的上拉电阻,上拉到3.3V。

使用特权

评论回复
地板
在水一方00|  楼主 | 2023-5-31 22:27 | 只看该作者
STM32CubeMX配置

STM32的USB接口支持多种模式,包括音频设备、虚拟串口、DFU模式、HID、自定义HID以及大容量存储设备:

以USB虚拟串口为例,首先使能USB接口,参数配置默认即可,中断也是默认打开的。

使用特权

评论回复
5
在水一方00|  楼主 | 2023-5-31 22:27 | 只看该作者
USB Device模式配置如下,选择虚拟串口,参数配置默认,设备描述符(Device Descriptor)也默认即可。也可以根据自己需要进行修改。

使用特权

评论回复
6
在水一方00|  楼主 | 2023-5-31 22:28 | 只看该作者

使用特权

评论回复
7
在水一方00|  楼主 | 2023-5-31 22:35 | 只看该作者
USB时钟选择为内部48M时钟HSI48。

使用特权

评论回复
8
在水一方00|  楼主 | 2023-5-31 22:35 | 只看该作者
USB时钟选择为内部48M时钟HSI48。

使用特权

评论回复
9
在水一方00|  楼主 | 2023-5-31 22:36 | 只看该作者
设置完成后生成代码。

使用特权

评论回复
10
在水一方00|  楼主 | 2023-5-31 22:36 | 只看该作者
设置完成后生成代码。

使用特权

评论回复
11
在水一方00|  楼主 | 2023-5-31 22:36 | 只看该作者
初始化与中断的代码已经自动生成,用户发送和接收数据只需调用两个函数即可,有时候也需要对两个函数进行修改,以实现自己的通讯协议和功能。

int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t *Len)
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)

使用特权

评论回复
12
在水一方00|  楼主 | 2023-5-31 22:36 | 只看该作者
初始化与中断的代码已经自动生成,用户发送和接收数据只需调用两个函数即可,有时候也需要对两个函数进行修改,以实现自己的通讯协议和功能。

int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t *Len)
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)

使用特权

评论回复
13
在水一方00|  楼主 | 2023-5-31 22:37 | 只看该作者
电路板上电后,插入USB线,并连接电脑,电脑会弹出安装驱动的提示,安装STM32虚拟串口的驱动,打开串口调试助手,可以当做普通串口使用,进行发送和接收的测试。此时波特率的设置是无效的,理论上虚拟串口的通信速率可达12Mbps。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

566

帖子

0

粉丝