你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Hard Fault Exception using STemWin & STM32F446ZE

[复制链接]
lapidarylee 提问时间:2017-8-29 13:33 /
  有一個在STM32F446ZE上使用STemWin遇到的問題想請教
   如下列程式,使用DRAW_SCENE()做display LCD update,用Timer做次數計數
unsigned char _strtmp[20];
unsigned int Timer = 0;
void DRAW_SCENE()
{   
                            sprintf(_strtmp,"%5d:", Timer);
                            GUI_DispStringAt(_strtmp, 80, 155);
                            Timer++;
}
程式除了LCD外,有跑餵固定數值做輸入的演算法,而每次都會在Timer= 1127時,當程式跑到” GUI_DispStringAt(_strtmp, 80, 155);”時,產生Hard Fault進入HardFault_Handler,這時的register如下:
CFSR = 0x00000100
          - IBUSERR = 1 =>指令總線錯誤 存访问错误
         - STKERR = 0
HFSR
         - FORCED = 1   
而不跑演算法則不會Hard fault,stack usage %不高
可請教可能的原因為何?!





收藏 评论4 发布时间:2017-8-29 13:33

举报

4个回答
andeyqi 回答时间:2017-8-29 16:28:31
仅为猜测:算法是否使用了FPU计算单元,实MCU侧未开启FPU功能。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

lapidarylee 回答时间:2017-8-30 10:44:46
andeyqi 发表于 2017-8-29 16:28
仅为猜测:算法是否使用了FPU计算单元,实MCU侧未开启FPU功能。

在stm32f446xx.h中 "#define __FPU_PRESENT  1U  /*!< FPU present */ ",IAR中FPU選擇 VFPv4 single precision。這樣FPU應該開啟了?!
lapidarylee 回答时间:2017-8-30 10:47:06
另外,trace進入hardfault發生所在的assembly code: BL 0x81a933c 而memory placement中僅用到0x8000000 – 0x80ffff,但在hardfault發生之前,程式仍可正常執行BL 0x81a933c這行指令(這是第一個疑惑之處)。
而hardfault的發生就出在執行BL 0x81a933c卻跑到0x3a9dd118,因此產生IBUSERR = 1的hardfault exception

lapidarylee 回答时间:2017-8-30 10:51:31
其它觀察到的現象如下:
1) 試著將emWin配置的size(#define GUI_NUMBYTES  (1024) *  110 //x KByte,static U32 extMem[GUI_NUMBYTES / 4];),  調大或小, 發現 20/40/80K hard fault的timer count一致,而110K count較小就發生hardfault
2) 僅使用一個100Hz I2C取sensor data的timer,在main loop中僅有emWin及演算法,按鍵。單獨測試emWin不會hardfault,單獨測試演算法也不會hardfault,但兩塊一起跑就hardfault!

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版