【单片机学习之旅】(1-3)stm32F407自举配置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、自举模式
  • 二、系统存储器自举
    • 1.自举程序配置
    • 2.自举程序选择机制
    • 3.硬件连接要求
  • 三、自举程序中使用的协议
    • 1.USART 协议
      • —USART 自举程序命令
    • 2.其他协议
  • 总结


前言

什么是自举?自举就是单片机初始化自己达到开始跑程序的过程。
就好比笔记本按下开机键到开机界面的过程。

一、自举模式

在STM32中存储器采用固定的存储器映射,代码区域起始地址为 0x0000 0000(通过 ICode/DCode 总线访问),而数据区域起始地址为 0x2000 0000(通过系统总线访问)。Cortex™-M4F CPU始终通过 ICode 总线获取复位向量,这意味着只有代码区域(通常为 Flash)可以提供自举空间。STM32F4xx 微控制器实施一种特殊机制,可以从其它存储器(如内部 SRAM)进行自举。
【单片机学习之旅】(1-3)stm32F407自举配置_第1张图片

		复位后,在 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 激活

【单片机学习之旅】(1-3)stm32F407自举配置_第2张图片

	很简单,只需要将Boot0置1,Boot1z置0就行。

系统所需配置:
【单片机学习之旅】(1-3)stm32F407自举配置_第3张图片
【单片机学习之旅】(1-3)stm32F407自举配置_第4张图片
对于 USARTx 自举程序,系统时钟由嵌入式内部高速 RC 提供。执行 CAN 和 DFU 自举程序需要使用频率 (介于 4 MHz 到 26 MHz 之间)的外部时钟。

	可以看出F40xxx系列可以选择的自举串行外设还是很多的
	而F10xxx系列只支持通过USART1进行自举,程序下载方式就少了

2.自举程序选择机制

【单片机学习之旅】(1-3)stm32F407自举配置_第5张图片
上图是对不同串行外设的检测,其中最常用的莫过于USARTx 自举程序。

3.硬件连接要求

【单片机学习之旅】(1-3)stm32F407自举配置_第6张图片

	现在电脑上几乎没有RS232串口,可以用USB转串口代替(CH340、CP2102、PL2303等)

【单片机学习之旅】(1-3)stm32F407自举配置_第7张图片
【单片机学习之旅】(1-3)stm32F407自举配置_第8张图片

	某些单片机甚至还支持IIC,SPI下载。

三、自举程序中使用的协议

1.USART 协议

【单片机学习之旅】(1-3)stm32F407自举配置_第9张图片

当配置STM32微控制器为自举启动,系统将进入自举程序模式
自举程序代码将立即扫描 USARTx_RX 引脚,等待接收 0x7F 数据帧:
一个起始位,0x7F 数据位,偶校验位和一个停止位。

此数据帧的持续时间由 SysTick 定时器测量,并且定时器的计数值用于计算系统时钟相应的波特率因子。代码将初始化相应的串行接口。通过计算出的波特率,发送确认字节(0x79)给主机,表示 STM32 已准备好接收命令。

也就是说微控制器会等外部USART给它发送正确格式的数据帧:0x7F
然后自动根据数据帧持续时间把自己的串口初始化好,并返回0x79回应

—USART 自举程序命令

【单片机学习之旅】(1-3)stm32F407自举配置_第10张图片
编程工具 (PC) 到器件的所有通信均通过如下方式验证:
—校验和:接收到的数据字节块进行异或运算。每个通信结尾增加一个字节(校验和字节),包含前面所有字节异或运算的结果。异或运算所有接收到的字节,即数据包加上校验和字节,结果必须为 0x00
— 针对每条命令,主机都会发送一个字节及其补码(异或结果 = 0x00)
— UART:激活奇偶校验(偶校验)
每个数据包或者被接受(ACK 应答)或者被丢弃(NACK 应答):
• ACK = 0x79
• NACK = 0x1F

针对每个命令在AN3155应用笔记中有详细讲解,可以去STM32官方下载了解
根据这些命令可以自行开发一个上位机进行测试或下载代码

2.其他协议

【单片机学习之旅】(1-3)stm32F407自举配置_第11张图片

详细信息请参考AN3154应用笔记STM32自举程序中使用的CAN协议
USB DFU 协议请参考AN3156应用笔记STM32 自举程序中使用的 USB DFU 协议 

总结

如果说想深入理解stm32的自举过程,可以通过查阅相关文档或开发一个上位机软件来测试自举过程

你可能感兴趣的:(单片机,stm32,学习)