硬件平台STM32F407VE,HAL库。标准库不会有此问题 软件跑freertos) X R; ^; a9 j! e. i ' f* @3 w& Z- Z( F9 z. [5 Y 问题描述:STM32 擦除flash失败,CPU跳不出串口中断,看门狗重启。 问题一、FlashStatus!=HAL_OK解决办法: O# o6 `1 [; |; i3 a( u 1、flash擦写前禁止flash数据缓存,操作完后恢复, |) M1 f$ w$ h! f$ x* K$ i /* Disable data cache */6 c- p; G: ~( n# Q% N) M3 ~ __HAL_FLASH_DATA_CACHE_DISABLE();//FLASH操作期间,必须禁止数据缓存 ) M6 e+ S; X# L /* Enable data cache */ __HAL_FLASH_DATA_CACHE_ENABLE();//开启数据缓存0 O- ]9 O9 j/ a$ x1 J- N 2、如果上述办法还不行可以在操作flash前增加清标志操作 % R, ?9 ?6 h+ C /* Clear pending flags (if any) */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \: W1 n) y5 i8 A) O/ ^! z FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);: }9 e. q+ ?" y" X- M1 Z1 s5 b$ X$ {/ y - I1 A" C8 U" X$ C 3、看门狗影响1 x3 `, A& b3 x 操作flash期间不要调用HAL_IWDG_Refresh(&hiwdg);, g! d" l4 M- d' l9 e/ u/ J 并且看门狗未开启或者屏蔽MX_IWDG_Init();的初始化( N2 {+ y) ^/ a / t+ C9 Y0 _1 J* [# `3 P2 B0 X 软件最好不调用HAL_IWDG_Refresh(&hiwdg);% j2 |8 u+ n: n5 o1 @ 问题二:擦除flash失败,死机问题' [) X4 Q" a( \( j/ V 我用了串口空闲中断+DMA接收、发送模式% `* A% w, f; n5 W" o " E# n8 K* c* K# t$ h 软件仿真发现很容易在擦flash的时候CPU频繁进入串口中断(其他任务无法进入),最后复位 关键问题是: HAL_UART_IRQHandler(&huart2);必须在中断里优先执行,放在最前端,不能放在用户程序以后。2 ^2 w1 ` I; y0 |0 i3 B. y" O# _ 如果不用flash擦写,顺序其实关系不大。 可能跟芯片也有关系(之前用F429就没这个问题) " t& L: N% e# F8 W1 F) r% [; z # N' `. F4 G/ M0 h) x4 i6 I ———————————————— 版权声明:axsdffff1; Q2 r' |) w6 d) N1 v3 }) G- e 如有侵权请联系删除2 G. R& J" T2 Z- [2 D . o7 G" w8 o3 E7 }! d : T* C- F! G& m! T |
基于STM32的BootLoader经验分享
基于STM32如何选择 S2-LP 的外部晶体经验分享
基于是STM32的BLE 设备地址经验分享
基于ToF传感器的3D手势识别
NUCLEO-U545RE-Q评测(2)运行环境建立
基于使用 STM32 TT 类型 IO 的注意事项经验分享
基于STM32使用Framebuffer_Analyzer工具调试图像显示
ST安全连接,护航工业物联网一路前行
基于STM32的TouchGFX 4.22解锁新功能经验分享
基于STM32的MPU子区经验分享