STM32™ 自举程序中使用的 USART 协议 , z1 _* h: _+ s# ]" W. A% t. H6 u 前言 , P9 [) ]9 d- W1 z3 r& V+ H/ O( X5 Z / c0 |; g7 l; i; n7 J 本应用笔记将介绍 USART 协议在 STM32 微控制器自举程序中的应用,还将详细介绍支持的每个命令。要详细了解器件自举程序的 USART 硬件资源和要求,请参见“STM32 系统存储器自举模式”(应用笔记 AN2606)。相关文档可从 www.st.com 下载:AN2606“STM32 系统存储器自举模式”! T3 N7 S5 P# y. S8 o1 x 1 USART 自举程序代码序列 & m: v6 U: d( v- `当配置 STM32 微控制器为自举启动,系统将进入自举程序模式(有关详细信息,请参见应用笔记 AN2606“STM32 系统存储器自举模式”),自举程序代码将立即扫描 USARTx_RX引脚,等待接收 0x7F 数据帧:一个起始位,0x7F 数据位,偶校验位和一个停止位。 此数据帧的持续时间由 SysTick 定时器测量。之后,该定时器的计数值用于计算关于当前系统时钟的相应波特率因子。 随后,代码将相应初始化串行接口。通过计算出的波特率,发送确认字节 (0x79) 返回主机,表示 STM32 已准备好接收命令。 2 选择 USARTx 波特率 USARTx 串口波特率根据接收到的首字节长度进行计算,便于在很大波特率范围下运行自举程序。不过,为了确保数据传输正常进行,波特率必须确保在对应范围的上限和下限内。 5 j" Q$ E8 T( m8 T4 x: w9 T. C为了确保从主机到微控制器的数据传输正常进行,USARTx 内部初始化波特率与主机实际波特率之间的最大偏差应小于 2.5%。可使用如下公式计算主机波特率与微控制器波特率之间的偏差(fB,用百分比表示): 此波特率偏差为非线性函数,其结果取决于 CPU 时钟和主机波特率。函数 (fB) 的最大值随主机波特率增大。原因是,波特率预分频系数越小,隐含的量化误差越大。 2.1 最小波特率 . |3 b- v$ r0 y) n$ S测试所得的最小波特率 (BLow) 为 1200。波特率低于 BLow 会导致 SysTick 定时器溢出。此时USARTx 将无法正确初始化。 2.2 最大波特率BHigh + X, v/ |: w7 V( e6 R9 K: ~2 R为偏差不超过限值的最高波特率。BLow 和 BHigh 之间的所有波特率均低于偏差限值。测试所得的最高波特率 (BHigh) 为 115 200。 3 自举程序命令集 0 l. A( I* R, o: y' v+ N$ q下面的表 2 中列出了支持的命令。本部分将详细说明其中的每一个命令。 |