GD32(7)程序烧录及运行

news/2024/5/3 8:36:01/文章来源:https://blog.csdn.net/weixin_47447179/article/details/126601723

目录

  • 简介
  • 启动方式
    • Boot0=0,Boot1=x
    • Boot0=1,Boot1=0
    • Boot0=1,Boot1=1
  • 烧录方式
    • ICP
    • ISP
    • IAP
      • IAP的作用
      • IAP与ICP、ISP的运行差别
      • IAP的Bootloader程序实现
      • IAP的APP程序实现

简介

       微控制器在硬件中作为核心,通过执行保存在内部存储器中的程序,运行各种外设,并通过引脚,控制其它电路,而将程序保存在微控制器内部存储器的过程,被称为烧录。

       烧录的方式可分为以下三种:

  • ICP(In-Circuit Programmer,在电路编程)
  • ISP(In-System Programming,在系统编程)
  • IAP(In-Application Programming,在应用编程)

       在介绍不同烧录方式的区别前,先介绍一下微控制器的启动方式。

启动方式

       微控制器的启动方式有引脚Boot0和Boot1的电平决定,一般通过拨码开关或引脚+跳线帽的方式控制,根据组合有以下三种启动方式,其中‘x‘表示高电平或低电平(即高低电平皆可)。
在这里插入图片描述

Boot0=0,Boot1=x

       当Boot0=0, Boot1=x时,上电复位后微控制器从内部Flash的主存储区开始运行程序,该地址一般是0x0800 0000。

       设置该启动模式前,程序应该被保存在内部Flash主存储区的最前面。

Boot0=1,Boot1=0

       当Boot0=1, Boot1=0时,上电复位后微控制器自动运行引导装载程序,即内部Flash信息块中的Bootloader区,通过运行该程序将代码引导装载至内部Flash中,完成程序烧录。

Bootloader区的地址可能随着微控制器的不同而改变,主要是由于内部Flash的主存储区大小变化。

Boot0=1,Boot1=1

       当Boot0=1, Boot1=1时,上电复位后微控制器从内部SRAM开始运行程序,该地址一般是0x2000 0000。

       同理,设置该启动模式前,程序应该被保存在内部SRAM的最前面,并且由于SRAM掉电后不会保留数据,因此不能进行复位等操作,一般该启动模式用于调试程序。

烧录方式

ICP

       ICP(In-Circuit Programmer)指在电路中编程,需要ST-Link、J-Link等烧录器进行烧录(此时使用JTAG、SWD等接口),使用该烧录方式时,通过烧录器连接计算机和微控制器后通过keil5进行程序烧录(听说除了keil5还有其它软件,但都需要烧录器),此时烧录文件为编译后产生的bin文件。

       通过ICP进行烧录时,启动方式设置为第1种,即Boot0=0,Boot1=x,以在烧录完成并复位后直接从内部Flash开始运行。

虽然这时候在硬件设置启动方式为Boot0=0,Boot1=x,但烧录器会在下载时调整为Boot0=1,Boot1=0以进行程序烧录,但这不影响后续复位后的程序运行。

ISP

        ISP(In-System Programming)指在系统编程,不需要烧录器,但同样需要将计算机和微控制器连接,用于作为程序的数据进行传输,可以使用USB、USB转串口模块(常用)等方式进行烧录,在烧录时计算机需要打开ISP烧录软件,并选择对应的模式,一般不同微控制器使用的ISP软件不同,下图分别是ST和GD使用的ISP软件。

       红框中为烧录时选择模式,DTR(Data Terminal Ready)表示数据终端准备好,RTS(Request To Send)表示请求发送 。可以看到都是通过串口进行烧录的(当然还有其它的ISP软件)。

       通过ISP烧录时,启动方式设置为第2种,即Boot0=1,Boot1=0,运行引导装载程序以将传输的数据作为程序存储在内部Flash最前面,烧录完成后需要修改启动方式为第1种。

       通过ISP方式烧录到程序文件通常是hex文件。

