STM32单片机的ISP使用方法

干了七八年51单片机和CPLD,最近几年又干STM32单片机和FPGA,都说30而立40不惑,现在30几还是没立,估计40几还是会惑,经常在网上闲吹久了,还是写点实用的东西,全当自己写的笔记,到40几迷惑时再回来看看。

1.前言

通常使用STM32都是在买个Jlink或DAPLink用JTAG/SWD就开始调试和下载程序,这个确实很方便,还可以调试。但是,当产品不能开盖而要求可以更新程序甚至远程更新程序时就显得不方便了。

一些大牛就自己写BootLoader然后通过产品接口就可以更新程序了,这其实就是IAP应用,但这种方法要求有点高,特别是BootLoader的编写有点麻烦(实际上网上可以找到范例),不过STM32官方使用UART1做了一个BootLoader固化在芯片中,只要满足一定条件就可进行程序更新,这个就是ISP。

所以,ISP的前提是产品使用了全双工的串口,并且连接到STM32的UART1上才行。这种模式相对简单也很实用,因为大多数产品都会留有串口。

2.进ISP模式

STM32代码和数据存储在三个区域: RAM区、用户存储区、系统存储区。

.RAM区,掉电会丢失, Debug调试时会用到此区域。

.用户区存储区,正常启动时进入的区域。

.系统存储区则即官方的Bootloader区,即本次要进入的区域。

STM32启动后默认进入用户存储区,即应用程序区,而如果要进入ISP模式则需要进入系统存储区才行。进入系统存储区有软件和硬件方法有两种方法:

2.1硬件方法:

在STM32复位前将BOOT0置高电平BOOT1置低电平,复位后程序将从系统存储器开始执行,进入Bootloader程序。(下表列出了Boot0/1不同时进入的区域)。

2.2软件方法:

通过程序跳转到系统存储区,也能进入BootLoader,下面是我写的代码:

__asm void __set_MSP(u32 mainStackPointer)

{

msr msp,r0

bx lr

}//此代码按里系统中应该有,但不知道为什么我Keil里没找到,但写了一个,如果有就忽略。

#define SystemRomAddr0x1ffff000//系统存储区的地址,如果芯片不同建议查一下

void EntyIspMode(void)

{

void (*BootLoaderFun)(void);

BootLoaderFun=((void *)(void))(*(u32 *)(SystemRomAddr+4));

RCC_DeInit();

SysTick_CTRL=0;

SysTick_LOAD=0;

SysTick_VAL=0;

__disable_irq();

__set_MSP(SystemRomAddr+4);

BootLoaderFun();

}

使用者在满足合适条件下(比如自定义 一个通讯协议)调用EntyIspMode()则可以进入ISP模式了。

3.写入程序

成功进入ISP模式后,上位机即可通过串口对STM32进行程序更新操作,这个操作可以从网上下载现有程序,直接将Hex灌进去即可,这就比较简单。

常用的软件有:

.STM32官方程序,

.FLYMCU这个是第三方的一个公司开发,比较常用,

.SSCOM5.1以上版本,以前就是一个非常好用的串口调试助手,后面集成了STM32下载器。

其他,这就不一一例举了。

如果是简单应用,就差不多了可以了,当然特殊应用情况可能也需要自己编写上位机程序来实现程序更新,这个就需要了解ISP的通讯协议了,后面节做一个简单介绍,如果更详细的建议还是上官网下载吧。

4.ISP协议简述

上位机首先向STM32发送0x7F,STM32收到后会根据此字节来自动匹配波特率,匹配完成后回传ACK正常或NACK异常(0x79=ACK,0x1F=NACK,下同)。正常后STM32等待上位机发送命令,然后根据命令执行ISP过程,如以下流程所示:

命令有:

详细的协议请到意法半导体官网上搜索 AN3155

《USART protocol used in the STM32 bootloader》里详细描述,这里就不一一举例描述了,只举例描述,如读版本号(GET cmd)

功能:获取stm32里bootloader版本号,以及支持的指令代码。

流程:

(0)

