项目场景:
MCU:STM32F405RG
RTOS:FreeRTOS
外设:ADC、PWM、TIMER、DAC
开关:硬开关/软开关
芯片库:HAL库
问题描述
- 反复开关上电MCU,不论是否连接外部模块。
- 以间隔5s去操作上下电。
- MCU的0x08000000处地址数据被修改。其他位置数据也会被偶然修改。
- 导致MCU无法正常启动。
- 电路上无电压电流异常问题。
- 此现象触发概率相对较大。
flash被改变的数据
flash正常数据
原因分析:
- 采用屏蔽中断的方式能够避免出现这类问题。
- 故猜测是否是中断问题。
- 通过大量测试分析后发现,对外设做反初始化,且每个初始化参数赋初始值。
- 再通过长时间测试后,未再发现问题。
- 故判定为TIMER初始化下,部分参数未设初始值,且没有做反初始化。
- 具体导致问题,大概率是HAL库/芯片本身问题。
解决方案:
- 对每个外设的初始化参数赋初始值。
- 在初始化前做反初始化。