【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( ...
最新文章
- pandas使用query函数删除dataframe中某一列数值小于某一特定值的行(remove dataframe rows baed on column value)
- java B2B2C 源码 Springcloud多租户电子商城系统- Stream重新入队(RabbitMQ)
- flask 检测post是否为空_用Flask和Vue制作一个单页应用(五)
- 服务器设置为自动登录,Windows Server 2008 R2怎样设置自动登陆(登录)
- Xcode7常见问题汇总
- 试解析Tomcat运行原理(一)--- socket通讯(转)
- eclipse 代码上传github 笔记
- 搭配购买(信息学奥赛一本通-T1387)
- python 字符串格式化语法_Python:字符串格式化
- Hadoop集群启动时NameNode未启动解决方法
- Bailian2912 三个完全平方数【进制+枚举】
- qt msvc编译中文乱码解决
- 我的联想拯救者y7000p怎么安装双系统Linux ubuntu 18.04呢?
- ABAQUS软件实训(四):Mesh模块之六面体网格划分技巧
- Python开发技术—面向对象程序设计2
- nginx 安装和使用godaddy颁发证书
- 差分隐私(DP)中隐私预算ε的理解
- poj 3975hdu 1850 (nim)
- 大学生一定要理解的15件事
- uni-app隐藏钉钉小程序左侧返回按钮