STM32F103C8在应用编程(IAP)介绍及实现
1,ISP和IAP介绍和比较
STM32F103单片机默认支持ISP(在系统编程In System Programming, ISP),即通过ISP软件(Flash_Loader_Demonstrator)通过USART1向Flash烧写程序。它的实现方式是通过单片机的Boot0和Boot1引脚来让单片机进入系统存储器启动方式(ISP启动),系统存储器中是厂商提供的bootload固件。这种方式得优点是使用厂商的bootload和下载软件,方便简单。但缺点是必须通过硬件引脚设置,无法实现在线升级。
IAP(在应用编程(In Application Programming, IAP)是另一种可下载固件的方式,它可以实现在线升级,但需要自己开发bootload。单片机启动模式使用主Flash启动。
下图是STM32单片机的3种启动方式:(通过Boot0和Boot1引脚设置选择)
ISP模式,单片机上电启动后,会直接执行用户程序;
IAP模式,单片机上电会先运行bootloader,bootloader决定是下载固件还是执行用户程序。
2,IAP的Flash分配情况
Flash中需要有2块固件,分别是bootload和application,如下图:
具体Flash分配如下:
3,bootload实现的技术要点
在工程中需要设置Flash和Ram空间如下:
定义application的起始地址
#define ApplicationAddress 0x8002000 // 8K
跳转到application的代码:
typedef void (*pFunction)(void);
static void start_application()
{
/* Jump to user application */
uint32_t JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
pFunction Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
}
4,application实现的技术要点
在工程中需要设置Flash和Ram空间如下:
因为0x08000000处存储的是bootload的中断向量表,application的中断向量表存储在在0x08002000,所以需要在main函数开始处,执行中断向量offset设置。
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
而且bootload下载固件是用的bin文件,我们需要通过执行如下命令生成bin文件
C:\Keil\ARM\ARMCC\bin\fromelf.exe --bin -o ..\Output\application.bin ..\Output\application.axf
在Keil中如下设置,可在编译完成后自动生成。
5,固件烧录步骤
1,烧录bootload
使用Flash_Loader_Demonstrator工具下载bootload.hex到单片机
2,下载application
使用Hypertrm下载application.bin到单片机
Hypertrm 的串口设置如下:
单片机上电,bootloader启动
输入1,bootload进入Download Image模式
选择菜单Transfer下的Send File…
选择要下载的程序application.bin,协议选择Ymodem
点击Send,开始传输
等待传输完成后,输入3启动application
ISP软件Flash_Loader_Demonstrator,超级终端Hypertrm,STM32F103C8T6的bootload和application的完整工程代码可从下面的分享中下载。
https://download.csdn.net/download/tanzj123/14964219
STM32F103C8在应用编程(IAP)介绍及实现相关推荐
- 计算机 编程 教程 pdf,计算机专业教程-第3章编程接口介绍.pdf
下载 第3章 编程接口介绍 • DB2 UDB应用程序概述 • 嵌入S Q L编程 • CLI/ODBC应用程序 • JAVA应用程序 • DAO .R D O .A D O应用程序 本章将介绍对DB ...
- java面向方面编程_面向方面编程的介绍----基本概念
面向对象的编程中常用的概念是:继承.封装.多态.在面向方面的编程中常使用的概念是:advices/interceptors, introductions, metadata, and pointcut ...
- 编程关键词介绍...
编程关键词介绍: gcc是GUN compiler Collection (GUN编译器套件),也可以简单理解为编译器,他可以编译多种语言. GNU是基于Unix开发设计,并且是与Unix兼容的操作系 ...
- 输入2个正整数lower和upper(lower_题库 | 华为研发工程师编程题型介绍及解析 第 2 期...
题目1:给定两个已经升序排序好的的序列 A={a1,a2,a3,-an} 和 B={b1,b2,b3-bn} ,一个数 R,找出满足以下条件的的(ai,bj)序列对. 1.ai<=bj 2.bj ...
- pythonguitkinter编程入门_Python Tkinter GUI编程入门介绍
一.Tkinter介绍 Tkinter是一个python模块,是一个调用Tcl/Tk的接口,它是一个跨平台的脚本图形界面接口.Tkinter不是唯一的python图形编程接口,但是是其中比较流行的一个 ...
- OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)
PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了. 在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简 ...
- abb机器人离线编程软件叫做_工业机器人离线编程(ABB)1-2 常用离线编程软件介绍.pptx...
1-2 常用离线编程软件介绍;一.常用离线编程软件;1. ABB RobotStudio离线编程软件介绍RobotStudio 是一款 PC 应用程序,用于机器人单元的建模.离线创建和仿真.如图1-1 ...
- 幼儿机器人编程课程介绍
幼儿机器人编程课程介绍?对于很多的家长们来说,孩子的学习一直都是他们十分关心和重视的一件事情.很多的家长在培养孩子的学习的时候,也可以说是十分的耐心的.他们会给孩子选择一些能够对于孩子学习有帮助的课程 ...
- 朱有鹏 socket编程接口介绍(3)
朱有鹏 socket编程接口介绍(3) 建立连接 socket(man 2 socket) socket()函数类似于open()函数,用来打开一个网络连接,如果成功则返回一个网络文件描述符(int类 ...
- Motoman机器人离线编程——MotocomES介绍
欢迎关注Jungle的Motoman机器人离线编程专栏系列文章: Motoman机器人离线编程--Motocom32开发简介 Motoman机器人离线编程--Visio Studio环境配置 Moto ...
最新文章
- 先进的ListenableFuture功能
- 空间统计分析_【空间分析】地理探测器原理
- php生成随机密码的几种方法
- 死锁(python 版)
- 打造自己的专业图像工具-Visual C++ 2005图像编程系列【四】
- sql2005安装过程,(不装C盘)
- [CXF REST标准实战系列] 一、JAXB xml与javaBean的转换
- 免费源码赠送之 printf(C语言简化版)
- docker 定时重启脚本_群晖Docker容器定时执行重启任务
- 将GeoIP的region_code列表也复制过来一份
- Docker桥存储卷管理
- 友盟分享 微博 c8998文件不存在
- 掌握el-table的formatter方法,提升数据展示效果
- Android第三方开发包值高德地图SDK使用介绍
- python解椭圆方程的例题_《椭圆》方程典型例题20例(含标准答案)
- 计算机创建只读用户,如何把电脑的文件夹在局域网共享成只读,别人不能删除和修改?...
- USB OTG功能是什么意思?
- 夏培肃完成了第一台电子计算机运算器,【判断题】夏培肃完成了第一台电子计算机运算器和控制器的设计工作,同时编写了我国第一本电子计算机原理讲义。...
- 北大计算机陈鹏,陈鹏-北京语言大学人事处
- DM8168 IPNC Boa移植