当然,使用此种模式一般将Boot0接到按键上,然后不按下接高电平,按下后接低电平,此时通过ISP烧录前按住按键即可。

在这里插入图片描述

IAP

        IAP(In-Application Programming)指在应用编程,不需要通过烧录器、USB等设备与计算机连接,但需要从SD卡等存储设备获取新程序(bin文件)进行自我更新(当然,通过USB、UART等接口获取的程序也可行)。

       IAP烧录方式的烧录逻辑是:在内部Flash的最前面烧录第1个程序(称为Bootloader程序),其次在相对0800 0000具有偏移的位置存储第2个程序(称为APP程序)。在Bootloader程序中,完成APP程序的更新,以及跳转至APP程序执行。

APP程序则和上述两种烧录方式烧录的程序相同,为正式运行的程序。

IAP的作用

       IAP一般可以用于产品的程序更新,避免更新时需要对其进行收回、拆解等步骤,并且方便用于自行操作。

IAP与ICP、ISP的运行差别

       ICP和ISP都是将1个程序存储到内部Flash中并运行,程序在内部Flash中的存储空间分布如下图所示,最前面是栈顶地址,其次是各个中断向量,然后是各个中断向量对应的中断程序入口,最后是main函数入口。

       程序运行时,栈指针指向复位中断向量,其次通过该向量跳转至复位中断程序中运行,复位中断程序一般在startupxx.s文件中定义,用于初始化系统并跳转至main函数运行,最后进入main函数执行循环。当中断请求出现时,栈指针指向对应中断向量,并通过该向量跳转至对应的中断程序中运行,运行结束后再回到原位置,继续运行循环中的内容。

在这里插入图片描述

       IAP是从Bootloader程序中跳转至APP程序中运行,因此在内部Flash中的空间分布略有不同,如下图所示,在执行Bootloader程序的main函数时,进行APP函数的跳转过程,最后执行APP程序中的main函数。当中断请求出现时,栈指针指向Bootloader程序中断向量表中对应中断向量,并通过该向量及程序偏移值跳转至对应的中断程序中运行,运行结束后再回到原位置,继续运行循环中的内容。

在这里插入图片描述

IAP的Bootloader程序实现

       Bootloader程序主要完成APP程序的更新以及跳转,其中APP程序的更新即从接口或存储设备中获取后存放在内部Flash对应区域中接口(相对首地址有偏移量)。

       APP程序的跳转可参考以下代码,其中& 0x2FFE0000并与0x20000000判断是否相等,表示该地址在0x20000000 ~ 0x2001 0000之间(理论上可修改,在内部SRAM中即可)。

void GotoApp(u32 appAddr)
{//App复位中断服务函数void (*appResetHandler)(void); //延时变量u32 delay;//检查栈顶地址是否合法.if(0x20000000 == ((*(u32*)appAddr) & 0x2FFE0000)) {//获取App复位中断服务函数地址,用户代码区第2个字为程序开始地址(复位地址)appResetHandler = (void (*)(void))(*(u32*)(appAddr + 4));//设置App主栈指针,用户代码区的第一个字用于存放栈顶地址SetMSP(*(u32*)(appAddr));//跳转到App__set_FAULTMASK(1);//关闭所有中断NVIC_SystemReset();//系统复位}
}

       其中SetMSP为汇编程序编写的函数,如下所示,其中r0为addr的地址,具体可参考ARM架构基本寄存器一文及该专栏。

__asm static void SetMSP(u32 addr)
{MSR MSP, r0BX r14
}

IAP的APP程序实现

       APP程序为用户程序,实际上任意程序都可以,但需要进行相应的配置,配置步骤如下:

  1. 设置起始地址和存储空间
           在keil中设置起始地址和存储空间的大小,如下图所示,在Options for Target 'Target1’对话框中,打开Target标签页,勾选IROM1选项,并将起始地址设置为0x8010000,大小为0x70000(即448KB,可修改,用于存放APP程序),此时APP程序代码存放地址即为Flash起始地址加上相对偏移量X(这里将偏移量X设置为10000),即0x08010000。

