功能:
在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:
BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。
BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。
BOOT1=1 BOOT0=1 从内置SRAM启动,这种模式可以用于调试。
STM32三种启动模式对应的存储介质均是芯片内置的,它们是:
1)用户闪存 = 芯片内置的Flash。
2)SRAM = 芯片内置的RAM区,就是内存啦。
3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区
域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。
扩展资料
System memory:
从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。
系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。
一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。
为了恢复Arduino的功能,必须得重新给ATMega328P单片机里烧写bootloader(其实Arduino就是在AVR单片机中预置了一个bootloader程序,这样再配合Arduino开发环境就是所谓的Arduino了,但Arduino这个词本身只留给官方使用)。当然在淘宝上也能买到已经烧写好的AVR单片机,只是自己手上已经有了AVR单片机,就没必要去花那冤枉钱了。
于是马上打开万能的百度,输入关键字“Arduino bootloader”果然,一大堆乱七八糟相关的问题就出来了,经过一轮的筛选,发现许多说的也并不是很清晰,不过让我明白了个大概:一个普通的AVR单片机确实能烧写bootloader之后作为Arduino使用。那么问题来了,如何把bootloader烧录到AVR单片机中去了?这的确是个问题,反正对于不懂AVR开发的我来说是个问题。不过还好之前在淘宝上买了一个USBASP下载器,跟之前擦除bootloader一样,也要用到progisp软件(因为此时的ATMega328P只是一个普通的AVR单片机,用Arduino开发软件是烧写不进去的)。
既然要烧录bootloader,那么什么是bootloader呢?正如你所想,bootloader当然是一个程序,既然要烧录到单片机中去,应该是一个HEX之类的文件。但是,bootloader文件从哪来呢?继续百度。。。找到了,在Arduino软件安装目录中的hardware\arduino中。此文件夹下的“boardstxt”文件很重要,是很重要,其他的或许都可以在百度上找到,但因为这个文件折腾了我大半个晚上,百度上也没有明确的说明。打开文件,找到自己对应的Arduino版本,因为我的是“Arduino Uno”,于是锁定“unoname=Arduino Uno”区域的说明,因为看上去很乱,一定要仔细去看。找到“unobootloaderlow_fuses=0xff"指编程熔丝低位为FF,”unobootloaderhigh_fuses=0xde“指编程熔丝高位为DE,”unobootloaderextended_fuses=0x05“指扩展位为05。这三个值非常重要,是决定你烧录bootloader成功的关键。至于这三个值具体是什么意思,我也不是很不清楚,但AVR单片机的烧录时需要设置熔丝位,而且不能乱设置,这也是AVR跟51单片机的不同之处。
用progisp软件把这三个熔丝位的值写入到AVR单片机中,然后继续浏览”boardstxt“文件往下看,找到”unobootloade旦长测短爻的诧痊超花rpath=optiboot“这就是说要烧录的bootloader文件在bootloaders\option文件夹中,“unobootloaderfile=optiboot_atmega328hex”文件名就是optiboot_atmega328hex,这就是接下来需要烧录到AVR单片机中的程序。用progisp软件调入此文件,然后直接写入到AVR单片机中就行了,一个支持Arduino的AVR就做好了。。。
其实这个问题本身不难,但对于没接触过AVR的人来说,还是要花许多时间的,中间也会存在许许多多各种各样的问题。至于progisp的使用方法很简单,百度上的教程也很多,还有手上必须有一块可以烧录AVR单片机的下载器。我当时就是忽略了那三个熔丝位的值,所以反反复复也没有成功,百度上面也没有对”boardstxt“文件做详细的解释。没设置熔丝位程序是可以正常的烧录进去,但Arduino是不能用的,所以必须要按照官网给出的说明 *** 作。我当时大多数时间主要花在两个问题上,一个是HEX文件具体位置,因为Arduino有不同的版本,所以HEX文件也不同,还有一个就是熔丝位上。
bootloader没烧下Arduino程序自然是错的。
在Arduino的hardware文件夹里有一个bootloader文件夹,里面有hex格式的各种bootloader。
用ISP烧写不成功可以检查连线看看。
还有用pl2303做串口下载很有问题,Arduino下载时需要复位信号的。
为满足日常开发需求,现在很多情况下一个片子需要通过BootLoader和Application两段程序组成。
Bootloader:一般用作用户升级Application用户程序用,程序的起始地址为:0x08000000,当遇到Application程序有更新的情况下,可以很方便和友好的通过BootLoader程序来对其进行更新。Bootloader更新Application的方式和途径有很多,比如串口的IAP、U盘的IAP等等,本人常用U盘进行升级。
Application:用户程序。一般起始地址并不是再0x08000000。
调试烧写hex固件的方式我一般选择的是Jflash,方式也很多,比如,Stlink的烧写软件,串口的烧写软件(MCUISP挺好用)等等。
第一步:将多个HEX文件合并成一个HEX文件。
这里以两个HEX为例,其中一个为BootLoader,另一个为Application。
1新建一个文本文档,并命名成XXXhex
2通过各种编辑器分别打开BootLoaderhex、Applicationhex和XXXhex。我这里用的是notepad++。
3把Bootloader里面的内容全部复制到XXXhex中
4删除XXXhex中的最后一行(:00000001FF)
5将Applicationhex中的内容全部复制并添加到XXXhex的结尾
6保存,此时的XXXhex文件就是一个合并了Bootloader和Application的固件。
第二步:烧写固件
烧写固件比较简单,但是要注意两个hex的文件要确保烧写的地址。
以上就是关于STM32的引脚BOOT0 BOOT1的功能。全部的内容,包括:STM32的引脚BOOT0 BOOT1的功能。、如何烧录 arduino 的 bootloader、请教各位如何用usbisp烧写bootloader等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)