1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
创建STM32 CubeMX工程 基于STM32 CubeMX进行开发,使用USB的高速模式(实际使用的是内部的phy芯片),用USART3串口进行打印调试,外设管脚配置如下 中断优先级配置如下: 系统时钟配置如下: 最后,在生成工程前,需要配置堆和栈的大小,这里建立配置都在0x600以上,否则USB识别的速度比较慢且可能出现不识别的情况。在这两个工程中,设置如下图所示 到这里,STM32 USB虚拟串口的底层搭建完成,点击生成代码即可,接下来进行虚拟串口的开发。 代码修改 主函数不进行讲解,主要要修改将要讲解的两个函数,并在主函数中进行调用就可以实现USB的收发任意字节长度(协议允许范围内)的功能。 根据CubeMX生成的底层代码,USB CDC类提供接口函数存放在u***d_cdc_if.c文件中,其中包含CDC_Control_HS()、CDC_Receive_HS()和CDC_Transmit_HS()三个函数。根据USB 2.0协议,USB的数据包最大长度为64 Byte。此外,当USB采用分包接收时,若出现数据长度为64的整数倍,接收端无法接收到数据,出现这种现象的原因与USB传输协议有关(若接收到的数据包长不足最大包长时,则认为当前传输完成;等于最大包长没有被支持)。USB CDC虚拟串口要求支持任意字节长度(1024Byte以下)的数据传输,为解决这个问题,做如下修改(避开内部协议,有尝试修改内部协议后出现跑飞现象)。 修改发送函数。如数据包大于等于64字节,分包发送并且手动发送一个空包表示发送结束。 修改接收函数。采用标志位的形式,在其他地方进行接收处理,接收数据存放在Buf指向的内存中。 收发任意长度测试 发送长度为128byte的数据包,要求回传123byte,效果如下,准确回传。 发送128byte的数据包,要求回传128byte,效果如下,准确回传。 当数据包长度小于等于64时,不需要分包接收;当数据包长度大于64时,根据数据包大小分包接收,如果没有设计专门的接收缓存,必须接收完成才能发送。否则,可能会造成后面数据覆盖前面的数据。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 19:01 , Processed in 0.878383 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号