本篇文章为大家展示了STM32中怎么实现USB转串口功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
1。电脑上设置的串口波特率不影响USB接口传输的速率。
2。怎样获取电脑上串口助手设置的波特率,以设置USART1使其波特率与串口
助手一致。
波特率设置
其实STM32CubeMX生成的程序中已经提供了相关的接口,只需要用户自己实现即可。打开usbd_cdc_if.c文件,CDC_Control_FS函数中,添加如下程序。
, <形状类型=? _x0000_t75”=癴”>
其中上面的注释是系统生成的,根据注释添加相应的红框中的程序.LineCoding是一个结构体:
<节>USBD_CDC_LineCodingTypeDef LineCoding ={,,, 115200,,/*,波特率*/,,,,0 x00,,,,/*,停止位1 */,,,,0 x00,,,,/*,校验,安康;没有*/,,,,0 x08 ,,,/*,数据位,8 */};节>
USBD_CDC_LineCodingTypeDef的格式也是系统定义好的。
添加完成后,在电脑的串口助手上更改波特率时,系统会调用这段程序,重新配置USART1的波特率,使两者保持一致。
剩下的功能就是数据转发,即将USB接收的数据通过USART1发送出去,将USART1接收的数据发送到USB接口。
USB数据转发到USART1
同样是在usbd_cdc_if。c文件中,修改USB接收函数CDC_Receive_FS。将原来的程序屏蔽,添加串口发送的程序。
添加串口发送完成中断回调函数(前提是使能串口发送中断):
<节>void HAL_UART_TxCpltCallback (UART_HandleTypeDef * huart) {USBD_CDC_ReceivePacket才能(及hUsbDeviceFS);}节>
USART1数据转发到USB
本例程是通过中断方式接收USART1数据,并通过接收超时时间来判断一帧数据接收完成。当然也可以通过其它方式实现转发,例程只是简单实现功能。
添加串口中断回调函数:
<节>void HAL_UART_RxCpltCallback (UART_HandleTypeDef * huart) {UserTxBufPtrIn + +才能,,,如果(UserTxBufPtrIn ==, APP_RX_DATA_SIZE)//防止溢出,,{,,,UserTxBufPtrIn =, 0;,,},, UR_Tick =, 0;//接收计时器清零,,UR_Flag =, 1;//正在接收,,HAL_UART_Receive_IT (huart,, (uint8_t *)(时间+ UserTxBufferFS UserTxBufPtrIn),, 1);}节>
判断一帧数据接收完成后,通过USB接口转发出去。
<节>如果(==UR_Flag 2) {UR_Flag 才能=,0;,,CDC_Transmit_FS (UserTxBufferFS, UserTxBufPtrIn);,, UserTxBufPtrIn =, 0;}节>
上述内容就是STM32中怎么实现USB转串口功能,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。