首页 » 智能 » STM32实现USB转串口功能(含源码)_串口_波特率

STM32实现USB转串口功能(含源码)_串口_波特率

萌界大人物 2025-01-12 21:22:49 0

扫一扫用手机浏览

文章目录 [+]

1.电脑上设置的串口波特率不影响USB接口传输的速率。

2.若何获取电脑上串口助手设置的波特率,以设置USART1使其波特率与串口

STM32实现USB转串口功能(含源码)_串口_波特率 STM32实现USB转串口功能(含源码)_串口_波特率 智能

助手同等。

STM32实现USB转串口功能(含源码)_串口_波特率 STM32实现USB转串口功能(含源码)_串口_波特率 智能
(图片来自网络侵删)

波特率设置

实在STM32CubeMX天生的程序中已经供应了干系的接口,只须要用户自己实现即可。
打开usbd_cdc_if.c文件,CDC_Control_FS函数中,添加如下程序。

个中上面的注释是系统天生的,根据注释添加相应的红框中的程序。
LineCoding是一个构造体:

USBD_CDC_LineCodingTypeDefLineCoding={115200,/波特率/0x00,/停滞位-1/0x00,/校验-none/0x08/数据位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++;if(UserTxBufPtrIn==APP_RX_DATA_SIZE)//防止溢出{UserTxBufPtrIn=0;} UR_Tick=0;//吸收计时器清零UR_Flag=1;//正在吸收HAL_UART_Receive_IT(huart,(uint8_t)(UserTxBufferFS+UserTxBufPtrIn),1);}

判断一帧数据吸收完成后,通过USB接口转发出去。

if(UR_Flag==2){ UR_Flag=0; CDC_Transmit_FS(UserTxBufferFS,UserTxBufPtrIn);UserTxBufPtrIn=0;}

通过以上设置,即可实现类似CH340等USB转串口芯片的功能。
但STM32的USB接口功能更强大,可以实现USB复合设备,比如同时虚拟多个串口。
往后有韶光再做研究和大家分享。

链接:https://pan.baidu.com/s/1Xhb80g0a-H1uVpfdhyT5cw

提取码:swyl

相关文章

RS485通讯接口定义和特点_总线_通信

智能仪表在哀求通信间隔为几十米到上千米时,通过RS485通讯连成现场网络,知足企业信息化的须要。RS485总线特点1、RS485的...

智能 2025-01-14 阅读0 评论0