打印
[STM32F1]

用IAP去升级STM32,遇见跑飞现象

[复制链接]
351|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
louliana|  楼主 | 2025-2-27 03:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、检查供电电压
确保STM32的供电电压稳定,且在正常工作电压范围内。
检查电源文波大小,确保Ldo供电电压和电流满足要求。
在STM32的vdda和vssa引脚接磁珠,各电源硬件接滤波电容。
2、检查硬件连接
确保晶振及旁路电容靠近单片机,避免干扰。
检查是否有裸露的接口(如USB、IO口),做好防静电处理。
检查复位电路,确保复位电路电源稳定,加旁路电容。
3、分析软件问题
堆栈设置:检查编译器默认启动文件中的堆栈设置,根据项目代码量调整堆栈大小。
代码审查:检查代码中是否存在不合理的死循环、数组越界等问题。
中断管理:确保中断处理得当,设置清晰的中断优先级,及时响应和清除中断标志。
看门狗功能:如果使用看门狗功能,确保在适当的时候喂狗,避免程序被频繁复位。
4、使用调试工具定位问题
Registers工具:检查通用寄存器(R0~R15)的值,特别是堆栈指针(R13)和程序计数器(PC)。
Memory工具:搜索堆栈指针(R13)的值,找到可能的程序跑飞位置。
Disassembly工具:查看程序的反汇编代码,定位具体的指令地址。
Call Stack工具:查看程序执行过程中函数调用的顺序和当前位置,找到跑飞前的函数调用。
5、在HardFault_Handler中打断点
在HardFault_Handler函数中打断点,程序跑飞时会进入此中断。
通过Call Stack工具找到HardFault_Handler的调用者,定位跑飞前的代码。
6、特定场景下的处理
如果使用内部Flash存储,确保Flash内存操作合理,避免操作不当导致死机。
当电路中有无线射频信号(如蓝牙、WiFi、GSM)时,确保天线匹配良好,避免无线辐射干扰。
7、IAP升级过程中的注意事项
确保上位机软件与STM32单片机的通信接口配置正确。
在数据传输过程中使用校验和或CRC等方法验证数据完整性。
在数据存储时注意Flash存储器的特性,如块擦除和编程次数限制。

使用特权

评论回复
沙发
tpgf| | 2025-4-9 13:59 | 只看该作者
如果中断向量表的地址或内容配置不正确,程序在跳转到新固件后可能会因为无法正确处理中断而导致跑飞。

使用特权

评论回复
板凳
heimaojingzhang| | 2025-4-13 08:45 | 只看该作者
确保新固件的中断向量表位于正确的位置,并且与启动文件中的配置一致

使用特权

评论回复
地板
keaibukelian| | 2025-4-13 11:23 | 只看该作者
在编译和链接新固件时,仔细检查内存映射文件,确保新固件的代码和数据没有与原有的内存区域发生冲突。同时,合理规划内存空间,为中断向量表、堆栈等保留足够的空间。

使用特权

评论回复
5
paotangsan| | 2025-4-13 14:04 | 只看该作者
如果在新固件中使用了某些外设,而这些外设在旧固件中没有初始化或者初始化方式不同,可能会导致程序在访问这些外设时出现异常,进而引发跑飞。

使用特权

评论回复
6
renzheshengui| | 2025-4-13 16:30 | 只看该作者
时钟是单片机正常运行的基础,如果时钟配置不正确,可能会导致程序运行速度异常,从而导致跑飞。

使用特权

评论回复
7
wowu| | 2025-4-13 19:01 | 只看该作者
在新固件的入口函数中,正确设置主堆栈指针(MSP)和进程堆栈指针(PSP),确保它们指向正确的堆栈区域

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

1455

帖子

1

粉丝