[问题讨论] 请教 GD32F103C8T6 USB 导致 HardFault_Handler 故障

无畏而为   2022-7-22 17:06 楼主

请教 GD32F103C8T6 USB 导致 HardFault_Handler 故障

使用的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))
 

回复评论 (2)

GD32不知道怎么回事

在STM32出现HardFault_Handler原因有两个方面, 内存溢出或堆栈溢出

点赞  2022-7-23 21:46

是的,先排除堆栈溢出或者内存被覆写。

默认摸鱼,再摸鱼。2022、9、28
点赞  2022-7-27 18:47
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复