【STM32】HAL库-系统滴答定时器SysTick

这篇具有很好参考价值的文章主要介绍了【STM32】HAL库-系统滴答定时器SysTick。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SysTick定时器被捆绑在NVIC中,是一个简单的定时器,对于CM3、CM4内核芯片,都有Systick定时器。Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。

Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。

系统滴答定时器有4个寄存器

CTRL SysTick控制及状态寄存器(地址:0xE000_E010)
LOAD SysTick重装载数值寄存器(地址:0xE000_E014)
VAL SysTick当前数值寄存器(地址:0xE000_E018)
CALIB SysTick校准数值寄存器(地址:0xE000_E01C)

时钟源

该定时器的时钟源可以是

  • 内部时钟(FCLK,CM3上的自由运行时钟)
  • 外部时钟( CM3处理器上的STCLK信号)

通过SysTick控制及状态寄存器的第2位来确定
【STM32】HAL库-系统滴答定时器SysTick
STM32的时钟树
【STM32】HAL库-系统滴答定时器SysTick
RCC通过AHB时钟(HCLK)8分频或者不分频作为Cortex系统定时器(SysTick)的外部时钟。CLKSOURCE = 0
FCLK是Cortex™-M3的自由运行时钟。详情见ARM的Cortex™-M3技术参考手册。CLKSOURCE = 1
由下图代码可知,库函数默认选择FCLK时钟作为SysTick的时钟源

/* SysTick end of count event each 1ms */
RCC_GetClocksFreq(&RCC_Clocks);
SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000); //Systick定时周期为1ms

【STM32】HAL库-系统滴答定时器SysTick

SysTick控制及状态寄存器

【STM32】HAL库-系统滴答定时器SysTick

SysTick重装载数值寄存器

24位的倒计数器
【STM32】HAL库-系统滴答定时器SysTick

SysTick当前数值寄存器

【STM32】HAL库-系统滴答定时器SysTick

SysTick校准数值寄存器

【STM32】HAL库-系统滴答定时器SysTick

系统滴答定时器中断优先级设置

通过系统异常优先级寄存器来设置系统滴答定时器的优先级
在设置优先级之前得确定优先级分组,几位是抢占式优先级,几位是子优先级。
【STM32】HAL库-系统滴答定时器SysTick
系统异常优先级寄存器在C文件中的代码
core_cm3.h
【STM32】HAL库-系统滴答定时器SysTick

直接操作寄存器配置系统滴答定时器demo

采用STM32F103C8T6单片机,KeilMDK5.32版本

时钟配置如下图
【STM32】HAL库-系统滴答定时器SysTick
选用外部时钟源(STCLK)即Cortex System timer 频率为9MHz作为系统滴答定时器的时钟源

系统滴答定时器定时时间为1ms,也就是1KHz,根据时钟源频率 9MHz/1KHz = 9000;
即系统滴答定时器重载值为9000-1=8999。

SysTick->LOAD  = 8999;	/* 设置重载值 */
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);	/* 设置中断优先级 15(最低优先级) */
SysTick->VAL   = 0UL;	/* 当前计数值 */
SysTick->CTRL  |= 0 << 2;	/* 选择外部时钟源 */
SCB->SHP[11] = 0xF0;	/* 设置抢占式优先级为15 */
SysTick->CTRL  |= 1 << 1;	/* SysTick倒数计数到0时产生SysTick异常(中断)请求 */
SysTick->CTRL  |= 1 << 0;	/* 使能SysTick */

HAL库配置系统滴答定时器demo

采用STM32F103C8T6单片机,KeilMDK5.32版本

HAL库默认采用FCLK作为系统滴答定时器的时钟源72MHz
定时的时间为1ms,也就是1KHz,重载值为72000-1=71999
优先级为15
PC13控制LED灯,LED的亮灭指示程序运行状态

STM32CubeMX配置
【STM32】HAL库-系统滴答定时器SysTick
【STM32】HAL库-系统滴答定时器SysTick

【STM32】HAL库-系统滴答定时器SysTick

主要代码
【STM32】HAL库-系统滴答定时器SysTick
先看序号1
函数HAL_Init()调用HAL_InitTick()来配置系统滴答定时器,

HAL_Init()
【STM32】HAL库-系统滴答定时器SysTick
HAL_InitTick()调用HAL_SYSTICK_Config()配置系统滴答定时器,和设置系统滴答定时器的优先级(优先级为15)。

HAL_InitTick()
【STM32】HAL库-系统滴答定时器SysTick
HAL_SYSTICK_Config()调用SysTick_Config()来进行配送系统滴答定时器

SysTick_Config()
【STM32】HAL库-系统滴答定时器SysTick
SysTick_Config()根据参数ticks来设置重载值,清除当前计数值,选择FCLK(72MHz)作为时钟源,设置中断优先级为15,并使能系统滴答定时器。

注意:此时FCLK还不是72MHz,因为STM32的时钟树相关的寄存器还未被设置。

序号2
SystemClock_Config()调用了HAL_RCC_ClockConfig()
HAL_RCC_ClockConfig()配置STM32的时钟树,将FCLK的频率设置为72MHz,再次调用HAL_InitTick()配置系统滴答定时器

