STM32时钟系统之利用 systick 定时器来实现准确的延时。
本篇文章带着大家来认识一下 STM32 的时钟系统,以及利用 systick 定时器来实现一个比较准确的延时。
我们首先从时钟说起,时钟在MCU中的作用,就好比于人类的心脏一样不可或缺。STM32 的时钟相比 51 的单一时钟要复杂些,它有多个时钟源可以使用,那么大家可能会有所疑惑,STM32 的时钟搞的那么复杂干什么,原因其实在于,STM32的外设资源比起51来说,是很丰富的,那么不同外设使用的时钟也会不一样,同时我们要知道时钟越快,功耗就越大,抗电磁干扰的能力就会减弱,因此,比较复杂的MCU 都会采用多时钟来解决这些问题。
那么,这个时钟系统究竟是什么呢??
这里给大家简单总结了下:STM32 共有 5个时钟源,分别为 HSE、LSE、HSI、LSI、PLL,其中,HSE叫做高速外部时钟,可以接外部 4-16 MHz的时钟源;HSI 是高速内部时钟,它内部有一个RC振荡器,可以提供 8 MHz的时钟;LSE是低速外部时钟,外接32.768KHz时钟,作为RTC时钟;LSI 是低速内部时钟,也是一个内部的RC 振荡器,可以提供 40 KHz的时钟,可用作独立看门狗,或RTC的时钟;最后一个 PLL 是锁相环倍频,它的来源可以是HSI/2、HSE、HSE/2,倍频范围为 2-16 倍,这5个时钟源就简单给大家介绍到这里。
当选择8MHz的外部时钟经PLL倍频,默认上电后 sysclk = APB2 的时钟 为72MHz,APB1时钟为 36MHz。
下面我们再来介绍下一个特殊的定时器, 这个定时器是 systick ,它属于cortex m3 内核,是一个24位倒计数定时器,我们通过使用这个定时器,可得到一个比较准确的延时。
在学习了STM32的时钟系统后,我们知道系统上电默认是 72MHz的主频,然后在延时初始化中设置了 systick的时钟为9MHz,也就是systick VAL寄存器,里面的值每减少一次就需要 1/9 us的时间,然后下面的代码分别计算了微秒、毫秒的系数,接着在us 延时函数中,我们传入多少us 就会延时多少us。
这里要注意的是,LOAD的寄存器是24位的,因此最大传入的数值为1864135,也就是最多延时这么多微秒,大约1864毫秒,当我们需要延时大于这个值时,多次调用即可。
下面我们直接在主循环中调用毫秒延时,延时1秒,编译无误后,下载到实验板上,观察效果。在这里,我们可以用软件仿真 简单检测下这个延时的准确性。
首先,点开魔术棒工具,然后我们需要在目标选项卡下,将晶振大小修改为我们实验板所外接的晶振 8MHz,然后在 debug 选项卡中选择软件仿真,保存后,我们进入软件调试,复位后我们在输出高低电平加两个断点,然后点击全速运行,观察左侧区域的秒数差,我们可以看到这个延时还是很精准的。
视频资料
(时钟系统)
http://www.makeru.com.cn/live/1392_1082.html?s=45051
STM32中断系统
http://www.makeru.com.cn/live/3523_1745.html?s=45051
(stm32 USART串口应用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051
(定时器)
http://www.makeru.com.cn/live/1392_1199.html?s=45051
STM32时钟系统之利用 systick 定时器来实现准确的延时。的更多相关文章
- STM32入门系列-STM32时钟系统,STM32时钟树
时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行.时钟系统犹如人的心脏,一旦有问题整个系统就崩溃.我们知道STM32属于高级单片机,其内部有很多的外设,但不是 ...
- STM32时钟系统的配置寄存器和源码分析
一.时钟系统 概述 时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令,时钟系统就是CPU的脉搏,决定cpu速率. STM32有多个时钟来源的选择,为什么 STM32 要有多个时钟源呢 ...
- 关于STM32时钟系统
初学STM32,感觉最蛋疼的是它的时钟系统,每次看到它的那个时钟树就有点晕,虽然看了很多这方面的资料,甚至也已经写过很多STM32的模块代码,做过一些小项目,但一直还是对这一块模模糊糊,似懂非懂,所以 ...
- STM32时钟系统
一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率 ...
- STM32入门-STM32时钟系统,时钟初始化配置函数
在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数main.那么我们就来看下SystemInit()函数到底做了哪些操作,首先打开我们前面使 ...
- STM32入门系列-STM32时钟系统,时钟使能配置函数
之前的推文中说到,当使用一个外设时,必须先使能它的时钟.怎么通过库函数使能时钟呢?如需了解寄存器配置时钟,可以参考<STM32F10x中文参考手册>"复位和时钟控制(RCC)&q ...
- STM32入门系列-STM32时钟系统,自定义系统时钟
在时钟树的讲解中我们知道,通过修改PLLMUL中的倍系数值(2-16)可以改变系统的时钟频率.在库函数中也有对时钟倍频因子配置的函数,如下: void RCC_PLLConfig(uint32_t R ...
- STM32入门系列-STM32时钟系统,时钟初始化配置函数
在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数main.那么我们就来看下SystemInit()函数到底做了哪些操作,首先打开我们前面使 ...
- STM32 时钟系统
1.在 STM32F4 中,有 5 个最重要的时钟源,为 HSI.HSE.LSI.LSE.PLL.其中 PLL 实际是分为两个时钟源,分别为主 PLL 和专用 PLL. 2. ①.LSI 是低速内 ...
随机推荐
- SpringBoot-初见
目录 简单介绍 什么是SpingBoot? 微服务 单体应用架构 微服务架构 怎么构建微服务 第一个SpringBoot程序 官方网站快速构建 IDEA 代码 自动装配(要点) pom.xml 启动器 ...
- MySQL实战45讲(21--25)-笔记
21 | 为什么我只改一行的语句,锁这么多? 加锁规则里面:包含了两个"原则".两个"优化"和一个"bug". 原则 1:加锁的基本单位是 ...
- 安装docker遇到:package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
执行 yum install docker-ce docker-ce-cli containerd.io 提示: 错误: 问题: package docker-ce-3:19.03.8-3.el7.x ...
- 如何画UML,几种简单的模型分析
如何画UML 前言 UML 类 类的关系 1.依赖关系 2.继承关系 3.实现关系 4.关联关系 5.聚合关系 6.组合关系 总结 参考 如何画UML 前言 最近在学习设计模式,其中不免涉及到 UML ...
- MySql WorkBench通过表生成表关系图
1.mysql workbench 菜单file=>add model(添加模型) 点击上面的add diagram(添加新的图解),就会在右边多出一个新的图解模型 2,mysql workbe ...
- Java基础(六)——集合
一.概述 1.介绍 为什么出现集合? 答:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合类同是容器,有何不同? ...
- centos7安装sonarqube与使用
https://www.cnblogs.com/mascot1/p/11179767.html https://blog.csdn.net/superbfly/article/details/1039 ...
- java 工具类 验证码
第一步: 引入工具类 工具类一: import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import jav ...
- Pycharm软件学生和老师可申请免费专业版激活码
有一种邮箱,叫做教育邮箱,这东西在这个互联网的世界有很大的优惠及特权,在 Jetbrain 这里, 如果你有教育邮箱(没有教育邮箱怎么办?.edu.cn后缀的邮箱)但很多学生.甚至老师都未必有. 你只 ...
- 【MySQL数据库】MySQL5.7安装与配置、可视化工具安装和破解
软件下载 Mysql5.7地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 安装步骤 下载后会得到zip ...