首页 > 其他分享 >STM32F1时钟比设置值慢了10倍

STM32F1时钟比设置值慢了10倍

时间:2023-04-01 11:12:57浏览次数:51  
标签:10 电容 外部 值慢 延时 C2 C1 STM32F1 时钟

解决问题

正在开发一个双脉冲发生器,主控MCU用到了STM32F103RBT6,写入程序后发现原本设置的1000ms的延时不起作用,没有任何响应,起初还以为式程序卡死了,在代码上检查了一会儿,并没有发现明显的错误,抱着试试的想法把1000ms的延时改成了100ms,发现有相应的现象了,但是LED闪烁的频率明显是对应着1000ms延时。

浏览器查找相关资料,看到正点原子的论坛里也有人遇到同类的问题,这下就放心了哈哈,不是我第一个遇到就好,论坛中给出的解释是外部时钟没有正常启用,导致MCU使用内部时钟。仔细分析就是:外部时钟是8MHz,经过9倍频后给到处理器,也就是72MHz,这也是我所需要的时钟频率,但是外部时钟源有问题,所以处理器只好使用内部的8MHz时钟,也就是慢了9倍,给人一种慢了“10倍”的感觉。并且之前出现的延时不起作用一事也有了合理的解释,那就是延时1000ms实际上是延时了9s,在短时间内没有响应,让人误以为程序没有运行。

至此,基本可以断定是硬件BUG,即外部时钟电路有问题。翻开原理图看一眼就发现了问题,电容用的是100nF,电阻是1kΩ,难怪外部时钟不太行,将电容替换为22pF,电阻替换为1MΩ,上电一看,解决!

外部时钟电路

外部时钟电路

为什么要使用外部时钟

一般STM32的时钟源有两种主时钟方案,一个是依靠内部RC振荡器的HSI(内部高速时钟),另一个是HSE(外部高速时钟)。内部高速时钟源HSI,英文全称:HIGH-SPEED INTERNAL OSCILLATOR。一般情况下,内部HSI都会在ST出厂时已校准,但是精度不高,在0到70℃下误差范围可能达到-1.3%到2%,即便是在标准的25℃下,也有 -1.1%到1.8% 的误差(如下图)

因此,对于高波特率的异步串口通讯,或者需要高精度定时的场合,用HSI就有隐患,甚至根本达不到设计要求。因此要使用外部高速时钟源(HSE),英文全称:HIGH-SPEED EXTERNAL OSCILLATOR。

为了获取更高的时钟精度,我们就要用到由石英晶振提供的HSE作为主时钟源,这样就可以很容易达到±30ppm(工作温度区间:-40 °C to +85 °C)。

在构成时钟电路时,需要把外接电容(C1、C2)与无源贴片晶振8MHz的负载电容CL进行匹配:

一般取C1 = C2,这两个电容和晶体Q构成三点式电容振荡器。以选择8MHz晶振负载电容CL=20PF为例:

PCB杂散电容CS一般可以估值4pF到6pF,

由于我们取了C1 = C2,公式就可以变为:C1 = C2 = 2 * (CL – Cs)

代入公式:

若Cs =6Pf,则C1=28PF;

若Cs =4Pf,则C1=32PF

因此,为了保险起见,理论上我们一般外接电容(C1=C2)取值在 27PF ~33PF之间。

最后需要指出的是,因PCB设计及复杂性差异,杂散电容CS也会存在差异,所以调整外接电容值的大小应该以晶振实际输出频率为准。

外部晶振起振

至于晶振如何起振,找到一篇文章,暂时还没有时间看……
面包板社区:晶振是如何起振的

标签:10,电容,外部,值慢,延时,C2,C1,STM32F1,时钟
From: https://www.cnblogs.com/fuchenblog/p/17278255.html

相关文章

  • PAT Basic 1058. 选择题
    PATBasic1058.选择题1.题目描述:批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。2.输入格式:输入在第一行给出两个正整数N(≤ 1000)和M(≤ 100),分别是学生人数和多选题的个数。随后M行,每行顺次给出一道题的满分值(不超过5的......
  • x210-2023-04-01
    1、由于之前提到过使用的USB转网口虽然能用,但是在笔记本上会显示红叉,所以不能保证这个会不会给调试带来更多的不确定性,而且刚开始移植用的kernel是kernel.org的,所以在未开启以及添加对应的网络驱动之前,想要直接使用NFS去挂载根文件系统是不大现实的,所以只能选择ramdisk方式(因为ram......
  • x210-2023-03-31
    1、在参考网上的一些开启NFS文章时,发现有一个问题,就是他们在---NetworkFileSystems底下都有一个[]RootFilesystemonNFS,但是自己配置这里却没有,而且刚开始的时候也是弄不出来,然后去网上查了个遍,有说直接修改xxx_defconfig文件添加CONFIG_NFS_FS=y、CONFIG_IP_PNP=y的,可是加......
  • 100道python基础题——(24)
    题:Python有许多内置函数,如果您不知道如何使用它,您可以在线阅读文档或查找一些书籍。但是Python为每个内置函数都有一个内置的文档函数。请编写一个程序来打印一些Python内置函数文档,例如abs(),int(),raw_input()并为您自己的功能添加文档提示:内置文档方法是__doc__ print(a......
  • 【小白晋级大师】如何设计一个支持10万人用的ChatGPT对接系统
    不停地书写,方能不失在人海茫茫。1.前言之前给大家写了ChatGPT对接企业微信的教程,具体可看知乎链接:【奶奶看了都会】ChatGPT3.5接入企业微信,可连续对话文章结尾说了教程只能适用于小规模使用,网上能找到的其他ChatGPT对接钉钉、飞书、自定义网页等等教程,原理都是一样的,写个中......
  • ATHK1001 分析思考
    ATHK1001ANALYTICTHINKING:ASSIGNMENT1,2023Duedate:11:59pmFriday,March31st(Week6).Latepenaltyof5%percalendardayapplies.Onlinesubmission:AllsubmissionsaretobemadeonlineontheATHK1001Canvaswebsite.Submissionswillbechecked......
  • 漏洞丨CVE20102883
    作者丨黑蛋一、漏洞描述此漏洞编号CVE-2010-2883,看着是一个很简单的栈溢出漏洞,但是也要看怎么玩了。这个漏洞是AdobeAcrobatReader软件中CoolType.dll在解析字体文件SING表中的uniqueName字段的调用了strcat函数,但是对参数没有做出判断,没有检查uniqueName字段长度,导致了栈溢出......
  • Codeforces Gym 103931F - Forest of Magic(时间轴分块+线段树合并)
    一个巨烦的时间轴分块做法,有点类似于P2137Gty的妹子树先考虑静态的情况。看上去就一脸线段树合并对吧?一次修改的操作对一个点\(x\)贡献可以写成\(k·dep_x+b\)的形式,开两棵线段树合并维护一次项和零次项系数即可。由于静态问题可做,因此考虑时间轴分块。设阈值\(B\),每\(B......
  • windows使用/服务(10)Win11预览版退回正式版方法介绍
    闲的没事把系统win11:21H2正式稳定版本升级到22H2内部测试版,不太习惯而且还是个滚动发行版不稳定,回退到之前版本Win11将预览版返回到正式版的方法1.右击“计算机”选择“属性”,选择“winodws更新”选择“高级选项”。2.然后点击“恢复”,再点击“高级启动”下的“重启”。3.......
  • LeetCode 100 相同的树
    LeetCode|100.相同的树给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入:p=[1,2,3],q=[1,2,3]输出:true示例2:输入:p=[1,2],q=[1,null,2]输出:false示例3:输入:p......