STM32
直播中

莫循虎

7年用户 880经验值
私信 关注
[问答]

STM32F1 IAP操作读保护选项字节设置,APP使用系统复位跳转后无法运行IAP的原因?

最近调试一个程序,是基于STM32F1做的IAP,升级前后需要修改选项字节,FLASH_EraseOptionBytes函数内OB->RDP=RDP_Key语句实现读保护的解除,如果我的APP程序将该语句屏蔽、IAP程序没有屏蔽,即APP接到升级指令后执行FLASH_EraseOptionBytes芯片设置读保护,而升级结束后执行FLASH_EraseOptionBytes芯片解除读保护。我现在有一个问题,APP使用系统复位跳转后无法运行IAP,需要断一次电才行,IAP升级结束后也是一样跳转不出IAP,需要断电复位,而非系统复位。

回帖(2)

王秀华

2024-5-13 11:07:17
系统复位和断电复位的效果应该是一样的,都会清RAM数据。 
举报

王磊

2024-5-13 18:10:51
STM32F1 IAP(In-Application Programming)操作是一种允许在运行时对固件进行升级的技术。在您的案例中,您提到了在升级前后需要修改选项字节,以及在APP程序中屏蔽了解除读保护的语句。以下是可能导致APP使用系统复位跳转后无法运行IAP的原因:

1. 选项字节未正确设置:在升级过程中,确保选项字节被正确设置,以便在系统复位后能够正确跳转到IAP程序。

2. 复位问题:系统复位可能无法清除某些寄存器的状态,导致IAP程序无法正常运行。断电复位可以清除所有寄存器的状态,这可能是为什么断电复位后IAP程序能够正常运行的原因。

3. 中断配置问题:在升级过程中,确保所有相关的中断配置正确,以便在系统复位后能够正确触发IAP程序。

4. 代码问题:检查您的IAP程序代码,确保在升级过程中没有引入任何错误或异常。

为了解决这个问题,您可以尝试以下步骤:

1. 确保选项字节在升级前后被正确设置。检查FLASH_EraseOptionBytes函数中的OB->RDP=RDP_Key语句是否正确。

2. 在APP程序中,尝试在系统复位前添加一个延时,以便给系统足够的时间来清除寄存器状态。

3. 检查IAP程序的中断配置,确保它们在系统复位后能够正确触发。

4. 仔细检查您的IAP程序代码,确保没有引入任何错误或异常。

5. 如果问题仍然存在,尝试使用STM32CubeMX工具生成一个示例IAP项目,以便与您的项目进行比较,找出可能的问题所在。

6. 如果可能,尝试在不同的STM32F1开发板上进行测试,以排除硬件问题的可能性。

通过以上步骤,您应该能够找到导致APP使用系统复位跳转后无法运行IAP的原因,并采取相应的措施来解决这个问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分