雷鹏 发表于 2020-4-20 20:49:44

记笔记:USBH_Process 进入HardFault_Handler 错误用法。

今天在写U盘截图功能程序的时候碰到了一个奇怪的问题。
因为界面很多的原因,想偷懒 将包含有 USBH_Process的函数
void PrintScreen( void ) /*截屏程序长按 ENT 键 执行 */
直接放在了
void bsp_Idle(void)
空闲程序中执行
导致插上U盘就直接进入了 HardFault_Handler 中断。
百思不得其解,问了硬汉大神,
这个函数不可以在中断里面调用
他是根据中断反馈的状态做处理的
所以务必在主任务里面循环调用

而裸机程序中void bsp_Idle(void)函数一直在被
void bsp_DelayMS(uint32_t n);
函数掉调用 间接的被滴答定时器调用,导致了异常中断。希望大家也引以为戒不要像我一样犯这样的错误了。


可以在while 函数下调用包含有 USBH_Process 的函数,或者直接调用也行。
例如
while (1)
{
    bsp_Idle(); /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
    USBH_Process(&USB_OTG_Core, &USB_Host);
   //用户代码
}


eric2013 发表于 2020-4-20 21:07:17

非常感谢楼主分享经验。
页: [1]
查看完整版本: 记笔记:USBH_Process 进入HardFault_Handler 错误用法。