组合了三个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这样的 |
不知你是用哪个系列的STM32芯片,从你代码来看很可能是基于STM32F103的早期USB版本写法。
如果是103的话,USB能使用到的缓冲最多512 BYTE. 所以在安排地址时 注意不要超过0x200.
评分
查看全部评分