在这里插入图片描述
2. 设置中断向量表偏移量

       在APP程序的main函数执行硬件初始化前,加入以下代码,设置相对偏移量X为0x10000。

nvic_vector_table_set(FLASH_BASE,0x10000);
  1. 设置bin文件生成
           通过上面两个步骤即可生成APP程序,但keil默认生成hex文件,因此需要设置生成bin文件:如下图所示,在Options for Target 'Target1’对话框中,打开Target标签页User标签页,勾选Run#1选项,并在对应的User command栏中添加格式转换工具fromelf.exe路径、bin文件存放路径和用户程序路径,3个路径之间通过空格隔开。

fromelf.exe路径在leil安装路径中找,bin文件存放路径任意,用户程序路径指APP程序的axf文件路径。
注意:路径可以是相对路径或绝对路径,并且需要空格隔开。

在这里插入图片描述

       设置结束后点击编译,即可在上面填写的bin文件路径中找到对应的bin文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_381822.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站安全防护措施有哪些

想要我们的网站在网络中安全稳定运行,网站安全防护是不可或缺的环节,那么网站安全防护需要做哪些措施呢,这些措施能起到什么作用呢,接下来一起跟着小编一起来看看吧。 服务器安全狗和网站安全狗2022新版更新 更有效帮助用户防护网…

精品基于Uniapp+SSM实现的公园植物介绍APP

