打印

请教 GD32F103C8T6 USB 导致HardFault_Handler故障

[复制链接]
554|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))

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

61

帖子

1

粉丝