硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2347|回复: 1
收起左侧

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

[复制链接]

86

主题

446

回帖

724

积分

金牌会员

积分
724
QQ
发表于 2020-4-20 20:49:44 | 显示全部楼层 |阅读模式
今天在写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);
   //用户代码
}


评分

参与人数 1金币 +50 收起 理由
eric2013 + 50 赞一个!

查看全部评分

武汉天纵鹏元科技有限公司。承接嵌入式项目开发,相关技术交流。STM32,物联网,工业控制方向。QQ  408137104
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2020-4-20 21:07:17 | 显示全部楼层
非常感谢楼主分享经验。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 07:04 , Processed in 0.036614 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表