×
单片机 > 单片机程序设计 > 详情

STM32 ISP烧录过程

发布时间:2020-05-28 发布时间:
|



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  烧录过程

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil(MDK-ARM)系列教程(七)_菜单