[STM32F1]STM32F103滴答定时器定时不准?)
STM32F103滴答定时器定时不准?
前几天调了1块F103ZET6的开发板,用了个系统定时器,感觉不准,最终找到原因是因为选错了时钟源。
今天来分享一下也算是给大家以后出现问题做个参考吧。
说到时钟源,得说到STM32系统时钟的初始化。
前面就不说了,直接从复位中断说起。 复位所有的中断之后,导入Main函数
然后,进入SystemInit函数,进行时钟配置。在SystemInit函数中有一个 SetSysClock()函数
配置系统时钟为72M,这是在外部晶振为8M的情况下。
配置完系统时钟之后,然后运行Main函数,这就是STM32程序的启动过程。
系统定时器是是Core_cm3和Core_cm4内核均存在的定时器
F103c8t6,共有7个定时器,一个高级定时器TIM1,3个通用定时器TIm2、TIM3和TIM4、1个系统定
时器和2个看门狗定时器(独立的和窗口型)。
系统定时器(滴答定时器)是一个24位自减型计数器,也就是说他的最大计数次数为
111111111111111111111111,换算成十六进制为0XFFFFFF,十进制为16777215。
系统定时器的时钟来源可以通过 SysTick_CLKSourceConfig()来选择。
如果选择 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK)则为0,选择内部时钟72M。
若选择SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8),则系统时钟72M的8分频,
网上很多说把SysTick_CLKSource_HCLK_Div8叫做外部分始时钟,不知道是啥原因?
系统定时器时钟频率为9M
1 = 外部时钟源(STCLK) (AHB总线时钟的1/8(HCLK/8)
0 = 内核时钟(FCLK) (AHB总线时钟的频率(HCLK))
也就是这里我用错了时钟源导致系统定时器不准!!
这是原因1,还有一个原因在下面解释。
要是用滴答定时器中断,要配置滴答定时器的中断优先级,否则为默认的最低优先级。
滴答定时器发生中断后,不需要人为去清除中断标志位和重新加载预装值,系统会自动清除和装载,比较简单
滴答定时器配置
我们采用系统时钟的八分频,也就是系统时钟为9M,每秒钟计数为9M
设置计数值为9M,也就是说1秒钟进一次系统定时器中断函数,用变量i自加来表示。
但是这样的配置我们发现i的自加并没有按照1s加一次的理论进行,而且加的很快。
但后来把计数值放在系统分频的前面,也就是如下图所示,计数正常。
这个原因没找到,但是结果正确,哪位大佬帮忙解释一下,代码已上传。
还有个提示,就是用了滴答定时器做定时器中断之后,就不要再用于延时函数了
否则就冲突程序跑飞了,比如这样
还需要知道一点的是:
时钟配置为72MHz,第一行代码已经选择为滴答定时器系统时钟的8分频,也就是滴答定时器时钟为9MHz,
下面的“fac_us”需要得到的是时钟周期,即1us(1个fac_us)需要9个时钟周期,1个fac_ms需要9000个时钟周期。
以上就是对系统定时器计数不准的解释。
---------------------
作者:woai32lala
链接:https://bbs.21ic.com/icview-3252426-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
[STM32F1]STM32F103滴答定时器定时不准?)相关推荐
- [学习笔记]STM32F1 SYSTICK 滴答定时器(寄存器、标准库、HAL库)
目录 0. 博主理解: 1. 实验内容及步骤: 2. 硬件说明 3. 寄存器说明 3.1 SysTick的时钟和使能: 3.2 SysTick重装载数值寄存器: 3.3 SysTick的中断优先级: ...
- stm32f103——滴答定时器
滴答定时器: 定时器的本质就是计数器.我们设置一个定值,然后计数器开始计数,从我们给的定值开始往下一直数,当数到0时,就做相应的动作(也可以不做什么,当把它用作延时计时的时候). 滴答定时器systi ...
- 【STM32】HAL库-系统滴答定时器SysTick
SysTick定时器被捆绑在NVIC中,是一个简单的定时器,对于CM3.CM4内核芯片,都有Systick定时器.Systick定时器常用来做延时,或者实时系统的心跳时钟.这样可以节省MCU资源,不用 ...
- 突击蓝桥杯嵌入式(四)——滴答定时器、按键的三行代码消抖、LCD与ADC
突击蓝桥杯嵌入式(四)--滴答定时器.按键的三行代码消抖.LCD与ADC 1.滴答定时器定时运行 我们利用滴答定时器,让LED每隔1s闪烁一次 //首先我们定义一个变量 __IO uint32_t u ...
- STM32系统滴答定时器(systick)应用
一:系统滴答定时器(systick) 1.systick介绍 Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断).滴答中断?这里来 ...
- stm32系统滴答定时器使用
STM32菜鸟成长记录---系统滴答定时器(systick)应用 标签: delay任务测试reference编译器工作 2012-08-19 22:55 47395人阅读 评论(4) 收藏 举 ...
- stm32滴答计时器_stm32中的系统滴答定时器使用
系统滴答定时器对于stm32的初学者来说还是非常重要的,因为随着你学习的深入编程过程中肯定会调用延时函数,比如我之前的一些gpio相关的实验中.那么延时函数的编写也是几种方法的,一般开始接触都是让系统 ...
- Systick滴答定时器寄存器、delay()延时函数、SysTick_Config函数
SysTick定时器 SysTick定时器,是一个简单的定时器,对于CM3.CM4内核的芯片都有SysTick定时器.SysTick 是一个 24 位的倒计数定时器,当计数到 0 时,将从RELOAD ...
- STM32——系统滴答定时器
STM32--系统滴答定时器 宗旨:技术的学习是有限的,分享的精神是无限的. 一.SysTick[内核中] [风格:先描述一下库对寄存器的封装,再举例实现某些功能] SysTick定时器被捆绑在NVI ...
最新文章
- VirtualBox的四种网络连接方式
- 《JavaScript高级程序设计》阅读笔记(二):ECMAScript中的原始类型
- 给定 2 个正整数 a, b,a 和 b 最多可能有 40 位,求出 a + b 的和(C语言实现)
- 对软件测试工程师面试题目的回答[转]
- RabbitMQ(二):mandatory标志的作用
- 删除fedora多余内核:解决每次升级后旧内核还会存在的问题
- go protobuf tcp 粘包处理 demo
- ***解决UEditor编辑器无法插入第三方视频地址
- css3怎么设置logo,纯CSS3实现的LOGO标志 ABN AMRO CSS3 logo
- Android进程间通信
- PAT_B_1012 数字分类 (有待改进)
- 计算机编码详解_什么是计算机编码?计算机编码的起源与操作系统是如何解码的。
- 复试口语常见话题整理以及华师18 19年topic
- C4D Octane渲染器 学习笔记(二)
- 2021 年 8 月程序员工资出炉啦!北京以18904元位居榜首
- AdMob(app内嵌广告)使用入门
- 《程序员拒绝一个合理需求的15个方法!》
- android hud软件,手机HUD靠谱软件选哪些?_手机_手机生活应用-中关村在线
- H5移动应用的发布优化(四)图片优化
- 自学Python第二十二天- Django框架(一)创建项目、APP、快速上手、请求和响应流程、模板、数据库操作