STM32 ISP烧录过程

发布者:angelbaby最新更新时间:2018-08-22 来源: eefocus关键字:STM32  ISP  烧录过程 手机看文章 扫描二维码
随时随地手机看文章



STM32在芯片生产过程中内嵌了一段引导程序,其作用就是通过串口将程序下载到Flash中,为以后的软件更新提供了极大的便利,用户不需要利用仿真口进行下载程序,从而极大的提高了工作效率。

STM32复位之后,如果检测到Boot1引脚为低电平,boot0引脚为高电平,芯片就执行内部固话的ISP引导程序,接收来自上位机的命令和数据。整个烧录过程如下图所示:

 

ISP的过程:

1.芯片复位

在给STM32复位之前,首先要确定BOOT0,BOOT1引脚的状态.通过各种方式,先让BOOT0处于高电平状态,BOOT1处于低电平状态,然后在RST脚上产生一个负脉冲,STM32就能进入ISP状态.注意,复位之后,一定要延时一定的时间,让ISP程序稳定,才能发送指令和数据.

2.芯片连接

 复位后,ISP程序已经处于接受连接的状态,电脑软件串口设置成1200~115200波特率,偶校验,8位数据位,1位停止位,然后发送一个0x7f,等待STM32回复。STM32的ISP程序利用这个0x7f来测试波特率,如果收到了0X79,表示连接成功了,可以进入下一步操作;否则,必须检测BOOT0,BOOT1引脚,并重新复位STM32.

dbyte(0) = &H7F
    Call SendBinData(dbyte, 1, 1)        '等待接收79
    Lab.Caption = "连接芯片成功........" + vbCrLf

 ReDim dbyte(1)
    dbyte(0) = &H0
    dbyte(1) = &HFF
    Call SendBinData(dbyte, 2, 15)       '等待接收79
    For i = 0 To 14
        str = str & Right("00" & Hex(Recvbuff(i)), 2) & " "
    Next
    Textmsg1.Text = str
    Lab.Caption = Lab.Caption + "读取芯片版本成功........" + vbCrLf + "当前版本号为:" + Mid(str, 7, 2) + vbCrLf

 3.读取ID版本号

发送0x020xFD.命令发送之后,需要等待STM32 ISP程序回复,如果接收到0x79,读取成功。

dbyte(0) = &H2
    dbyte(1) = &HFD
    Call SendBinData(dbyte, 2, 5)       '等待接收79
    For i = 0 To 4
        str = str & Right("00" & Hex(Recvbuff(i)), 2) & " "
    Next
    Textmsg2.Text = str
    Lab.Caption = Lab.Caption + "读取寄存器成功........" + vbCrLf + "当前寄存器版本号为:" + Mid(str, 7, 5) + vbCrLf
  

 4.擦除芯片

 发送一个双字节命令0x44+0xBB,让芯片执行擦除动作,等待回复0x79,然后再发送0xFFFF+0x00命令,让芯片招待全片擦除.如果接收到0x79,表明全片擦成功了!


 5.烧录程序

 全片擦除之后,就可以开始烧录程序了.首先发送双字节指令0x31+0xCE回复0x79,则继续用多字节命令(5个字节)发送一个32位的地址,此地址就是等待写入数据的地址,注意4个字节对齐.收到回复0x79之后,就可以发送N个字节数据了(注意N最大为256).重复以下过程,直到把所有代码发送出去

 6.读锁定

 烧录完毕之后,为了防止程序被读出,可以设置读保护.发送双字节命令0x82,~0x82,先行回复0x79,再等待一次0x79,回复成功之后,表明芯片已经被读保护了.


关键字:STM32  ISP  烧录过程 引用地址:STM32 ISP烧录过程

上一篇:51单片机复位电路详解
下一篇:STM32 内核复位 与 系统复位 区别及程序实现

推荐阅读最新更新时间:2024-03-16 16:11

stm32用什么软件编程 stm32的32指什么 stm32单片机的基本组成
  stm32用什么软件编程   STM32可以使用多种软件进行编程,包括:   Keil MDK-ARM:Keil是一种非常流行的ARM Cortex-M微控制器编程软件。它包含了一个完整的开发环境,包括代码编辑器、编译器、调试器和仿真器等。Keil MDK-ARM支持C/C++语言编程,可用于快速开发STM32应用程序。   STM32CubeIDE:STM32CubeIDE是STMicroelectronics推出的一个免费的集成开发环境,支持STM32微控制器的开发。它包含了一个基于Eclipse的IDE、编译器、调试器和STM32软件库等。STM32CubeIDE支持C/C++语言编程,具有丰富的工具和功能,可以大大提高
