STM32Cube IDE使用IAP的一些注意问题

例子是用CAN来传输的,仅为了验证IAP的跳转,在此处记录一些遇到的问题及处理方式,中间也借鉴了很多网上各路大神的处理方式。

1.跳转进HardFault_Handler:

跳转前加上这俩句很重要

__disable_irq();
__disable_fault_irq();

2.Cube IDE生成和KEIL生成的BIN文件栈顶数据不一样:

 if (((*(__IO uint32_t*)ADDR_FLASH_SECTOR_2) & 0x2FF00000 ) == 0x20000000)

判断栈顶数据是否合格,IDE中F4芯片APP生成的BIN文件其栈顶数据与Keil生成的栈顶数据不同,所以使用0x2FF00000来判断栈顶数据。使用0x2FFE0000不兼容KEIL和IDE(栈顶数据0x20020000),测试发现KEIL编译的APP可以使用。

3.Cube IDE生成的APP文件跳转无法执行而KEIL生成的可以:

可能是APP的Main函数入口地址不对,IDE生成的文件也需要像KEIL一样进行内存偏移,因为我的IAP内存占用<32KB,所以在APP中需将其Flash地址进行行地址偏移再生成BIN文件;由于F4是块擦除,用的前俩个块是16KB,为了防止地址冲突APP存在了第3块内存往后。

1)例如在STM32F407VETX_FLASH.Id更改如下:

2)system_stm32f4xx.c更改如下

4.不要在CAN接收邮箱回调中进行跳转,跳了会卡死,亲测。

5.自己写的传输BIN文件的软件记住一定要确定是否发送的数据是正确的,我写的发送程序没注意逻辑里面少发了几个,没发全,导致程序跳转不执行。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
stm32cubeide是一种集成开发环境,用于开发和编程STM32微控制器。其中包含了许多功能强大的工具和组件,方便开发者进行嵌入式系统的设计和开发。 IAP (In-Application Programming)是一种在应用程序中进行编程的方法。它允许我们通过软件更新来更新嵌入式设备的固件,而无需使用外部编程工具或者物理连接进行更新。 在stm32cubeide中,IAP可以通过以下步骤进行实现: 1. 首先,我们需要在设备中的flash存储器中分配一定的空间来存储固件的更新文件。这些文件可以通过网络或者其他外部介质传输到设备上。 2. 接下来,我们需要编写一个用于读取更新文件并将其写入flash存储器的应用程序。这个应用程序可以通过IAP库函数来实现。这些库函数提供了一些接口,方便我们进行flash的编程操作。 3. 在应用程序的适当位置,我们可以添加代码来触发固件更新的过程。这可以通过按下按钮、接收到特定的命令或者设定的定时器触发等方式来实现。 4. 当固件更新过程启动后,IAP的应用程序会将更新文件中的内容从flash存储器的指定位置读取出来,并写入到设备的flash存储器中。 5. 在固件更新过程完成后,设备会重新启动,并从更新后的固件开始运行。 总之,stm32cubeide可以通过IAP功能来实现在应用程序中对STM32微控制器进行固件更新的功能。它提供了一个方便的开发环境和相关的库函数,使得嵌入式系统的固件更新变得更加简单和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值