【STM32】STM32f4学习之路--嘀嗒定时器
嘀嗒定时器,作为stm32特有的系统定时器,它的出现,旨在为用户在使用OS以及延时的时候提供一个精确的定时。
SysTick 是 MDK 定义了的一个结构体(在 core_m4.h 里面),里面包含 CTRL、LOAD、VAL、CALIB 等 4 个寄存器;
CTRL寄存器:顾名思义就是SYSTick的控制寄存器。它的几个常用位如下图,其中CLKSOURCE位为1的时候,嘀嗒计时器将选择系统时钟8分频后的时钟(即168/8=21),我们一般采用这个。
LOAD:重装载的值(0-23位)
VAl:返回当前倒计数的值(0-23)
根据以上,我们可以编写一小段程序作为延时程序:
//nus应小于2^24/21=798915
void _Delay_us(u32 nus)
{SysTick->CTRL&=~(1<<2);//选择时钟源为21MHzSysTick->CTRL&=~(1<<1);//SYsTick数到0时无动作SysTick->LOAD=21*nus;//装载的值,此值每减1,需要1/21us,故用21*nusSysTick->CTRL|=(1<<0);//使能SySTickwhile(!(SysTick->CTRL&(1<<16)));//等待倒计数数到0}
void _Delay_ms(u32 nms)
{SysTick->CTRL&=~(1<<2);//选择时钟源为21MHzSysTick->CTRL&=~(1<<1);//SYsTick数到0时无动作SysTick->LOAD=21000*nms;//装载的值,此值每减1,需要1/21us,故用21*nusSysTick->CTRL|=(1<<0);//使能SySTickwhile(!(SysTick->CTRL&(1<<16)));//等待倒计数数到0}
Systick 的时钟来自系统时钟 8 分频, 正因为如此,系统时钟如果不是 8 的倍数(不能被 8 整除),则会导致延时函数不准确,所以STM32的外部晶振一般采用8MHz的。
【STM32】STM32f4学习之路--嘀嗒定时器相关推荐
- STM32入门:Systick(嘀嗒定时器)学习
Systick(系统嘀嗒定时器)学习 一.Systick 介绍 Systick 是 STM32 的一个系统定时器,又名系统嘀嗒定时器,是一个 24 位的倒计数定时器,当计数到 0 时,将从 RELOA ...
- 【STM32学习】SysTick定时器(嘀嗒定时器)
SysTick定时器 一.参考资料 二.时钟源选择与定时时间计算 1.时钟源选择 2.定时时间计算 三.SysTick_Handler中断服务函数 一.参考资料 嘀嗒定时器:时钟源.寄存器 二.时钟源 ...
- 调试模式和定时器,看门狗和嘀嗒定时器
文章目录 一.调试模块 二.定时器模块 三.看门狗 四.系统时基定时器 五.定时器与内核之间的关系 杨桃32学习笔记,本文图片文字皆为转述 参考博客连接 一.调试模块 所谓调试的过程便是,写好程序然后 ...
- 【STM32F103】嘀嗒定时器(Systick)_延时函数
STM32嘀嗒定时器--延时函数 一 系统Systick定时器 Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值.只要不把它 ...
- stm32f407IGT的SYS_TICK嘀嗒定时器(一)
打开cubeMX看一下默认的嘀嗒定时器 从下图可以看出默认嘀嗒定时器中断是打开的:最高优先级 中断向量表中找到标记的函数地址: 一路追代码之后会找到这个虚函数,我们可以重写这个函数,来实现我们自己的嘀 ...
- stm32专题九:SysTick(一)系统嘀嗒定时器原理
SysTick是存在于stm32内核的定时器,嵌套在NVIC中,24位,只能递减.在stm32中文参考手册中,对于SysTick的描述其实很少,主要如下.systick的时钟可以为AHB时钟,或者是A ...
- 【STM32】STM32f4学习之路--时钟
文章目录 初学STM32,发现他的时钟系统有点复杂(相对于之前学的51单片机来说).这是为什么? –51单片机的I/O口少,外设简单,所以时钟一般来说都是固定的,这也导致了51单片机应用场景的局限性. ...
- STM32的系统嘀嗒定时器(SysTick)实现简单计时功能
SysTick是属于内核里的外设,只要是Cortex M内核的单片机,都拥有这个24位的SysTick定时器. SysTick的counter是一个递减计数器,首先要填入reload自动重装载计数器的 ...
- STM32系统嘀嗒定时器实现1ms中断事件
int main() {//系统定时器实现周期性1000hz中断事件,即1msSysTick_Config(SystemCoreClock / 1000);}void SysTick_Handler( ...
最新文章
- unity3d小小白之导入素材、添加天空盒
- HNCU1101:马的移动---BFS
- ACP-PMP备考交流
- C++输入、输出优化模板整理
- ARM(IMX6U)裸机官方SDK包使用
- Nacos 计划发布v0.2版本,进一步融合Dubbo和SpringCloud生态
- Visual Studio 2010旗舰版正式版序列号 - civilman的专栏 - 博客频道 - CSDN.NET
- MySQL内连接和外连接
- Java面向对象的思想
- 截图转文字怎么操作?截图转文字的软件有哪些?
- 2022最新简历模板
- 结合个人规划对物联网(IOT)的一点思考
- 影响ERP软件价格的要素有哪些?
- 用Python分析豆瓣,评分最低的演员原来是他
- linux下的oracle安装
- java的jdk安装教程附百度网盘链接环境配置遇到的各种问题版本选择
- html汉字间的间距,div字间距-div内文字之间间距设置方法
- OA办公系统选购,千万别犯这些错
- 计算机毕业设计——基于HTML电商购物商城项目设计与实现-快购优品 带论文6500字 答辩ppt
- 兜兜的乐扣刷题算法小记(不停更)
热门文章
- 如何理解c和c ++的复杂类型声明 (转)
- 【Java】Servlet 工作原理解析
- 《windows核心编程》 17章 内存映射文件
- CEikEdWin 类的使用
- Android 7.0 init.rc的一点改变
- 程序员生存定律--管理向左,技术向右
- java连接rabbitmq_没用过消息队列?一文带你体验RabbitMQ收发消息
- 企业网站制作要以简约为主
- ORA-03001,GATHER_TABLE_STATS数据库自动收集统计信息报错
- Java TCP/UDP socket 编程流程总结