[单片机]
STM32之FLASH操作
说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装 芯片 配置、 芯片 ID、自举程序等等。当然, FLASH还可以用来装数据。 自己收集了一些资料,现将这些资料总结了一下,不想看的可以直接调到后面看怎么操作就可以了。 FLASH分类 根据用途,STM32片内的FLASH分成两部分:主存储块、信息块。 主存储块用于存储程序,我们写的程序一般存储在这里。 信息块又分成两部分:系统存储器、选项字节。 系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用ISP方式加载程序时,就是由这个程序执行。这个区域由芯片厂写入BootLoa
[单片机]
串口通讯(DMA模式)
在高级语言中,I/O 流输入(input)操作一般都要求指定要读取的数据的最大长度(字节数)。当接收到至少1字节、最多所指定的字节数时,函数返回。 STM32 串口接收数据时,HAL API 要求指定数据长度。但无论轮询、中断或是DMA方式,都必须完整地接收到这么多字节,程序流程才继续。如何接收变长消息,我想不到特别好的实现方式。一种方式是,轮询加超时。另一种方式是,设计消息协议,使消息头为定长,且消息头内包含消息体的长度。但是,如果通讯异常,导致消息数据错误或丢失,那么,还是缺少“提前返回”的机制。 相对来说,轮询加超时的方式似乎更好些。效率低,但是是可靠的。我也不确定。 DMA是STM32内的一个硬件模块,它独立于
[单片机]
max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)
1、STM32 硬件SPI max7219 8位数码管显示模块 数码管模块电路图 /***************************************************************** Updated time: 12th,12,2015 Function:通过MAX7219驱动数码管 ******************************************************************/ #include “delay.h” #include “sys.h” #include “usart.h”//串口通信 #define Max7219_pinCLK PAout(
[单片机]
max7219驱动数码管程序(51单片机+<font color='red'>STM32</font> MAX7219数码管程序案例)
简单的办法来实现STM32分块式内存管理
一、内存管理简介 内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种,他们其实最终都是要实现 2 个函数:malloc 和 free;malloc 函数用于内存申请,free 函数用于内存释放。本章,我们介绍一种比较简单的办法来实现:分块式内存管下面我们介绍一下该方法的实现原理,如图 42.1.1 所示: 内存管理表的项值代表的意义为:当该项值为 0 的时候,代表对应的内存块未被占用,当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。比如某项值为 10,那么说明包括本项对应的内
[单片机]
简单的办法来实现<font color='red'>STM32</font>分块式内存管理
STM32入门学习之ADC(STM32F030F4P6基于CooCox IDE)
#include stm32_lib/inc/stm32f0xx_rcc.h #include stm32_lib/inc/stm32f0xx_adc.h #include stm32_lib/inc/stm32f0xx_gpio.h int main(void) { //时钟配置 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC IO配置,此处定义PA0口为ADC端口 GPIO_InitTypeDef PORT_ADC; PORT_AD
[单片机]
STM32驱动16位高精度AD TM7705/AD7705,带2.8寸TFT显示
最近在搞一个往届的电子设计大赛题目,用到AD7705就将它的程序移植到了原子的STM32F103ZET6上,供大家参考使用 制作出来的实物图如下: 2.8寸LCD显示屏界面: 硬件接线,直插原子NRF无线模块上就可以了: 单片机源程序如下: #include led.h #include delay.h #include key.h #include sys.h #include lcd.h #include usart.h #include TM7705.h #include stdio.h #include string.h #include INITUI.h //TM7705/AD7705直插正
[单片机]
<font color='red'>STM32</font>驱动16位高精度AD TM7705/AD7705,带2.8寸TFT显示
STM32单片机特性解析
STM32单片机 由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、 低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一流的外设:1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等等,在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度,由于其简单的结构和易用的工具再配合其强大的功能在行业中赫赫有名。其强大的功能主要表现在: 特性 1、内核:ARM32位Cortex-M3CPU,最高工作频率72MHz,1.25DMIPS/MHz,单周
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved