1. bootloader项目实现整体运行逻辑:
完成以上逻辑 我们就可以实现在bootloder内更新任意的用户APP (在线IAP的内容会在后面讲解实现包裹UART方式和FDCAN方式,本期测评首先实现基础的Bootloader) 2. 硬件资源项目直接使用Nucleo-U3的默认BSP实现 初始化VCP串口用于Log信息打印 因此该部分硬件配置不再赘述 3. Flash 地址规划bootloader 和 APP 我们需要放在不同 Flash 区域,防止后下载的程序会覆盖前一个程序。
我们可以现在代码中提前定义好这三个宏定义
在keil中 我们可以需要直接更改链接设置 或者编写sct文件来将boot或者APP代码链接到指定位置
bootloader 链接地址:
4. 启动和跳转原理STM32U3 是 Cortex-M33 内核。程序启动依赖中断向量表,向量表的前两个 32 位数据非常关键: 、
正常上电时,CPU 从 bootloader 的向量表启动:
当 bootloader 要跳转到 APP 时,需要模拟一次从 APP 启动的过程。APP 的向量表位于
bootloader 跳转 APP 的步骤如下: 读取 APP 向量表中的初始 MSP。 读取 APP 向量表中的 Reset_Handler。 校验 MSP 是否位于有效 SRAM。 校验 Reset_Handler 是否位于 APP Flash 区域。 关闭中断,避免 bootloader 的中断在跳转过程中打断流程。 反初始化 HAL 和 RCC,让 APP 从干净状态重新初始化外设。 关闭 SysTick,并清除 NVIC 中断使能和挂起标志。 设置 设置 MSP 为 APP 向量表中的初始栈地址。 重新打开中断。 跳转到 APP 的 Reset_Handler。 在跳转前 一定要校验APP是否完整合法 不然会出现各种情况 校验和跳转的核心代码如下
核心运行代码如下
实现效果整理来说最关键的部分就是理清APP跳转的原理 其余部分代码十分简单 难度不大 另外 因为代码中使能了串口打印Log 所以需要勾选MicroLib来实现串口的重定向功能 不然会出现各种奇怪的问题 实现效果(暂未烧录APP部分)
可以看到Bootloadder已经完成APP校验以及跳转判断的逻辑了 接下来我们烧录APP到指定位置看下效果
APP工程中已经提前设置好了向量偏移部分,APP 并不是从 因此 APP 工程需要在
APP成功运行 这个时候如果我们手动按住KEY 然后按下复位键 MCU默认也停留在Bootloader中
|
【STM32U3评测】使用INS5699 RTC模组
【评测汇总】STM32U3 系列开发板评测全汇总 | 吃透新品核心性能与实战场景
【stm32U3测评】FDCAN 满载性能实测
【STM32U3 评测】CAN FD测试与UDS OTA升级
【STM32U3 评测】基于 CAN 的 UDS OTA 不完全实现指南
【STM32U3评测】轻量级人脸检测部署。
【STM32U3 评测】FDCAN 性能极限与软硬件协同开发实测
【STM32U3评测】基于 HSP 的轻量级人脸检测部署
【STM32U3评测】低功耗模式功耗测量
【STM32U3评测】低功耗模式功耗测量
微信公众号
手机版