上传者: for_dream1205
|
上传时间: 2025-09-01 01:50:06
|
文件大小: 470KB
|
文件类型: DOCX
AP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并拆解出来再使用J-Link重新烧录代码,这就增加了很多不必要的麻烦。站在用户的角度来说,就是能让用户自己来更换设备里边的代码程序而厂家这边只需要提供给用户一个代码文件即可。
而IAP却能很好的解决掉这个难题,一片STM32芯片的Code(代码)区内一般只有一个用户程序。而IAP方案则是将代码区划分为两部分,两部分区域各存放一个程序,一个叫bootloader(引导加载程序),另一个较user application(用户应用程序)。bootloader在出厂时就固定下来了,在需要变更user application时只需要通过触发bootloader对userapplication的擦除和重新写入即可完成用户应用的更换
### STM32F103VET6远程在线升级(IAP)详解
#### 一、IAP技术概览
IAP(In Application Programming)技术,即在应用编程,是一种允许微控制器在运行状态下进行固件更新的技术。对于采用STM32F10x系列芯片作为主控制器的设备而言,通常在生产时会使用J-Link仿真器预先烧录好应用代码。然而,一旦设备投入使用后,如果需要进行软件更新或修复漏洞等操作,往往需要将设备送回生产厂家,并且可能涉及复杂的拆卸过程,以便重新烧录代码。这种方式不仅增加了成本,也延长了设备维护的时间。
##### IAP的优势
- **降低维护成本**:通过IAP技术,用户可以直接更新设备中的固件,无需将设备寄回生产厂家。
- **提高用户体验**:用户可以自主控制更新时间,避免因返厂维修造成的不便。
- **增强安全性**:及时修复安全漏洞,减少安全风险。
##### IAP的工作原理
IAP解决方案的核心思想是将STM32芯片的代码存储空间划分为两个部分:
1. **Bootloader**:这部分代码是固定的,主要用于检测更新条件并负责执行固件的更新过程。
2. **User Application**:这部分代码是可以更新的,包含了实际的应用逻辑。
当设备启动时,首先会进入Bootloader阶段。在此阶段,Bootloader会检查是否有更新触发条件(例如通过特定按键、串口接收指令或检测到USB存储设备插入等)。如果有更新触发条件,则执行擦除现有固件并写入新固件的操作;如果没有更新触发条件,则直接跳转到User Application继续执行。
#### 二、STM32F103VET6硬件基础
STM32F103VET6的启动方式包括:
- **内置FLASH启动**:这是最常见的启动方式,用于存放应用代码。
- **内置SRAM启动**:适用于开发调试阶段。
- **系统存储器ROM启动**:较少使用,主要用于特定场合。
在本案例中,选择**内置FLASH启动**。STM32F103VET6的FLASH容量为512KB,地址范围为0x08000000至0x0807FFFF。为了支持IAP功能,需要对内部存储空间进行特殊规划。
##### 中断处理
中断是微控制器的重要特性之一。在STM32中,中断向量表位于代码起始位置后的第4个字节(0x08000004),用于存储中断服务程序的入口地址。在正常的程序流程中,发生中断时,处理器会根据中断向量表中的地址跳转到对应的中断服务程序。
在单程序模式下,中断流程如下:
1. 发生中断 → 查找中断向量表 → 跳转到中断服务程序 → 执行中断服务程序 → 中断返回。
当引入IAP机制后,内部FLASH的分配需作相应调整,以适应Bootloader与User Application的共存。此时的中断流程有所不同:
1. 上电初始化 → 从0x08000004获取复位中断向量地址 → 执行复位中断函数 → 跳转到Bootloader main函数 → 完成Bootloader任务 → 强制跳转到User Application的中断向量表地址 → 执行User Application main函数 → 发生中断请求 → 跳转到User Application中断向量表 → 跳转到新的中断服务程序。
#### 三、实现细节
在实现IAP功能时,需要注意以下几个关键点:
1. **Bootloader设计**:Bootloader应具备检测更新触发条件的能力,并能执行固件擦除与写入操作。
2. **中断向量表管理**:需要确保在不同的程序阶段,能够正确地指向当前有效的中断向量表。
3. **存储空间划分**:合理规划Bootloader与User Application之间的存储空间,确保足够的灵活性与稳定性。
4. **安全性考虑**:防止未经授权的固件更新,确保固件的真实性和完整性。
IAP技术对于提高STM32F103VET6等微控制器设备的可维护性具有重要意义。通过合理的软硬件设计,可以在不增加额外硬件成本的情况下显著提升产品的竞争力和用户体验。