# stm32g0_iap_update **Repository Path**: tang176084/stm32g0_iap_update ## Basic Information - **Project Name**: stm32g0_iap_update - **Description**: 基于stm32g0c8t6的iap升级keil工程 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-07-06 - **Last Updated**: 2025-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # stm32g0_iap_update #### 介绍 基于stm32g0c8t6的iap升级keil工程 ## falsh分区 stm32g0308t6 flah共 64k (0x08000000 - 0x08010000),分成4个区域:Bootloader、APP、Calibrate(校准参数保存)、Config(升级配置) 区域 | 起始地址| 大小 -------| -----| ----- Bootloader | 0x08000000| 16k APP | 0x08004000| 46k Config | 0x0800F800 | 2k 程序首先从Bootloader首地址0x08000000处开始执行,Config配置区主要存放与升级相关的信息,先读取Config区的数据,如果校验不通过直接进入升级菜单,紧接着判断升级标志位,0xFF:升级,0xC7不升级; APP正常运行时,在一切初始化完成后,如果判断到升级位为0xFF,就把升级标志位置为0xC7,以免下次上电再次进入升级状态。 当串口收到上位机发来的升级命令(0x61 0xF1 0x55 0x55)时,再把升级标志位置0xFF,然后复位重启。 单片机重启判断升级标志位为0xFF,进入准备升级状态,核对产品ID,软硬件版本,紧接着进入升级菜单,选择bin文件进行升级。 Config配置区结构体 ```c #define DEVICE_NAME "GX01" #define HW_VERSION 0x01 #define FW_VERSION 0x01 #define UPDATA 0xFF #define NOT_UPDATA 0xC7 typedef struct config_data_s { char device_name[10]; //设备名称 uint8_t HW_vision; //硬件版本 uint8_t FW_vision; //软件版本 uint8_t updata_flg; //更新标志 uint8_t crc_cal; //crc8校验 }__attribute__((packed)) config_data_t; ``` ## 多个bin文件合并说明 第一次烧录准备 iap+app+config, 3个bin文件的合并文件。 iap.bin和app.bin可以通过keil的设置生成。 如果只烧录iap.bin和app.bin文件,第一次运行时会因为config区没有数据,CRC校验不通过,进会进入升级状态,要通过上位机烧录一次app程序。 预先写入config区的数据可以解决这个问题。 config.bin文件里的内容就是上述结构体成员默认不更新的参数,以16进制依次存放,最后一个字节(F4)是CRC校验算出 ```7 47 58 30 31 00 00 00 00 00 00 01 01 C7 F4 ``` 使用二进制文件合并工具进行合并成一个bin文件: 我制作的bin文件合并工具: ![](doc/bin.png) [https://gitee.com/tang176084/bin-merge-tool](https://gitee.com/tang176084/bin-merge-tool) ## 使用升级工具进行升级 使用二进制文件合并工具进行合并成一个bin文件: 我制作的基于Ymodel的升级工具: ![](doc/yod.png) [https://gitee.com/tang176084/pyqt_-iap_-tool](https://gitee.com/tang176084/pyqt_-iap_-tool) 在bin file选项里选择app的bin文件,然后直接点击update即可