| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 63 USB复合设备多设备数据乱码问题及ENDP0_RXADDR起始地址计算方式 -> 正文阅读 |
|
[嵌入式]63 USB复合设备多设备数据乱码问题及ENDP0_RXADDR起始地址计算方式 |
1.引言? ? ? ? 最近又往usb设备中添加了虚拟串口功能,使用的usb端点从三个增长到了5个。很巧合,例程给的恰好是小于3个端点的,所以在前面的移植过程中并未出现什么错误,所以当时也就迷糊的过去了,未研究ENDP0_RXADDR为何是0x18。 ? ? ? ? 然后今天发现在多个usb设备情况下,数据虚拟串口数据发送出现乱码,所以才引起问题的查找。 ? ? ? ? 现在我使用到的端点个数已经达到5个,出现了usb 的虚拟串口发数据给PC,PC端收到的数据是乱码的,对比例程的代码,自己跟例程代码差别没有,所以迫使寻找问题。幸好看到了?下帖,才解决了自己的疑惑。 ?帖子链接: STM32 USB 复合设备 多路虚拟串口乱码问题 - *USB* - 论坛-意法半导体STM32/STM8技术社区 ?2.ENDP0_RXADDR起始计算依据? ? ? ? 首先stm32单片机有512字节大小的USB buffer,然后USB中存在一张Buffer Description Table,就是我们在usb_conf.h头文件中看到的一个宏定义。
? ? ? ? 这个Buffer Description Table表,一般就存在单片机的USB 512字节大小的buffer中,且一般是存在USB buffer 的起始位置,所以我们看到上面的BTABLE_ADDRESS 宏定义的是0x00,也就是USB buffer起始的位置。 ? ? ? ? ?然后再来谈谈这个Buffer Description Table的内容还有作用。 ? ? ? ? 这个表存在的是,每个端点的缓存区地址addr和缓存长度length,也就是一个端点就会对应一个addr+length,即占用8个字节大小。 ? ? ? ? 而Buffer Description Table,和我们USB的发送和接收是共用这512字节的buffer的,所以当这个表发生变化时,我们能使用的端点的发送和接收缓存区大小将会发生变化。 ???????? ? ? ? ? ?由上图看,使用的端点越多,表越大,剩下的缓存区域越小。 ? ? ? ? stm32USB例程,使用的是2个或3个端点,所以它们将ENDP0_RXADDR定义为0x18(等于24字节),当使用2个端点是,Buffer Description Table占用 2*(4+4) = 16Byte;当使用3个端点时Buffer Description Table占用3*(4+4) = 24Byte(也就是0x18)。也就是例程里面给的。 ? ? ? ? ?我现在使用了,5个端点,所以通过计算ENDP0_RXADDR = 0x28。
修改完这个后,接解决了USB多路虚拟串口乱码的问题。 感谢该文档的介绍: STM32F103 USB Packet Buffer 512:STM32F103 USB包缓冲区512 - 豆丁网 ?over! |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 14:50:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |