STM32学习笔记(七)—SysTick

文章目录

  • STM32学习笔记(七)---SysTick
    • 一、SysTick简介
    • 二、SysTick功能框图
    • 三、SysTick寄存器
    • 四、SYSTICK使用
      • 1.中断方式使用
      • 2.轮询方式使用
    • 五、参考资料:
    • 五、参考资料:

一、SysTick简介

  1. SysTick属于CM4内核中的一个外设,内嵌在NVIC中,有关寄存器的定义和部分库函数都在core_cm4.h头文件中实现

  2. SysTick(系统滴答定时器)是一个24bit向下递减的计数器,计数器每计数一次的时间为1/SYSCLK

    当重装载初值寄存器的值减到0的时候,系统定时器就产生一次中断,一次循环往复。

  3. 系统定时器一般用于操作系统,用于产生时基,维持操作系统心跳。

二、SysTick功能框图

三、SysTick寄存器

寄存器名称 寄存器描述
CTRL 控制及状态寄存器
LOAD 重装载数值寄存器
VAL 当前数值寄存器
CALIB 校准数值寄存器

SysTick控制和状态寄存器

名称 类型 复位值 描述
16 COUNTFLAG RO 0 当SysTick定时器计数到0时,该位变为1,读取寄存器或清除计数器当前值会被清零
2 CLKSOURCE R/W 0 时钟选择位:0=SYSCLK/8, 1=SYSCLK
1 TICKINT R/W 0 1 = SYSTICK定时器计数减至0时产生异常 0 = 不产生异常
0 ENABLE R/W 0 SYSTICK定时器使能

SysTick重装载值寄存器

名称 类型 复位值 描述
23:0 RELOAD R/W 未定义 定时器计数为0时的重装载值

SysTick当前值寄存器

名称 类型 复位值
23:0 CURRENT R/Wc 0 读出值为SYSTICK定时器的当前值。写入任何值都会清除寄存器,SYSTICK控制和状态寄存器中的COUNTFLAG也会清零

四、SYSTICK使用

1.中断方式使用

可以直接通过库函数SysTick_Config(uint32_t ticks)来配置,该函数位于core_m4.h文件中

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{/* 重装载初值超出范围 */if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); }    /* 设置重装载初值 */SysTick->LOAD  = (uint32_t)(ticks - 1UL);              /* 设置SysTick定时器中断优先级,这里将SysTick的优先级设置位15(0-15),为系统最低 */NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* 设置当前数值寄存器 */SysTick->VAL   = 0UL;/* 设置时钟源的选择:SYSCLK=168M * 使能系统定时器中断* 使能定时器*/SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |SysTick_CTRL_TICKINT_Msk   |SysTick_CTRL_ENABLE_Msk;                         return (0UL);
}
 /* SystemCoreClock / 1000      1ms中断一次* SystemCoreClock / 1000000   1us中断一次*/
Systick_Config(SystemCoreClock / 1000);

注意:这里的tick值最大为2^24 = 16,777,216‬,不能超过此值。因此上面函数不能够配置1s中断(1s中断tick值为:168000000>16777216)。

void SysTick_Handler(void)
{/* 根据自己的实际需求来写 */
}

2.轮询方式使用

若要在轮询模式中使用SysTick定时器,则需要通过上述寄存器来配置。可以利用SysTick控制和状态寄存器的(SysTick->CTRL)中的计数标志来确定定时器何时变为0。

Systick->CTRL = 0;                            //禁止SysTick
SysTick->LOAD = 0xFF;                         //计数范围255-0(256个周期)
SysTick->VAL = 0;                             //清除当前值和计数标记
SysTick->CTRL = 5;                            //使能SysTick定时器并使用处理器时钟
while((SysTick->CRTL & 0x00010000) == 0);     //等待计数标志置位
SysTick->CTRL = 0;                            //禁止SysTick

上面这段代码便实现了延时265个时钟周期的延时功能,具体的延时函数可以参考正点原子的延时函数。


上述两种实现方法都是在裸机条件下的使用方法,在实际应用时可以根据需求做选择。

五、参考资料:

1.《零死角玩转STM32-F407霸天虎》(SysTick)

2.《STM32F4xx标准外设库源码》(core_cm4.h)

五、参考资料:

1.《零死角玩转STM32-F407霸天虎》(SysTick)

2.《STM32F4xx标准外设库源码》(core_cm4.h)

3.《ARM Cortex-M3与Cortex-M4权威指南》(9.5 SysTick定时器)

