|
硬件平台STM32F407VE,HAL库。标准库不会有此问题 软件跑freertos . |4 k& n* P) ?# z2 o 问题描述:STM32 擦除flash失败,CPU跳不出串口中断,看门狗重启。 & F4 J) o7 ^' g( I4 P( \ c 问题一、FlashStatus!=HAL_OK解决办法: 6 D2 |/ w! \! X) C; D1 d1 p+ c% e) [ 1、flash擦写前禁止flash数据缓存,操作完后恢复0 P$ C' o# Y1 b! Z. s+ p /* Disable data cache */* r6 w8 }6 H: D" o& y$ J$ X __HAL_FLASH_DATA_CACHE_DISABLE();//FLASH操作期间,必须禁止数据缓存1 l+ V+ ]2 I1 M# a- N$ W- l+ O /* Enable data cache */- `/ h8 k7 d4 c; p/ r' l __HAL_FLASH_DATA_CACHE_ENABLE();//开启数据缓存 2、如果上述办法还不行可以在操作flash前增加清标志操作 /* Clear pending flags (if any) */, C- f( K: m8 ?5 D __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \4 n( T6 \1 Z* J3 `6 t FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR); 3、看门狗影响: L, s+ M9 y& n7 Q. |7 }4 H* _ 操作flash期间不要调用HAL_IWDG_Refresh(&hiwdg); 并且看门狗未开启或者屏蔽MX_IWDG_Init();的初始化 : g, a, Y4 f. ^' ^- q9 W! T, F 软件最好不调用HAL_IWDG_Refresh(&hiwdg);/ s3 _9 W6 g2 L' ]
- h# N' q& U2 W C7 Y4 w/ i8 a, e' x 问题二:擦除flash失败,死机问题, V( A- ]7 Z: S% ~+ A$ L+ l; A4 d 我用了串口空闲中断+DMA接收、发送模式 软件仿真发现很容易在擦flash的时候CPU频繁进入串口中断(其他任务无法进入),最后复位" u% q( k1 c ~ 关键问题是: HAL_UART_IRQHandler(&huart2);必须在中断里优先执行,放在最前端,不能放在用户程序以后。 如果不用flash擦写,顺序其实关系不大。9 W# n# R4 h& g8 p! q 5 I+ T& ^8 \: S- I 可能跟芯片也有关系(之前用F429就没这个问题)9 q4 ^6 f* k0 J- {7 I4 Q4 ? : K# [% _3 { T! M0 V- ~: A
4 w' ~# a+ m; L+ f ———————————————— v* k- n- }7 p6 J0 Z( m 版权声明:axsdffff1 如有侵权请联系删除 6 q8 G$ V. E$ A/ x9 R; F0 | " [' \! V0 h0 s& G : A" S/ d8 \& D |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版