请教 GD32F103C8T6 USB 导致HardFault_Handler故障

[复制链接]
747|0
 楼主| ActiveAndy 发表于 2022-7-22 17:08 | 显示全部楼层 |阅读模式
使用的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))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

64

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0