STM32学习笔记(七)---SysTick相关推荐

  1. STM32学习笔记(七) ADC模数转换测电平(普通和DMA模式)

    嵌入式系统在微控制领域(温度,湿度,压力检测,四轴飞行器)中占据着重要地位,这些功能的实现是由微处理器cpu(如stm32)和传感器以及控制器共同完成的,而连接他们,使它们能够互相正常交流的正是本小节 ...

  2. 滴答定时器的计数模式_【高手私藏】STM32学习笔记:SysTick滴答时钟

    今天我们来说说SysTick定时器.SysTick定时器在从参考手册中根本没有介绍.我费了九牛二虎之力才在一个犄角格拉里找到SysTick定时器的英文版的说明.在Cotex-M3有介绍,为什么要找ST ...

  3. 【K210】K210学习笔记七——使用K210拍摄照片并在MaixHub上进行训练

    [K210]K210学习笔记七--使用K210拍摄照片并在MaixHub上进行训练 前言 K210准备工作 K210如何拍摄照片 准备工作 拍摄相关代码定义 用K210拍摄到的照片在MaixHub平台 ...

  4. 《STM32学习笔记》4——核心功能电路与编程(下)

    接上文,文中的图片,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.蜂鸣器驱动 1.蜂鸣器介绍 2.蜂鸣器电路 3.蜂鸣器程序 二. MIDI 音乐 ...

  5. STM32学习笔记(13)——模数转换ADC

    这个月一直忙于准备考试,已经考完一半科目了,偷闲写了这篇文章.因为还没考完试,估计还得咕一段时间了. STM32学习笔记(13)--模数转换ADC 第一部分:ADC功能框图 一.输入电压 二.输入通道 ...

  6. STM32学习笔记(八)丨ADC模数转换器(ADC单、双通道转换)

    本篇文章包含的内容 一.ADC 模数转换器 1.1 ADC简介 1.2 逐次逼近型ADC工作原理 1.3 STM32中的ADC基本结构 1.4 STM32中ADC的输入通道 1.5 STM32中的AD ...

  7. STM32学习笔记——基于正点原子例程编码器模式小结

    STM32学习笔记--基于正点原子例程编码器模式小结 最近一段时间学习了,STM32f4的编码器功能,经过自己探索和他人的热心帮助,对于编码器模式有了一定了解.STM32f4单片机提供编码器模式,以便 ...

  8. 《STM32学习笔记》2——开发环境的建立

    接上文,文中的图片知识,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.接口定义 1 芯片引脚整体简介 2 各部分引脚介绍 二.开发板简介 三.IS ...

  9. 【STM32学习笔记】#002 GPIO设置练习

    系列文章目录 -[STM32学习笔记]#001 前期准备 文章目录 系列文章目录 前言 一.目标功能 二.CubeMX设置 1 端口设置1(Port Setting) 2 端口设置2(Port Set ...

最新文章

  1. 网络推广费用浅析有关导致百度快照倒退的因素是什么?
  2. 实际程序调用IndexWriter* writer = NULL
  3. 关于进程和线程以及句柄
  4. ubuntu apt-get指令和apt指令的区别?
  5. 在EXCEL中使用SQL语言对工作表进行操作
  6. 3.8Python数据处理篇之Numpy系列(八)---Numpy的梯度函数
  7. 「拖放」Mac 的底层能力,也是效率神技
  8. JAVA实现QQ登录、注册等功能
  9. 训练集和测试集 (Training and Test Sets):拆分数据
  10. 2018/9/18单舵轮AGV项目笔记之二
  11. 4月计算机领域的国际会议,计算机领域国际会议分区表
  12. 什么是服务器的上行带宽和下行带宽
  13. Win10--YOLOX训练和测试VOC格式数据
  14. webpack output.publicPath
  15. 除了支付宝,微信也能查询账单了!再也不担心钱花哪去了!
  16. 孙溟㠭先生书画艺术《贵妃》
  17. Jason Brown的R快速入门方法
  18. 蓝牙设备改参数教程_修改蓝牙设备的名称
  19. 2022网络搭建国赛公开题mail服务器搭建
  20. 一次SSD磁盘寿命耗尽导致的TiDB集群写入变慢问题处理

热门文章

  1. Android支付接入之Google In-app-Billing
  2. Scratch软件编程等级考试二级——20200620
  3. 盘点27个机器学习、深度学习库最频繁使用的 Python 工具包(内含大量示例,建议收藏)
  4. VS2010出现fatal error C1902: 程序数据库管理器不匹配;请检查安装
  5. LeetCode:26
  6. ElementUI表格数据批量选中操作
  7. 萤石网络,难当「孤勇者」
  8. uni-app+uView如何轮播图滑动时改变背景颜色和导航栏颜色
  9. 高等代数:5 矩阵的相抵与相似
  10. AI向实而生,智能技术构筑科技变革主线