此时才是真正的配置好了系统滴答定时器

HAL_RCC_ClockConfig()
【STM32】HAL库-系统滴答定时器SysTick
工程文件下载链接文章来源地址https://www.toymoban.com/news/detail-400212.html

到了这里,关于【STM32】HAL库-系统滴答定时器SysTick的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F407 滴答定时器

    介绍STM32F407滴答定时器配置方法、使用方式,封装延时函数得到精确的时间。 STM32F407参考手册中第10章介绍了滴答定时器的校准值。 M4权威指南介绍滴答定时器的章节,M3权威指南中与M4权威指南中的介绍一样。 在sys.c文件中增加滴答定时器的代码 在delay.c文件增加以下代码

    2024年02月11日
    浏览(21)
  • STM32 F103C8T6学习笔记4:时钟树、滴答计时器、定时器定时中断

    今日理解一下STM32F103 C8T6的时钟与时钟系统、滴答计时器、定时器计时中断的配置,文章提供原理,代码,测试工程下载。 目录 时钟树与时钟系统: 滴答计时器: 定时器计时中断: 测试结果: 测试工程下载: 该系统介绍在 STM32F10x-中文参考手册 P56页开始 微控制器的时钟系

    2024年02月13日
    浏览(18)
  • 基于STM32的定时器--定时中断(HAL库)

    本文旨在介绍如何使用STM32CubeMX配置+KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。 定时器是STM32微控制器中非常重要的功能模块之一,用于计时、生成精确的时间延迟、触发事件等。STM32微控制器通常具有多个定时器模块,包括通用定时

    2024年02月14日
    浏览(24)
  • STM32 HAL库-定时器中断

    关闭或开启所有中断;代码如下: STM32F407 有众多的定时器,其中包括 2 个基本定时器(TIM6 和 TIM7)、10 个通用定时 器(TIM2 ~ TIM5、TIM9 ~TIM14)、2 个高级控制定时器(TIM1 和 TIM8),这些定时器彼此完 全独立,不共享任何资源。 选择定时器,配置时钟源,设置预分频系数,计

    2024年01月25日
    浏览(35)
  • stm32——hal库学习笔记(定时器)

    使用纯软件(CPU死等)的方式实现定时(延时)功能 使用精准的时基,通过硬件的方式,实现定时功能 递增计数模式实例说明 中心对齐模式实例说明 TIM6 和TIM7 控制寄存器 1(TIMx_CR1) TIM6 和TIM7 DMA/中断使能寄存器(TIMx_DIER) TIM6 和TIM7 状态寄存器(TIMx_SR) TIM6 和TIM7 计数器(TIMx_CNT)

    2024年02月21日
    浏览(29)
  • # HAL库STM32常用外设教程(四)—— 定时器 基本定时

    1、STM32F407ZGT6 2、STM32CubeMx软件 3、keil5 内容简述: 通篇文章将涉及以下内容,如有错误,欢迎指出 : 1、基础定时器特性 2、基础定时器的结构和功能 3、基础定时器HAL库驱动程序 (1)CubeMx配置 (2)TIM驱动程序   STM32F407有2个高级控制定时器(TIM1、TIM8)、8个通用定时器和

    2024年02月02日
    浏览(38)
  • STM32 HAL库 STM32CubeMX -- TIM(定时器中断)

    STM32F1 系列中,除了一些特殊的型号,大部分F1有8 个定时器,分为 基本定时器,通用定时器和高级定时器 。 基本定时器TIM6 和TIM7 是一个16 位的只能向上计数的定时器,只能定时,没有外部IO。 通用定时器TIM2/3/4/5 是一个16 位的可以向上/下计数的定时器,可以定时,可以输出

    2024年02月16日
    浏览(38)
  • STM32 HAL库开发——入门篇(2):定时器

    一、TIMER定时器概述 1.1 软件定时原理 1.2 定时器定时原理 1.3 STM32定时器分类 1.4 STM32定时器特性表 1.5 STM32基本、通用、高级定时器功能整体的区别 二、基本定时器 2.1 基本定时器简介 2.3 STM32定时器计数模式及溢出条件 2.4 定时器中断实验相关寄存器 2.5 定时器溢出时间计算方

    2024年02月10日
    浏览(72)
  • STM32 hal库编程定时器计数清零

    1、stm32定时器是有重装载功能的,所以定时器中断不关的话,就不需要计数清零 2、主要是应对单次计时使用,可能因为没有清零导致程序再次运行到相同位置时,中断立即出发,没有完成计时的功能。 顺便加一个读取定时器计数值得函数

    2024年02月03日
    浏览(32)
  • STM32 HAL库 STM32CubeMX -- TIM(定时器输入捕获)

    输入捕获可以对 输入的信号的上升沿、下降沿或者双边沿进行捕获 ,常用的有 测量输入信号的脉宽 和 测量PWM 输入信号的频率 和 占空比 这两种。 输入捕获的原理 就是,当捕获到信号的跳变沿的时候,把计数器CNT 的值锁存到捕获寄存器CCR 中,把前后两次捕获到的CCR 寄存

    2023年04月14日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包