搜索
查看: 1335|回复: 2

[求助] 用STM32做3个CDC复合设备遇到的地址问题

[复制链接]

该用户从未签到

2

主题

6

帖子

0

蝴蝶豆

初级会员

最后登录
2021-2-21
发表于 2019-4-24 15:28:53 | 显示全部楼层 |阅读模式
组合了三个CDC设备:
使用EP1的IN、OUT做CDC1的数据接口端点,EP4的IN做控制接口端点。 关联串口1。
使用EP2的IN、OUT做CDC2的数据接口端点,EP5的IN做控制接口端点。 关联串口2。
使用EP3的IN、OUT做CDC3的数据接口端点,EP6的IN做控制接口端点。 关联串口3。

#define ENDP0_RXADDR        (0x40)
#define ENDP0_TXADDR        (0x80)

#define ENDP1_TXADDR        (0x100)
#define ENDP1_RXADDR        (0x140)

#define ENDP2_TXADDR        (0x180)
#define ENDP2_RXADDR        (0x1C0)

#define ENDP3_TXADDR        (0x200)
#define ENDP3_RXADDR        (0x240)


#define ENDP4_TXADDR        (0x280)
#define ENDP5_TXADDR        (0x2C0)
#define ENDP6_TXADDR        (0x300)


地址是这么设置的
现在的问题是,串口1、2收发正常,串口3收发不正常。
把EP3的地址:
#define ENDP3_TXADDR        (0x200)
#define ENDP3_RXADDR        (0x240)
和EP2的相应地址调换一下顺序就变成了串口2不正常,串口3正常
因此判断应该是地址设置问题。
但是找遍了网上找不到相关资料,谁有经验或者谁有资料能探讨下?
PS:
不正常的现象是不管向STM32的模拟串口发送什么数据,接受到的都是固定的错误的数据,如80 00 80  00这样的

TIM截图20190424151749.png
回复

使用道具 举报

该用户从未签到

10

主题

802

帖子

271

蝴蝶豆

版主

最后登录
2020-12-15
发表于 2019-5-21 12:20:23 | 显示全部楼层
本帖最后由 xmshao 于 2019-5-21 15:05 编辑

不知你是用哪个系列的STM32芯片,从你代码来看很可能是基于STM32F103的早期USB版本写法。

如果是103的话,USB能使用到的缓冲最多512 BYTE. 所以在安排地址时 注意不要超过0x200.

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

2

帖子

0

蝴蝶豆

新手上路

最后登录
2019-9-12
发表于 2019-9-11 23:57:04 | 显示全部楼层
#define ENDP0_RXADDR      的地址 要根据你使用的端点数目决定,取值是端点数目*16+BTABLE_ADDRESS。后面的地址间隔为64
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-2 14:29 , Processed in 0.166215 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表