STMCU小助手
发布时间:2022-2-27 16:59
|
问题:% S2 {3 f( N+ k# B; n; ` 此问题由客户提出,客户在使用 STM32F411 开发产品的时候,采用的是 HIS 作为主时钟,同时使用了UART 与其他 MCU 进行异步通信.( \! S5 T# C0 j 客户发现部分产品 UART 不能正常通信. 调研: 1. 通过使用示波器来测量 UART 的 TX 的波特率,发现误差较大,查看原理图和代码发现他们使用HIS 作为主时钟,且没有使用 PLL 来倍频. 2. 由于 UART 直接用 HIS 作为时钟源,所以考虑通过使用 LSE 校准 STM32F411 的 HIS 值来使得UART 波特率准确.. {1 D# t% q$ _9 ]1 C" o$ P/ R 3. 我们 STM32 官方提供了基于 STM32F0 的 HIS 校准方法 AN4067(基于 STM32Cube).其基本原理如& D0 N5 r( A( } b* x0 ^2 s# h0 R 下写的很清楚:9 N) _5 N# G! d9 O" z $ i- \$ _+ i0 l+ O+ _0 I) }
0 F! m# m t; `+ N8 ?7 {0 |
4. 所以我们将其移植到 STM32F4 上: a. 替换 STM32F0HAL 为 STM32F4HAL* z! ?7 y" A+ v1 n9 O3 Q b. 修改工程器件相关的配置.- U; [* \; a) _! T% _, r1 N c. 去掉与 STM32F4 HIS 校准无关的文件,只保留 his.c/h& k% T% L) w+ K: o! Z0 C$ J8 ~ d. 修改 main.c 的主程序,初始化校准前频率测试校准后频率测试.: w/ _: x6 E7 Y! }% i7 U3 s HSIFrequencyBeforeCalib 为校准前的频率值,可以在 IAR 的 Watch 窗口查看.5 u& Q, k2 G% _ E7 f HSIFrequencyAfterCalib 为校准后的频率值,可以在 IAR 的 Watch 窗口查看." Y6 _ P& X4 K: g6 D8 g5 A5 b4 l e. 定义使用 USE_REFERENCE_LSE 和__HSI2LSECALIBRATE_TEST__,使能使用LSE 校准 HIS 功能函数.
d.详细代码参考附件源码例程.# R# ?. |/ ~7 \! }* b/ }8 o6 f + e* G+ ?- K# p2 O; N$ p6 q 结论: 1. STM32 MCU 内部高速时钟是可以通过外部提供的精确时钟源进行校准的. 2. 我们提供一篇应用笔记和参考代码给客户演示如何校准 HIS,基于 STM32Cube 的良好的可移植行,很方便的从 STM32F0 移植到其他 STM32 产品上面.3 B! T4 C1 D, u0 M' B3 N 3. 如果客户在使用异步通信且没有使用 PLL 作为时钟源,建议在系统启动的时候增加校准代码来增强系统的容错能力." g7 O. p, i" l2 G* n b: c O+ q |
【福利三:雨露均沾·逢7狂欢】之四:用一个定时器同步另外两个定时器输出PWM
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
【逢7发帖赢大礼】全网最简单的Arduino_STM32开发环境搭建教程!
STM32F4中文用户手册
STM32F400、STM32F402 Cortex-M4超值单片机
SPI 高温读错最后一位?STM32F42xx 官方根治方案
微信公众号
手机版