硬件平台STM32F407VE,HAL库。标准库不会有此问题- w9 J3 X" J% W + c5 z/ K3 @* A1 j/ Z* O 软件跑freertos! m: a( H* ]0 I; t" H & \2 y" d# i4 B2 e( n/ m 问题描述:STM32 擦除flash失败,CPU跳不出串口中断,看门狗重启。 问题一、FlashStatus!=HAL_OK解决办法: 1、flash擦写前禁止flash数据缓存,操作完后恢复0 O1 s7 R' h# q; c6 M$ h /* Disable data cache */ __HAL_FLASH_DATA_CACHE_DISABLE();//FLASH操作期间,必须禁止数据缓存0 i4 p( x" v4 W 6 V4 @8 H: \) y8 p. D. j1 _9 ~ /* Enable data cache */# @, y5 c3 |1 h. T$ p __HAL_FLASH_DATA_CACHE_ENABLE();//开启数据缓存% G9 D$ b, o- W: W. I3 F ) i; `; f) C( K h; r$ ?! ?% }: H 5 L; Q+ \1 E' {# |+ | 2、如果上述办法还不行可以在操作flash前增加清标志操作 /* Clear pending flags (if any) */: F' ~ Q; i# l. A# o __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \ FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR); 3、看门狗影响 操作flash期间不要调用HAL_IWDG_Refresh(&hiwdg); 并且看门狗未开启或者屏蔽MX_IWDG_Init();的初始化0 S9 `/ y* M2 T% e, c 软件最好不调用HAL_IWDG_Refresh(&hiwdg);$ ~" n0 J0 }: J! s8 o! f + s3 V! M4 K% x" ^+ k8 `6 X0 o1 t) I ( F+ [+ [. e* z 问题二:擦除flash失败,死机问题 我用了串口空闲中断+DMA接收、发送模式6 v8 `0 |$ l% h5 S) R+ Q + Q$ k1 ?7 i4 Q8 G- Z- m 软件仿真发现很容易在擦flash的时候CPU频繁进入串口中断(其他任务无法进入),最后复位 关键问题是:+ Y3 B- P2 m& F+ V( v - u( N3 ^6 g) j0 _ HAL_UART_IRQHandler(&huart2);必须在中断里优先执行,放在最前端,不能放在用户程序以后。4 G4 X9 |. Y" ~1 A/ C 如果不用flash擦写,顺序其实关系不大。 可能跟芯片也有关系(之前用F429就没这个问题) 3 y0 C! q0 e& _, E) x J. S, H* E / P7 y9 a+ M# e5 B$ ]* v% P/ C $ w2 b" v X) k5 t' s8 E5 \6 C ————————————————5 j/ V1 D! ~1 {, G8 | 版权声明:axsdffff1& e3 C4 u' a4 M2 n 如有侵权请联系删除5 p7 q3 F4 p, `2 T ; o2 ^7 H6 [5 Q* i8 I |
基于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子区经验分享