1.电脑上设置的串口波特率不影响USB接口传输的速率。
2.若何获取电脑上串口助手设置的波特率,以设置USART1使其波特率与串口
助手同等。

波特率设置
实在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