登录/注册

STM32F4 SD IAP

STM32F4 SD IAP

更多

在STM32F4上实现基于SD卡的IAP(在应用编程)功能,可通过以下步骤完成。核心思路是利用Bootloader从SD卡读取新固件并写入Flash,然后跳转到新程序执行:


1. 硬件连接


2. 内存划分

假设Flash大小为1MB(0x0800 0000 - 0x080F FFFF): 区域 起始地址 大小 用途
Bootloader 0x0800 0000 128KB IAP程序
应用程序 0x0802 0000 896KB 用户固件
参数区 0x080F 8000 32KB 存储升级标志/参数

:需在IDE(Keil/IAR)中修改应用程序的起始地址(VECT_TAB_OFFSET=0x20000)。


3. Bootloader设计步骤

(1) 初始化硬件

// 启用外设时钟
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;  // SDIO引脚时钟
RCC->AHB2ENR |= RCC_AHB2ENR_SDIOEN;   // SDIO时钟

// 初始化SD卡(使用SDIO或SPI)
SD_Init();  // 实现SD卡底层驱动

(2) 挂载文件系统(FatFS)

FATFS fs;
FRESULT res = f_mount(&fs, "", 0);  // 挂载SD卡
if (res != FR_OK) {
    // 错误处理(如LED报警)
}

(3) 检测固件文件

FIL firmware;
res = f_open(&firmware, "firmware.bin", FA_READ);
if (res != FR_OK) {
    // 文件不存在
}

(4) 擦除应用程序区Flash

// 解锁Flash
HAL_FLASH_Unlock();

// 计算需擦除的扇区(STM32F4扇区大小不一)
uint32_t StartSector = FLASH_SECTOR_5;  // 0x0802 0000对应的扇区
uint32_t EndSector = FLASH_SECTOR_11;   // 根据固件大小计算

FLASH_EraseInitTypeDef erase;
erase.TypeErase = FLASH_TYPEERASE_SECTORS;
erase.Sector = StartSector;
erase.NbSectors = EndSector - StartSector + 1;
erase.VoltageRange = FLASH_VOLTAGE_RANGE_3;

uint32_t SectorError;
HAL_FLASHEx_Erase(&erase, &SectorError);  // 擦除

(5) 从SD卡读取数据写入Flash

#define BUFFER_SIZE 4096
uint8_t buffer[BUFFER_SIZE];
uint32_t bytesRead;
uint32_t writeAddr = 0x08020000;  // 应用程序起始地址

while (1) {
    res = f_read(&firmware, buffer, BUFFER_SIZE, &bytesRead);
    if (res != FR_OK || bytesRead == 0) break;

    // 按32位写入(STM32F4要求)
    for (uint32_t i = 0; i < bytesRead; i += 4) {
        HAL_FLASH_Program(
            FLASH_TYPEPROGRAM_WORD,  // 32位编程
            writeAddr + i,
            *(uint32_t*)(buffer + i)
        );
    }
}
f_close(&firmware);
HAL_FLASH_Lock();  // 锁定Flash

(6) 跳转到应用程序

typedef void (*AppEntry)(void);
uint32_t appAddr = 0x08020000;

// 检查栈顶地址是否合法(在应用程序范围内)
if ((*(volatile uint32_t*)appAddr & 0x2FFE0000) == 0x20000000) {
    __disable_irq();  // 关闭中断

    // 重置中断向量表
    SCB->VTOR = appAddr;  // 设置VTOR寄存器

    // 设置主堆栈指针
    __set_MSP(*(volatile uint32_t*)appAddr);

    // 跳转到应用程序复位中断服务程序
    AppEntry entry = (AppEntry)*(volatile uint32_t*)(appAddr + 4);
    entry();
}

4. 应用程序设置

