jasonZJR 发表于 2024-4-17 15:15:00

STM32F1/GD32F1内部8MHz晶振校准方法

本帖最后由 jasonZJR 于 2024-4-17 15:17 编辑

如果在项目中,不管出于什么原因不得不使用内部8MHz的时钟来作为主频率,都需要对时钟进行一个大致的校准,我看论坛好像没相关的帖子,本帖就仅记录一下


STM32F1和GD32F1校准的方法完全一致
校准步骤为
1.使用内部8MHz提供时钟。
2.使用外部稳定方波,产生一个1Hz的信号。
3.单片机捕捉该信号(外部中断),计算其周期(定时器)
4.将计算结果与理论标准周期进行计算,并写入校准寄存器。

方法
1.使用信号发生器,输出一个1Hz的方波,幅度根据电路而定。
2.单片机使用内部8MHz提供时钟。
3.初始化一个定时器,可以不使用中断,每100us计数一次即可满足要求。
4.初始化一个外部中断,采用上升或下降沿触发,进入一次记录一下定时器里边的计数值。
5.记录2次后,可计算其周期。
6.根据周期计算与标准8MHz的偏差,然后调整HSITRIM寄存器值,此寄存器默认值为16,可加可减,步进为40KHz,在RCC控制器里。


STM32F1调用void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue)


GD32F1调用void rcu_irc8m_adjust_value_set(uint8_t irc8m_adjval)



以下为在GD32F1上的实测结果


可以看到校准前后的对比,虽然不可能非常精确到8MHz,但也好了很多了

eric2013 发表于 2024-4-18 08:53:43

谢谢楼主分享。
页: [1]
查看完整版本: STM32F1/GD32F1内部8MHz晶振校准方法