《[含文档PPT源码等]精品基于UniappSSM实现的公园植物介绍APP[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具: 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务…

设备通过国标GB28181/海康Ehome接入EasyCVR,视频无法打开的原因分析及解决方法

EasyCVR平台支持多类型设备、多协议方式接入,包括市场主流标准协议国标GB/T28181、RTMP、RTSP/Onvif协议等,以及厂家私有协议,如海康SDK、大华SDK、海康Ehome等。平台可将接入的流媒体进行处理及分发,分发的视频格式包括RTSP、RTM…

Swift Practice # 172 Swift 取得网页资料并制作台湾乡镇气象连结JSON

Swift Practice # 172 Swift 取得网页资料并制作台湾乡镇气象连结JSON 上一篇解决了使用Google Admob套件所产生的Link问题,让广告可以顺利显示。 [ Swift Practice # 171 Google Admod 闪退之-ObjC Linker 与SPM 上一篇简单的练习改变SwiftUI Map的显示比例,达到所有显示资料…

python3 词频统计计数分析+可视化词云 jieba+wordcloud 数据分析

hi, 大家好,我是宋哈哈,今天分享一个利用 python 的 jieba 库 和 wordcloud 词云库 做一个字符串的词频分析和词云可视化 编程环境: python 版本:3.6.8 编辑器:pycharm 2020.1.3 专业版 系统环境&#xff1…

使用聚类(K-means)分析方法对骑手进行分类标签定义

什么是聚类分析 聚类分析的目标就是在相似的基础上收集数据来分类,属于无监督学习。就是通过行为数据,通过算法将相似的人群聚集在一起,形成不带标签的人群簇。再人为的对人群簇进行分析,寻找特征标签。 一、数据构建 根据骑手的…

电脑重装系统开机后运行慢怎么办

小编就给大家分享四个电脑运行慢的方法,可以选择适合自己的方法去使用,一般情况都是可以解决掉电脑开机后运行慢的问题,我们接着看看吧。 还有其它的电脑重装系统方法 工具/原料: 系统版本:windows7系统 品牌版本&a…

Leetcode题解——30. 包含min函数的栈(辅助栈思想)

题目地址:剑指 Offer 30. 包含min函数的栈 - 力扣(LeetCode) 目录 一.算法思想 二.代码实现 三.拓展思考 首先说结论,这道题虽然难度不大,但是算法思想很重要,是辅助栈应用的生动实例。 所以&#xff…

(10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】

(1)工业界推荐系统-小红书推荐场景及内部实践【业务指标、链路、ItemCF】 (2)工业界推荐系统-小红书推荐场景及内部实践【UserCF、离线特征处理】 (3)工业界推荐系统-小红书推荐场景及内部实践【矩阵补充、…

VSCode 配置 C++ 环境

开学了,后面更新速度会更慢,望周知。 接上回: https://blog.csdn.net/orangebench11/article/details/126111356 先说一下, 这个教程不是给完整json复制粘贴, 是要跟教程配置 (放心, 大部分配置都很简单)。 安装VSCode 官网: Visual Studio Code - C…

2021年研究生数模B题论文记录

2021年研究生数模B题论文记录1.常见数据处理方法:2.相关性系数选择3.聚类算法4.一种数据降维方式5.预测模型文章来源 2021年全国大学生研究生数学建模竞赛优秀论文集合,B题,文章编号:B21100130067 1.常见数据处理方法:…

Golang高性能日志库zap + lumberjack 日志切割组件详解

文章篇幅较长,可以先收藏防止迷路~ 目录zap日志库1. why zap?2. 简单使用3. 自定义logger例子4. Gin项目使用zap6. lumberjack 日志切割组件zap日志库 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 能够将事件记录到文件中&a…

Java刷题面试系列习题(六)

文章目录前言Java题目练习⭕题目一: 统计一句话中重复单词的个数🌟代码演示💯思路解析⭕题目二: map简单应用🌟代码演示💯思路解析⭕题目三: 集合排序🌟代码演示💯思路解…

分享查题公众号制作过程

分享查题公众号制作过程 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转&#xf…

不要再把数据可视化搞成表面工程,论数据可视化的正确逻辑

日前,我国网民规模达10.51亿的消息上了热搜,点进去看才发现是中国互联网络信息中心(CNNIC)发布了最新的《中国互联网络发展状况统计报告》,其中有很多值得思考的信息,也为未来发展指明了大的方向。就比如网…

Linux内核设计与实现 第一章 Linux内核简介

1.1Unix的历史 1969,贝尔实验室的程序员Dennis Ritchie 和Ken Thompsin等,编写Multics失败,不甘心没有交互式操作系统,设计了一个文件系统原型,这个原型最终演化成了Unix。 Unix系统设计简洁,发布时提供源代码&#x…

AviX Ergo 改善工作条件的视觉人体工程学

随着装配线的要求越来越复杂,人体工程学正成为关注的焦点。AviX Ergo 通过视频评估带来了一种全新的方法来改善工作场所的人体工程学。 AviX Ergo 将 AviX 方法对工作场所的深入分析与公认的 Borg CR-10 量表相结合,以确定工作场所的生理压力水平,同时评估心理压力。 1、BOR…

uniapp一键生成iOS通用链接

第一步:开启Associated Domains服务 登录苹果开发者中心 ,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID,确保开启Associated Domains服务 开启Associated Domains服务后需要重新生成profile文…

即时零售加速布局,社区团购的优势依旧非常明显

新零售业态不断发展,线上便捷性和个性化推荐优势逐步放大,线下渠道智能化水平持续提升,线上线下渠道趋向深度融合。即时零售、无接触消费和直播带货等新消费场景加快布局并保持发展势头。随着社会环境的变化以及购物需求的旺盛刺激&#xff0…

跨越技术鸿沟,革新存储产业:华瑞指数云重磅发布下一代软件定义存储产品

2022年8月31日,由华瑞指数云(ExponTech)主办的“全自研下一代软件定义存储产品体验沙龙”在北京圆满举办。发布会现场,华瑞指数云重磅推出全自研极速分布式块存储产品WDS 。这是继2021年11月24日该公司在中国数据与存储峰会发布Wi…