在应用程序中需:

  1. 修改向量表偏移(在main()开头):
    SCB->VTOR = 0x08020000;  // 与应用程序地址一致
  2. 编译时偏移地址设置(以Keil为例):
    • Options for Target → Target → IROM1 Start: 0x08020000

5. 固件更新流程

  1. 复制新固件firmware.bin到SD卡根目录。
  2. 重启设备,Bootloader检测到文件后自动升级。
  3. 升级完成后跳转至新程序。

6. 关键注意事项

通过上述步骤,即可实现在STM32F4上通过SD卡进行固件升级。

如何用STM32f4从网上写一个Gif文件到SD卡?

大家好,我有一个项目要使用 STM32f4 和 ESP8266 模块 v01 从互联网将 gif 文件写入 SD 卡 我是 STM32f4 和

2023-05-23 06:41:02

STM32F4时钟配置的操作步骤

本文将介绍STM32F4时钟配置的操作步骤、并对比时钟配置前后LED外设闪烁的快慢以及对应代码的讲解。

2023-04-21 11:29:44

浅谈STM32F4的时钟系统

  本文将介绍STM32F4的时钟系统。

2023-04-20 11:47:40

STM32F4 DAC数模转换实验例程

STM32F4 DAC数模转换实验例程(现代电源技术试卷西建大)-STM32F4 DAC数模转换实验例程,有需要的可以参考!

资料下载 佚名 2021-09-16 10:18:15

STM32F4 PWM-DAC实验例程

STM32F4 PWM-DAC实验例程(电源技术是sci吗)-STM32F4 PWM-DAC实验例程,有需要的可以参考!

资料下载 佚名 2021-09-16 10:14:07

STM32F4 SPI-FLASH实验例程

STM32F4 SPI-FLASH实验例程(java的哪个版本用于嵌入式开发)-STM32F4 SPI-FLASH实验例程,有需要的可以参考!

资料下载 手托初梦 2021-07-30 16:01:23

STM32F4内部Flash实验例程

STM32F4内部Flash实验例程(嵌入式开发版哪个好)-STM32F4内部Flash实验例程,有需要的可以参考!

资料下载 无人岛 2021-07-30 15:58:01

stm32f4舵机控制代码

stm32f4舵机控制代码资料免费下载。

资料下载 姚小熊27 2021-04-26 09:33:24

求大佬分享STM32F4串口IAP学习笔记

求大佬分享STM32F4串口IAP学习笔记

2021-12-08 06:41:30

STM32F4 IAP是怎样运行的

IAP是什么?STM32F4程序运行流程是怎样的?STM32F4 IAP

2021-10-26 07:08:03

谈谈STM32F4 IAP BOOTLOADER YMODEM

STM32F4 IAP BOOTLOADER YMODEM XModem、YModem、ZModem

2021-08-23 07:22:48

基于Cortex-M4STM32F4的复位序列

7是基于Cortex-M7内核,而Cortex-M7和Cortex-M3/M4的复位序列有些不一样。本文中,将针对这个问题做详细讲解。 STM32F4的复位序列

2021-02-16 06:14:00

STM32F4开发板STM32F4如何驱动外部SRAM芯片

国产存储芯片的底层技术攻关和相关科研工作,从而推动国家存储芯片设计前端产业变革和更进一步的发展。接下来星忆代理商英尚微电子介绍STM32F4开发板STM32F4如何驱动外部SRAM芯片。XM8A51216。

2020-07-01 15:07:09

基于STM32F4系列芯片和STM32CubeF4 HAL库组织和添加用户代码

常有人想使用STM32 DMA的双缓冲模式,但又觉得实现起来似乎有点困难,也不太容易找到现存的例程。我这里就基于STM32F4芯片及Cube库简单地演示下实现过程。

2020-06-10 08:38:44

基于STM32F4和RT-Thread通用BootLoader使用经验

基于STM32F4、RT-Thread通用BootLoader使用经验

2020-02-27 17:23:06

7天热门专题 换一换
相关标签