完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
之前的文章中介绍过STM32的USB接口虚拟串口的功能。《STM32CubeMX之USB从机》。本篇文章在此基础上,以STM32F407为例,介绍USB转串口功能的实现。
要实现USB转串口的功能,需要将单片机真实串口(这里以USART1为例)的收发数据与USB口进行交互。用过USB虚拟串口的朋友可能知道,要实现该功能,还存在以下问题: 1.电脑上设置的串口波特率不影响USB接口传输的速率。 2.怎样获取电脑上串口助手设置的波特率,以设置USART1使其波特率与串口助手一致。 波特率设置 其实STM32CubeMX生成的程序中已经提供了相关的接口,只需要用户自己实现即可。打开u***d_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 同样是在u***d_cdc_if.c文件中,修改USB接收函数CDC_Receive_FS。将原来的程序屏蔽,添加串口发送的程序。 添加串口发送完成中断回调函数(前提是使能串口发送中断): void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { USBD_CDC_ReceivePacket(&hU***DeviceFS); } 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复合设备,比如同时虚拟多个串口。以后有时间再做研究和大家分享。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
652浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
521浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 09:12 , Processed in 0.622336 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号