
硬件平台STM32F407VE,HAL库。标准库不会有此问题" u4 G& N& a/ o# o : p/ V( Y7 b j! k& r4 K7 D 软件跑freertos ; u0 u: F+ ?; X# X6 m3 N3 X0 I 问题描述:STM32 擦除flash失败,CPU跳不出串口中断,看门狗重启。! ~9 v6 e, `0 G8 O& v0 |) J + a; d6 T% g9 f- _/ a" `- p 问题一、FlashStatus!=HAL_OK解决办法:& Z& b0 Y6 R# U$ U3 e # }$ [: i8 K0 x0 q6 J 1、flash擦写前禁止flash数据缓存,操作完后恢复+ r( o2 ]6 s) ]+ G8 U 3 v3 d" a1 L$ W$ l4 t7 x. K /* Disable data cache */ __HAL_FLASH_DATA_CACHE_DISABLE();//FLASH操作期间,必须禁止数据缓存 ) w1 `8 h- p$ o/ Y# B1 h- ^ /* Enable data cache */5 i1 b: t& c: \7 Y9 f- {1 d, E __HAL_FLASH_DATA_CACHE_ENABLE();//开启数据缓存$ l) j8 X; K f- } 2、如果上述办法还不行可以在操作flash前增加清标志操作9 u1 c% F. H9 y h* p 7 f& C% y) X" h+ t /* Clear pending flags (if any) */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \ FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR); : ]0 W4 c* j% l0 U9 a$ b: g' L * Q+ f* ~4 m- W$ z* V7 d+ s% A 3、看门狗影响7 S( U: x$ R7 [1 p6 x 操作flash期间不要调用HAL_IWDG_Refresh(&hiwdg); 并且看门狗未开启或者屏蔽MX_IWDG_Init();的初始化 5 p2 W7 h1 o% ^; \/ l' p 软件最好不调用HAL_IWDG_Refresh(&hiwdg);2 v: b: N$ P7 z5 k2 J& `/ a ![]() 问题二:擦除flash失败,死机问题4 [0 N3 N" g M; G9 g 我用了串口空闲中断+DMA接收、发送模式 ! P/ S* v7 p. }* I; Q 软件仿真发现很容易在擦flash的时候CPU频繁进入串口中断(其他任务无法进入),最后复位 关键问题是:! _7 p/ I, C/ u! d $ _) V O9 o6 X HAL_UART_IRQHandler(&huart2);必须在中断里优先执行,放在最前端,不能放在用户程序以后。 如果不用flash擦写,顺序其实关系不大。1 _% e- Z" I/ Z& W. X. a- Q ' z4 p$ a& z& ] L 可能跟芯片也有关系(之前用F429就没这个问题) 7 y: x6 R# k0 ?' I- y" F: A5 T ![]() 1 p0 | [2 n; B& u& a, c/ h + z6 K/ {1 }) W) {* y' A8 T ———————————————— 版权声明:axsdffff1 如有侵权请联系删除- M5 E- ~; @$ q 4 v* T. }" S) a- c5 f. u* @2 x & D8 t( z9 ?2 u) [, U/ j1 S: f / Y. V' h+ g8 p; h' N |
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
ST 微控制器电磁兼容性 (EMC) 设计指南
适用于STM32微控制器的ΣΔ数字接口入门