提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
什么是自举?自举就是单片机初始化自己达到开始跑程序的过程。
就好比笔记本按下开机键到开机界面的过程。
一、自举模式
在STM32中存储器采用固定的存储器映射,代码区域起始地址为 0x0000 0000(通过 ICode/DCode 总线访问),而数据区域起始地址为 0x2000 0000(通过系统总线访问)。Cortex?-M4F CPU始终通过 ICode 总线获取复位向量,这意味着只有代码区域(通常为 Flash)可以提供自举空间。STM32F4xx 微控制器实施一种特殊机制,可以从其它存储器(如内部 SRAM)进行自举。
复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值,
用户可以通过设置BOOT1 和 BOOT0 引脚来选择需要的自举模式。
平常都是选择主Flash启动,有些时候才会选择存储器自举
启动延迟结束后,CPU 将从地址 0x0000 0000 获取栈顶值,然后从始于 0x0000 0004 的自举存储器开始执行代码。 #如果器件从 SRAM 自举,在应用程序初始化代码中,需要使用 NVIC 异常及中断向量表和偏 移寄存器来重新分配 SRAM 中的向量表。
对于F407嵌入式自举程序模式用于通过以下串行接口重新编程 Flash: ● USART1(PA9/PA10) ● USART3(PB10/11 和 PC10/11) ● CAN2(PB5/13) ● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。 嵌入式自举程序代码位于“系统存储器”中,在芯片生产期间由 ST 编程。 不同型号所支持的串行外设不同,详情请参见应用笔记 AN2606。
二、系统存储器自举
自举程序存储在 STM32 器件的内部自举 ROM 存储器 (系统存储器)中。在芯片生产期间由 ST 编程。其主要任务是通过一种可用的串行外设(USART、CAN、USB、I2C 等)将应用程序下载到内部 Flash 中。每种串行接口都定义了相应的通信协议,其中包含兼容的命令集和序列。
1.自举程序配置
STM32F40xxx/41xxx 自举程序通过应用模式 1 激活
很简单,只需要将Boot0置1,Boot1z置0就行。
系统所需配置: 对于 USARTx 自举程序,系统时钟由嵌入式内部高速 RC 提供。执行 CAN 和 DFU 自举程序需要使用频率 (介于 4 MHz 到 26 MHz 之间)的外部时钟。
可以看出F40xxx系列可以选择的自举串行外设还是很多的
而F10xxx系列只支持通过USART1进行自举,程序下载方式就少了
2.自举程序选择机制
上图是对不同串行外设的检测,其中最常用的莫过于USARTx 自举程序。
3.硬件连接要求
现在电脑上几乎没有RS232串口,可以用USB转串口代替(CH340、CP2102、PL2303等)
某些单片机甚至还支持IIC,SPI下载。
三、自举程序中使用的协议
1.USART 协议
当配置STM32微控制器为自举启动,系统将进入自举程序模式
自举程序代码将立即扫描 USARTx_RX 引脚,等待接收 0x7F 数据帧:
一个起始位,0x7F 数据位,偶校验位和一个停止位。
此数据帧的持续时间由 SysTick 定时器测量,并且定时器的计数值用于计算系统时钟相应的波特率因子。代码将初始化相应的串行接口。通过计算出的波特率,发送确认字节(0x79)给主机,表示 STM32 已准备好接收命令。
也就是说微控制器会等外部USART给它发送正确格式的数据帧:0x7F
然后自动根据数据帧持续时间把自己的串口初始化好,并返回0x79回应
—USART 自举程序命令
编程工具 (PC) 到器件的所有通信均通过如下方式验证: —校验和:接收到的数据字节块进行异或运算。每个通信结尾增加一个字节(校验和字节),包含前面所有字节异或运算的结果。异或运算所有接收到的字节,即数据包加上校验和字节,结果必须为 0x00 — 针对每条命令,主机都会发送一个字节及其补码(异或结果 = 0x00) — UART:激活奇偶校验(偶校验) 每个数据包或者被接受(ACK 应答)或者被丢弃(NACK 应答): ? ACK = 0x79 ? NACK = 0x1F
针对每个命令在AN3155应用笔记中有详细讲解,可以去STM32官方下载了解
根据这些命令可以自行开发一个上位机进行测试或下载代码
2.其他协议
详细信息请参考AN3154应用笔记STM32自举程序中使用的CAN协议
USB DFU 协议请参考AN3156应用笔记STM32 自举程序中使用的 USB DFU 协议
总结
如果说想深入理解stm32的自举过程,可以通过查阅相关文档或开发一个上位机软件来测试自举过程
|