UART串口IAP下载电路及BOOTLOADER分析

针对正点原子的开发板上串口IAP下载电路进行的分析

关于BOOTLOADER

在STM32芯片出厂时,官方已经在片上系统存储器中固化好bootloader程序,这是使用串行外设(USART,CAN,USB,I2C等)将用户的APP下载到内部FLASH中.
UART串口IAP下载电路及BOOTLOADER分析
bootloader程序主要功能

  • 使用嵌入式串行接口按照预定义的通信协议下载代码
  • 可传送并更新 Flash 代码、数据和向量表部分

BOOT引脚配置,根据所用引脚配置的不同,可选择 Flash、系统存储器或 SRAM 作为自举空间
为了执行应用程序,必须先退出系统存储器自举模式。执行硬件复位即可实现此操作。
UART串口IAP下载电路及BOOTLOADER分析
STM32F42XX中USART bootlaoder需要使用内部HSI时钟源,RAM需要8KB,ROM(系统存储器0x1FFF0000)需要29KB,可以使用USART1和USART3(8位数据位,偶校验,1位停止位).
UART Bootloader代码执行序列(摘自AN3155)
UART串口IAP下载电路及BOOTLOADER分析

当配置 STM32 微控制器为自举启动,系统将进入自举程序模式(有关详细信息,请参见应 用笔记 AN2606“STM32系统存储器自举模式”),自举程序代码将立即扫描 USARTx_RX 引脚,等待接收 0x7F 数据帧:一个起始位, 0x7F数据位,偶校验位和一个停止位。 此数据帧的持续时间由 SysTick 定时器测量。之后,该定时器的计数值用于计算关于当前系统时钟的相应波特率因子。 随后,代码将相应初始化串行接口。通过计算出的波特率,发送确认字节 (0x79) 返回主机, 表示 STM32已准备好接收命令.

通信的波特率是MCU自己检测出来的,最小支持波特率位1200,最大波特率为115200

关于IAP电路

UART串口IAP下载电路及BOOTLOADER分析
上图是正点原子开发板的串口ISP下载电路
UART串口IAP下载电路及BOOTLOADER分析
这是BOOT管脚配置的电路,如配合ISP下载电路,需要将BOOT0,BOOT1接到GND.

图中 Q4 和 Q5 的组合构成了我们开发板的一键下载电路, 只需要在 flymcu 软件设置: DTR的低电平复位, RTS 高电平进 BootLoader。 就可以一键下载代码了,而不需要手动设置 B0 和按复位了。其中, RESET 是开发板的复位信号, BOOT0 则是启动模式的 B0 信号。一键下载电路的具体实现过程: 首先, mcuisp 控制 DTR 输出低电平,则 DTR_N 输出高,然后 RTS 置高,则 RTS_N 输出低,这样 Q5 导通了, BOOT0 被拉高,即实现设置 BOOT0 为 1,同时 Q4 也会导通, STM32F429 的复位脚被拉低,实现复位。然后,延时 100ms 后, mcuisp控制 DTR 为高电平,则 DTR_N 输出低电平, RTS 维持高电平,则 RTS_N 继续为低电平,此时 STM32F429 的复位引脚,由于 Q4 不再导通,变为高电平, STM32F429 结束复位,但是 BOOT0还是维持为 1,从而进入 ISP 模式,接着 mcuisp 就可以开始连接 STM32F429,下载代码了,从而实现一键下载

其实就是使用硬件流控制来将BOOT0管脚拉高和拉低,以及RST管脚拉高拉低,实现BOOTLOADER的加载和芯片复位.之所以用nRTS和nDTR是因为这两条线都是输出线.