|
问题: 此问题由客户提出,客户在使用STM32F411 开发产品的时候,采用的是HIS 作为主时钟,同时使用了 UART 与其他MCU 进行异步通信. 客户发现部分产品UART 不能正常通信. 调研: 1. 通过使用示波器来测量UART 的TX 的波特率,发现误差较大,查看原理图和代码发现他们使用 HIS 作为主时钟,且没有使用PLL 来倍频. 2. 由于UART 直接用HIS 作为时钟源,所以考虑通过使用LSE 校准STM32F411 的HIS 值来使得 UART 波特率准确. 3. 我们STM32 官方提供了基于STM32F0 的HIS 校准方法AN4067(基于STM32Cube).其基本原理如 下写的很清楚: 4. 所以我们将其移植到STM32F4 上: a. 替换STM32F0HAL 为STM32F4HAL b. 修改工程器件相关的配置. c. 去掉与STM32F4 HIS 校准无关的文件,只保留his.c/h d. 修改main.c 的主程序,初始化校准前频率测试校准后频率测试. HSIFrequencyBeforeCalib 为校准前的频率值,可以在IAR 的Watch 窗口查看. HSIFrequencyAfterCalib 为校准后的频率值,可以在IAR 的Watch 窗口查看. e. 定义使用USE_REFERENCE_LSE 和__HSI2LSECALIBRATE_TEST__,使能使用 LSE 校准HIS 功能函数. 结论: 1. STM32 MCU 内部高速时钟是可以通过外部提供的精确时钟源进行校准的. 2. 我们提供一篇应用笔记和参考代码给客户演示如何校准HIS,基于STM32Cube 的良好的可 移植行,很方便的从STM32F0 移植到其他STM32 产品上面. 3. 如果客户在使用异步通信且没有使用PLL 作为时钟源,建议在系统启动的时候增加校准代 码来增强系统的容错能力. 详细代码和解答请下载文档:https://www.stmcu.org.cn/document/detail/index/id-216750 更多实战经验文档:https://www.stmcu.org.cn/document/list/index/category-657 |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版