使用的STM32_USB-FS-Device_Driver库,创建HID,和模拟键盘Keyboard。工作中根据需要模拟键盘发送一批字符串。
也按照网上找的移植文档进行了更改。
相关代码:
UserToPMABufferCopy(keyboardCodeBuf, GetEPTxAddr(ENDP3), 8); //发8个字节
SetEPTxCount(ENDP3, 8);
SetEPTxValid(ENDP3);
经过调试发现,GetEPTxAddr(ENDP3),如果返回0x01F0,就能正常工作。
有时会返回0xC36C,0xC34C ,则在进入函数UserToPMABufferCopy中后会跳转到HardFault_Handler。
反复测试,一段时间都是返回0x01F0,工作完全正常
又可能一段时间,返回0xC36C,0xC34C,则会产生硬件故障中断。
有时上位机PC会产生无法识别的USB设备提示。
请指导故障原因。
非常感谢!
其它信息:
#define RegBase (0x40005C00L) /* USB_IP Peripheral Registers base address */
#define PMAAddr (0x40006000L) /* USB_IP Packet Memory Area base address */
#define BTABLE ((__IO unsigned *)(RegBase + 0x50)) /* Buffer Table address register */
BTABLE = RegBase + 0x50 = 0x40005C50L
_GetBTABLE = BTABLE
#define _pEPTxAddr(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8 )*2 + PMAAddr)) |