硬汉嵌入式论坛

 找回密码
 立即注册
查看: 195|回复: 1
收起左侧

[客户分享] STM32F1/GD32F1内部8MHz晶振校准方法

[复制链接]

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2024-4-17 15:15:00 | 显示全部楼层 |阅读模式
本帖最后由 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控制器里。
1.png

STM32F1调用void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue)
2.png

GD32F1调用void rcu_irc8m_adjust_value_set(uint8_t irc8m_adjval)
3.png


以下为在GD32F1上的实测结果
4.png

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

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
发表于 2024-4-18 08:53:43 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 18:09 , Processed in 0.187351 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表