本篇文章为大家展示了STM32中怎么实现USB转串口功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
创新互联建站基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业服务器托管报价,主机托管价格性价比高,为金融证券行业成都二枢机房,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。
1.电脑上设置的串口波特率不影响USB接口传输的速率。
2.怎样获取电脑上串口助手设置的波特率,以设置USART1使其波特率与串口
助手一致。
波特率设置
其实STM32CubeMX生成的程序中已经提供了相关的接口,只需要用户自己实现即可。打开usbd_cdc_if.c文件,CDC_Control_FS函数中,添加如下程序。
其中上面的注释是系统生成的,根据注释添加相应的红框中的程序。LineCoding是一个结构体:
USBD_CDC_LineCodingTypeDef LineCoding ={ 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;}
上述内容就是STM32中怎么实现USB转串口功能,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。