STM32 加入Bootloader程序后主程序经常跑飞或者无法正常启动?

现象描述: app独自运行没有问题,初始化或者长时间运行都不会跑飞;但是加入bootloader后主程序出现异常。
注: bootloader内启用了systick,一个串口(用于升级主程序),一个外部IO中断。

程序框架:
0x08000000 ~ 0x08002000 :bootloader占用;
0x08002000 ~ 最大: app和备份app平分占用;

问题原因: 上述bootloader 中开启了3个中断且在转入app之前中断向量表映射至app起始地址;并且关闭了串口和外部IO中断;但是忽略了systick中断导致进入app后偶发程序harderror异常;

经分析,具体原因是app中加入了freertos并占用了systick定时器,在刚进入app后并没有立即初始化systick,原bootloader中断仍然会进入到当前中断服务函数中,freertos的systick中有切换任务的相关命令(会改变PC值),但实际这时还没有初始化freertos相关信息,导致PC取值异常。

综上: 在bootloader中占用的所有硬件资源外设资源,在进入app之前务必要deinit释放掉,特别是各种中断要从源头关闭释放。否则进入app后,原来设置的中断依然会在不停的中断,中断过程PC的值会被改变,进而出现异常现象。

STM32 Bootloader程序在进入app之前,要清除所有中断,关闭所有使用的外设资源;防止进入app后中断跳出导致app程序跑飞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值