相关推荐

  • 单片机程序烧录的3种方式(ISP、ICP、IAP)是什么

    说起给单片机烧录程序,大家应该都不陌生吧,我最早接触单片机是从51单片机开始的,型号是STC89C52RC,当时烧录程序就是用的下面这种烧录软件--STC-ISP. 这种方式,通过串口连接单片机,选择 ...

  • STM32固件IAP程序实现

    STM32固件IAP程序实现

  • 重要【STM32学习笔记】STM32 BOOTLOADER配置以及APP跳转

      大家好,今天给大家介绍的是STM32的BootLoader以及它如何跳转运行到APP应用程序的例程.   首先我先给大家科普一下什么是BootLoader. 什么是BootLoader? Boot ...

  • STM32单片机Bootloader设计(下)

    之前一篇的<STM32单片机的Bootloader设计(上)>文章中,主要介绍了STM32的启动流程和内存主要空间的分配,这篇文章将在上一篇文章的基础上,来阐述一下STM32 Bootlo ...

  • OTA到底对控制器做了什么?

    随着特斯拉将OTA的功能引入到汽车中,汽车行业发生了新的范式革命,智能汽车相比传统汽车成为新物种的存在,OTA不仅是汽车不断成长的"生命通道",更是成为了车企新商业模式的" ...

  • 如何把Modbus的通信参数存在单片机的flash中-FreeModbus从站设计(11)

    FreeModbus从站设计(11)-把Modbus的通信参数存在单片机的flash中 关键词:FreeModbus CubeMX HAL库 flash 通信参数 作为从站,Modbus-RTU通信的 ...

  •  ISP IAP 详解与ISP IAP的实现

    本帖的大致内容分为三部分 1 STM32 IAP方式与ISP方式选择的具体实现操作步骤 2 ISP方式与实现过程 3 IAP方式与实现过程 ISP:In System Programing       ...

  • STM32F1下载程序方法

    插电,开机,你就可以看见板子自带的演示例程,一般显示这样的板子都是全新的哦 下载程序方法 STM32F1主要支持三种下载方式哦 1.ISP下载(串口) 2.JTAG仿真器下载 3.在线IAP下载 IS ...

  • 用2个按键控4路led解决方案stm32单片机89c51

    用2个按键控4路led解决方案stm32单片机89c51

  • 解决STM32单片机常见问题

    意法半导体STM32系列专为要求高性能.低成本.低功耗的嵌入式应用设计的ARM Cortex®-M0,M0+,M3, M4和M7内核的32位MCU.意法半导体的STM32基本型系列.增强型系列.USB ...

  • 解决单片机程序丢失的方法有哪些?

    改善电源 尽量改善电源.这是老话了.并不是说单片机能工作就行,电源要设计好,加上104去耦电容改进电路布局等措施. 使用带电压监测的复位芯片. 防止上电/下电时,单片机电压处于工作和不工作的临界时,单 ...

  • STM32单片机连接HC

    原文链接:https://blog.csdn.net/m0_37655357/article/details/72934643 首先,先来看一下这个模块的基本功能和原理. HC-SR04超声波测距模块 ...

  • STM32单片机Bootloader设计(上)

    文 / Edward    STM32的启动文件 STM32作为一款单片机,它的启动方式很简单,即当Boot配置了从内部Flash启动模式之后,一上电程序就会从0x8000000地址处开始执行文件,因 ...

  • UC头条:[STM32单片机学习]第三课: 开发板介绍和编程环境搭建

    [朱老师课程总结 侵删] 第一部分.章节目录 第三部分.随堂记录 3.3.1.STM32开发板详细介绍 3.3.1.1.开发板整体介绍 (1)各种外设和主板原理图 之前在STC51中使用的外设,都可以 ...

  • 全面对比分析51单片机、STM32单片机及PIC单片机的优缺点

    单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器RAM.只读存储器ROM.多种I/O口和中断系 ...

  • STM32单片机从零开始使用教程(八) FIR滤波器

    之前获得过adc的采样结果了,但是直接获得的信号往往都伴随有噪声,因此一般需要加一个滤波过程. 本次就尝试添加一个简单的数字滤波器. 获得fir滤波器 首先是get到我们的滤波器.滤波器设计是一个复杂 ...