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

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个回答
andey 回答时间:2017-8-29 16:28:31
提示: 作者被禁止或删除 内容自动屏蔽
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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版