在联机下载程序文件哪里选择HEX文件,在点击开始编程之前,还需要把跳线帽改一下,进入BooeLoader程序,不然就会一直卡在那里。切换引脚之后,要点击一下复位键,因为STM32在刚复位的时候才会读取BOOT引脚,程序运行之后,BOOT引脚是无效的。STM32执行的程序就是,不断接收USART1的数据,然后刷新到主闪存,在接收到数据之后,这时候STM32还处于BOOTLoader的刷机程序中,这时候就要把跳线帽换回来,复位,就会执行程序了。
串口下载的原理:
0x08000000存储的是c语言编译后的程序代码,只要把程序写入这个位置,STM32执行的就是这个代码。把什么程序写入这个位置,STM32就执行什么程序。串口发送的话,就把数据通过串口发送到单片机,刷新到这个位置就就可以了。
但是接收并转存数据,这个操作本身就是一个程序,也就是要用程序实现自我更新。就像机器人给自己换电池一样,但是这是不可能的,所以就要在大机器人之外制造一个小机器人,专门用来换电池,对于这个程序来说,就是BootLoader。它是ST公司写好的一段代码,存储位置是ROM区的最后,1FFF F000,也叫自举存储器,用途是程序的自我更新,用于串口下载,程序不断刷新,BootLoader接收USART1的数据,刷新到程序存储器。这时候主程序处于瘫痪状态,更新完了之后,才会执行新程序。
想要更新程序,就必须有一个切换小机器人的过程,BOOT0引脚以及RST复位引脚的必须有高低电平的变化,可以设置设置两条线,自动帮我设置两个这两个引脚的电平。 上图右边四个引脚本来是流控的,但是这里不用流控,可以把它当做普通IO口,RTS跟DTR是输出引脚,可以用这两个引脚控制BOOT0引脚以及RST复位引脚,但是要有相应的硬件配件,搜索:STM32一键下载电路。
但是这款最小系统的芯片中没有,所以不能使用它,在小软件下面的选择那几种模式就没什么用了。还是得用跳线帽。
有一个缓招,就是勾选编程后执行,取消勾选编程到flash时写选项字节,这样在开始编程之后就会自动执行程序,但是在执行之后按复位键,这里又没用了,是一次性的,这个就相当于把数据刷新之后,虽然跳线帽还是处于BootLoader中,也就是SRAM存储器中,但是相当于手动执行了一条跳转指令,执行了FLASH程序,但是复位一下,就相当于重新刷新了BOOT配置,程序没反应了。
读FLASH,就是把芯片中的程序读取出来,.bin是没有地址信息的原始数据文件,.hex是有地址的,使用串口下载的时候,一定要选择.hex文件。
读器件信息,以及清除芯片,
选项字节区:
读保护,就是可以防止程序被偷走,设置成读保护的时候,回到keil下载就会失败,这时候需要回到这里重新设置成非读保护,在取消读保护的时候,芯片内容会被清空,防止被偷。
选项的数据不会根据程序变化而变化,他一直都在,还有一个好处就是可以用上位机很方便的修改,比如FlyMcu活着STLINK Utility。
写保护可以用Flash的每几页单独进行写保护,写保护如果是把前面的几页写保护了,下一次下载肯定出错,因为选项配置的参数只能在Flash刷新时顺便刷新,写保护了,没办法把程序写入单片机了,也就没办法解开写保护了,进入一个死循环,这点需要注意。
转自:https://blog.csdn.net/m0_63148816/article/details/130633832?spm=1001.2014.3001.5502