【GD32F310开发板试用】IAP升级实验

news/2024/12/5 8:34:38/

首发极术社区。如对兆易创新GD32F310 MCU感兴趣,欢迎添加微信 aijishu2020 加入GD32技术讨论群。

什么是IAP

IAP( In Application Programming)即在应用编程,可以让用户使用自己的程序对MCU的中的运行程序进行更新,而无需借助于外部烧写器。

正常情况下,我们通过烧录器将程序烧录在起始位置为0x0800 0000的flash中,芯片中只有一个程序。而要实现IAP的功能,芯片中需要存储至少两个程序,第一个bootloader程序(起始位置依旧为0x0800 0000),通过该程序进行跳转主程序app。

实验介绍

IAP升级程序,可以在bootloaer接收新程序,也可以在主程序中接收,各有优缺。本次实验,采用的是bootloader中接收,接收前,擦除主程序位置的数据,然后将接收到的数据依次重新写入~~。
flash的内存分配:
bootloader :0x0800 0000–0x0800 1FFF
主程序:0x0800 2000–

本次时之前网上下载的,有配套的上位机,正好可以使用,所以就移植过来。

一些需要大致了解的基础

芯片flash如何擦除写入,GD32对应的是FMC(可以参考我前一篇报告https://aijishu.com/a/1060000000314717)
2.中断向量表
我了解的比较粗糙,具体可以去搜索引擎查找。

大概的意思就是MCU内的各个中断存储的位置。单片机启动后,会在中断向量表中读取各个中断的位置,然后才能正常调用, 中断向量表的存储位置为:0x08000004

使用bootloader跳转到主程序后,如果要正常运行,必须重新设置中断向量表的偏移。我们这个程序偏移了0x2000。

使用的函数:nvic_vector_table_set( NVIC_VECTTAB_FLASH , 0x2000); //设置中断向量表偏移

3.如何实现程序跳转
这个我讲不清楚,具体就看代码吧,抄来就能用的

  1. 中断的关闭和开启

bootloader在跳转到主程序前,需要先关闭总中断。

主程序开始前,需要重新开启总中断。同时bootloader中用到的中断最好deinit()一下,再重新init(),避免出错。

__set_PRIMASK(0); //开启所有中断
__set_PRIMASK(1);//关闭所有中断

实验过程

1.烧录bootloader程序

2.对主程序进行改造,使得程序可以正常运行。
2.1 设置中断向量偏移和重新开启总中断
注意:必须写在int main(){}函数内的前两行,如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nA8GNQer-1649928108407)(/img/bVburq)]

2.2 在魔术棒中设置一下偏移地址为0x0800 2000,这样烧录的程序不会覆盖掉前面的bootloader,生成的bin文件也起始地址也是在0x0800 2000。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IZlzPRqd-1649928108408)(/img/bVburs)]

2.3 设置生成bin文件
我的keil安装在D盘,请你根据自己的实际安装位置,重新设置一下路径。
D:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cgs3Iwk9-1649928108408)(/img/bVburt)]

3.重新编译一下主程序,可以改下串口的输出内容,作为升级前后的区分。

4.打开上位机,开始升级。
点击程序升级按钮,找到你生成的bin文件位置,选中后,按一下开发板上的Reset按键,程序就会自动开始升级。升级大致过程就是,上位机将bin文件拆分成N个包,然后通过串口发送到单片机,单片机接收并校验通过后,将数据写入flash。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ANhHQsoc-1649928108409)(/img/bVburC)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v1mDwjAB-1649928108409)(/img/bVburD)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aSCIjmPf-1649928108410)(/img/bVburE)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c0NyeuFb-1649928108410)(/img/bVburF)]

实验现象

升级前,循环输出app1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-axyDJX1g-1649928108411)(/img/bVburG)]

升级后,循环输出app2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZfIcdJVx-1649928108411)(/img/bVburH)]

注意:升级完成后,也需要按一下Reset键

所有的代码请自行下载:
链接: https://pan.baidu.com/s/1n4BECl7-adSlisDvaXsdmA?pwd=tvq5


http://www.ppmy.cn/news/574599.html

相关文章

【GD32F310开发板试用】入门向-usart的使用及printf函数的重定向

首发极术社区。如对兆易创新GD32F310 MCU感兴趣,欢迎添加微信 aijishu2020 加入GD32技术讨论群。 摘要 首先感谢极术社区和兆易创新公司给我这次机会,入选GD32F310K-START开发板的测评和试用。本开发板板载一块GD32F310K8T6芯片,该芯片是ARM…

C8051汇编语言递归,基于C8051F310单片机的LED灯控制器汇编语言程序调试

加 深对51单片机及其接口电路的理解,掌握定时/计数器、中断的应用编程技术及程序的调试方法。 2.实验内容 利用C8051F310单片机设计一个倒计时定时器,功能要求如下: 模式1:基本功能 主要技术指标要求如下: 1. 定时时间为9秒,定时精度为1秒 。 2. 在LED数码管上显示剩余…

【GD32F310开发板试用】使用六位半万用表测试ADC精度

首发极术社区。如对兆易创新GD32F310 MCU感兴趣,欢迎添加微信 aijishu2020 加入GD32技术讨论群。 项目地址 https://github.com/netube99/GD32F310G_START_ADC_TEST 感谢GD32为我提供了这块精致的GD32F310G-START开发板,经过周末两天的学习与开发测试&…

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

一、开发环境 桌面操作系统: Win10 开发软件: Keil MDKV5.36 RTOS平台: rt-thread 4.1.0 项目地址:https://gitee.com/lsslny/rt-thread/tree/gitee_master/bsp/gd32 二、任务计划 1、rt-thread 系统移植;&#xff…

GD32F310系列超值型Cortexr-M4 MCU 资料下载

GD32F310是一款基于 Arm Cortex-M4 RISC 内核的32 位通用微控制器,在增强处理能力、降低功耗和外设方面具有最佳性价比。GD32F310系列MCU最高主频可达72MHz并支持DSP指令运算。配备了16KB到64KB的内置Flash及4KB到8KB的SRAM,内核访问闪存高速零等待。为全…

GD32F310G8 -【6】硬件I2C软件I2C驱动0.96OLED

GD32F310-硬件I2C&软件I2C驱动OLED I2C 简介及特点 并行总线至 I2C 总线协议的转换及接口;同一接口既可实现主机功能又可实现从机功能;主从机之间的双向数据传输;支持 7 位和 10 位的地址模式和广播寻址;支持 I2C 多主机模式…

【GD32F310开发板试用】驱动ST7735 SPI屏幕

首发极术社区。如对兆易创新GD32F310 MCU感兴趣,欢迎添加微信 aijishu2020 加入GD32技术讨论群。 代码篇幅比较多,看测试结果请直接拉到最后。 一、硬件介绍 1. 屏幕介绍 屏幕驱动 ST7735 屏幕分辨率 135x240 驱动接口 SPI 2. 开发板连接 对应引脚 /…

GD32F310移植FreeRTOS

【GD32F310开发板试用】GD32F310移植FreeRTOS 项目地址:https://github.com/kings669/GD32F310-FreeRTOS 环境说明 首先我先说明我的环境: 我使用keil5的版本是V5.36,电脑系统是WIN10,使用的固件库版本是从官网下载的最新版2.2…