SysTick定时器

  • 一、参考资料
  • 二、时钟源选择与定时时间计算
    • 1、时钟源选择
    • 2、定时时间计算
  • 三、SysTick_Handler中断服务函数

一、参考资料

嘀嗒定时器:时钟源、寄存器

二、时钟源选择与定时时间计算

结合正点原子的代码进行说明:

1、时钟源选择

从上图可以发现:Cortex系统时钟(嘀嗒定时器)是经过SYSCLK8分频之后得到的;
SYSCLK最高为72MHz,来源为HSI、PLL、HSE;
原子的代码,默认使用的是来自于PLL,且为最高72MHz;

在system_stm32f10x.c中可以看到:三种时钟源的选择方法。


在stm32f10x.h中可以看到:HSE默认大小为8MHz,如果要修改晶振大小需要注意。

2、定时时间计算

以原子默认时钟源配置为例,SYSCLK为72MHz。
众所周知,原子的delay.c的延迟函数使用的为systick定时器,并且在要先调用delay_init函数


可以看到SysTick_CLKSourceConfig函数无非就是配置其CTRL寄存器,来控制使用哪个时钟源,这里我不在贴寄存器的配置了,可以去看上边的参考链接。

原子选择的是PLL,倍频到72MHz,然后再进行8分频(无论选择哪个时钟源都要进行8分频),72MHz/8=9MHz,也就是说systick此时的频率是9MHz;

再继续看,延迟函数:

这个函数如果nus=1,则装入的值为fac_us,也就表示这个函数能延迟1us。为什么呢?
根据systick的工作原理可以知道,当装入寄存器的值一直减少,当变为0的时候,表示延迟结束。
也就说能够延迟的时间为:装载值*减少一个数所需要的时间

装载值可以发现:当nus=1时,fac_us=SystemCoreClock/8000000。SystemCoreClock为72M,则fac_us=9。即装载值为9。
减少一个数所需要的时间:即为systick的频率,也就是9MHz,转换为时间为1/9MHz。
延迟时间:9*1/9MHz=1us (Hz对应s,KHz对应ms,MHz对应us)

为什么要除以8M?就是为了使得当一个fac_us时,装入的数,刚好为1us。
举个例子:假设SYSCLK选择为8MHz,则systick频率为1MHz;fac_us为8M/8M=1,则延迟时间为1*1/1MHz=1us。

延迟原理不在赘述,无非就是do while死循环,一直读取CTRL寄存器,判断标志位是否置为1。

三、SysTick_Handler中断服务函数

systick为定时器,那么其中断服务函数在哪里?在stm32f10x_it.c中

那么再问一句,该中断服务函数是每减少装载值的一个数就触发一次,还是装载值减少到0才会触发呢?

我进行了软件模拟仿真,证明是装载值减少为0才会触发该中断服务函数,也就是说等延迟结束的时候会触发

【STM32学习】SysTick定时器(嘀嗒定时器)相关推荐

  1. STM32入门:Systick(嘀嗒定时器)学习

    Systick(系统嘀嗒定时器)学习 一.Systick 介绍 Systick 是 STM32 的一个系统定时器,又名系统嘀嗒定时器,是一个 24 位的倒计数定时器,当计数到 0 时,将从 RELOA ...

  2. 【STM32】STM32f4学习之路--嘀嗒定时器

    嘀嗒定时器,作为stm32特有的系统定时器,它的出现,旨在为用户在使用OS以及延时的时候提供一个精确的定时. SysTick 是 MDK 定义了的一个结构体(在 core_m4.h 里面),里面包含 ...

  3. 【STM32F103】嘀嗒定时器(Systick)_延时函数

    STM32嘀嗒定时器--延时函数 一 系统Systick定时器 Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值.只要不把它 ...

  4. 调试模式和定时器,看门狗和嘀嗒定时器

    文章目录 一.调试模块 二.定时器模块 三.看门狗 四.系统时基定时器 五.定时器与内核之间的关系 杨桃32学习笔记,本文图片文字皆为转述 参考博客连接 一.调试模块 所谓调试的过程便是,写好程序然后 ...

  5. stm32f407IGT的SYS_TICK嘀嗒定时器(一)

    打开cubeMX看一下默认的嘀嗒定时器 从下图可以看出默认嘀嗒定时器中断是打开的:最高优先级 中断向量表中找到标记的函数地址: 一路追代码之后会找到这个虚函数,我们可以重写这个函数,来实现我们自己的嘀 ...

  6. stm32专题九:SysTick(一)系统嘀嗒定时器原理

    SysTick是存在于stm32内核的定时器,嵌套在NVIC中,24位,只能递减.在stm32中文参考手册中,对于SysTick的描述其实很少,主要如下.systick的时钟可以为AHB时钟,或者是A ...

  7. STM32的系统嘀嗒定时器(SysTick)实现简单计时功能

    SysTick是属于内核里的外设,只要是Cortex M内核的单片机,都拥有这个24位的SysTick定时器. SysTick的counter是一个递减计数器,首先要填入reload自动重装载计数器的 ...

  8. 蓝桥杯嵌入式(STM32G431RBT6)入门第四天——系统嘀嗒定时器(SysTick)|CSDN创作打卡

    和往常一样,先建立SysTick定时器练习文件夹,并在里面建立SysTick_test和SysTick两个子文件夹. STM32的通用定时器是通过一个可编程预分频器(Prescaler)驱动的16位自 ...

  9. STM32系统嘀嗒定时器实现1ms中断事件

    int main() {//系统定时器实现周期性1000hz中断事件,即1msSysTick_Config(SystemCoreClock / 1000);}void SysTick_Handler( ...

最新文章

  1. TensorRT PoolingLayer
  2. 小作文十大必背范文:五星级真题
  3. [EF Core]数据迁移(二)
  4. 应运而生的web页面响应布局
  5. linux neo4j 服务器,如何在linux服务器上配置Neo4j · Digital World
  6. 查询数据库游标使用情况以及sql
  7. CodeForces - 1417E XOR Inverse(字典树求逆序对+分治)
  8. 爬虫之request
  9. CSDN Markdown帮助文档
  10. 【优化选址】基于matlab禁忌搜索算法求解基站选址优化问题【含Matlab源码 440期】
  11. 【手持式微波频谱分析仪】真正便携且功能强大的仪器 - 欧洲制造
  12. 研发管理能力提升概述
  13. 【jQuery】jQuery本地时间与世界时间时差转换
  14. vue3使用datav
  15. 数模分析第五天---判别分析
  16. xp系统设置ntp服务器,xp设置ntp服务器地址
  17. Python字符串驻留机制
  18. Matlab相机标定工具箱和标定结果评价
  19. 12月3日DAMA-CDGA/CDGP数据治理认证考试报名
  20. EI检索期刊JA检索与CA检索有什么区别?

热门文章

  1. xv6源码分析(四):内存管理
  2. 【BATCH_SIZE大小设置影响测试结果】
  3. (转)Android软键盘弹出,界面整体上移
  4. 黑马程序员课程-Vue项目实战-Element-UI——电商后台管理系统主页制作
  5. 编译原理习题(含答案)——2程序设计语言及其文法——哈工大陈鄞配套版本
  6. 大数据微专业_1.Python基础_1.8_商铺数据存取
  7. jq 循环获取某class所有的attr里面的值
  8. Swagger UI使用介绍
  9. 记忆口诀:OSI七层网络模型
  10. C# int int16 Int32 Int64的介绍