如何开关Systick定时器的中断使能?

这篇具有很好参考价值的文章主要介绍了如何开关Systick定时器的中断使能?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

hal库关闭systick中断,单片机,stm32,嵌入式硬件

我们知道,STM32芯片里的ARM处理器都集成了1个24位向下计数的具备自动重装功能的SYSTICK定时器,功能比较单纯,就是计数定时。它常用来作为OS的滴答时钟,或者作为基本的计数时基。比方在各个RTOS系统里往往把SYSTICK作为滴答时钟,对于OS来讲,用它做时基可以提高代码移植方面的便利性,反正只要使用Arm核的芯片都有这个SYSTICK定时器。再比方,ST公司的HAL库一般默认将SYSTICK作为一个基本的延时功能定时器,那个库函数HAL_Delay()就是用SYSTICK实现计数延时,一般默认设置为每毫秒中断1次。

因为SYSTICK定时器属于核外设,所以在STM32芯片的参考手册里并没有很仔细的介绍,关于它的介绍需要查看ARM公司提供的相关内核的技术手册。

其大致工作架构如下:

hal库关闭systick中断,单片机,stm32,嵌入式硬件

每次计数器发生从1记到0时进行计数器的重装并开启下轮计数,此时COUNTFLAG标志被置位并可以触发中断。SYSTICK定时器涉及到4个主要的寄存器,分别是SYSTICK控制寄存器、重装值寄存器、计数器值寄存器、校准值寄存器。这里重点看看前3个。

hal库关闭systick中断,单片机,stm32,嵌入式硬件

其中,计数器值寄存器自然是体现任一时刻计数器的值,对它的写操作都会让其计数器值清零,同时使得COUNTFLAG【控制寄存器的一位】被清零。重装值寄存器盛放计数器每次向下记到0时要重装的起始值,结合时钟一起决定计数周期长短。

对SYSTICK定时器的计数器进行启、停操作,SYSTICK定时中断的使能、关闭操作以及对SYSTICK时钟源的选择就由SYSTICK控制寄存器掌控,其中起作用的就是4个位,参考下图:

hal库关闭systick中断,单片机,stm32,嵌入式硬件

BIT0【ENABLE】掌控SYSTICK计数器的启动、停止,类似于STM32外设定时器控制寄存器里的CEN位。

BIT1【TICKINT】掌控SYSTICK中断请求的使能、禁用,类似于STM32各个外设事件的中断请求使能控制位。

BIT3【ClockSource】掌控SYSTICK时钟源的选择。

BIT4【COUNTFLAG】是状态标志位,当计数器从1记到0时该位被置1,可以读清零。

我们在STM32应用中,尤其基于CubeMx配置生成基于HAL库的工程时,SYSTICK定时器默认打开,并开启1ms的周期性中断。有时,如果我希望关闭或临时关闭SYSTICK的中断请求,即不希望它产生中断请求,如何操作呢?

既然是不希望SYSTICK产生中断请求,自然会想到直接关闭其中断请求使能,即对上面控制寄存器中的TICKINT位进行清零。

hal库关闭systick中断,单片机,stm32,嵌入式硬件

如果基于STM32库定义的写法可以是这样:

SysTick->CTRL &=~SysTick_CTRL_TICKINT_Msk;

一般来讲,关闭SYSTICK的中断功能后其计数定时功能往往也不太需要了,即使需要也不太方便使用。既然这样,我们也可以通过关闭SYSTICK的计数功能进而阻止基于硬件计数事件的中断请求产生。【我为什么加个基于硬件计数事件呢,是因为很多中断请求都可以基于软件方式产生】,基于STM32库定义的写法可以是这样:

SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;

当然,对于关闭SYSTICK计数器的做法除了直接对控制寄存器的计数使能位清零外,还有个比较快捷省事的做法,那就是直接对其重装寄存器写0值,即像下面这样操作:

SysTick->LOAD  = 0 ;  

这个时候,SYSTICK将不做计数动作,自然也不会产生计数溢出而触发中断请求。

为什么我前面强调“基于STM32库定义的写法”呢?是因为有关SYSTICK的寄存器的命名,STM32库定义的跟ARM技术手册命名不一样。ARM的命名是这样的:

hal库关闭systick中断,单片机,stm32,嵌入式硬件

而STM32库定义的寄存器命名是这样的:

hal库关闭systick中断,单片机,stm32,嵌入式硬件

当然这个命名只是符号上的差异,最终对应的访问地址都是一样的。个人觉得ST库定义的更直观、易记、易识别点。

上面说的都是基于不同方式如何关闭SYSTICK的中断请求,开启只是个逆过程而已,无须赘述。

前面重点介绍了从外设端如何关闭SYSTICK中断请求,令其不向内核申请中断。至于如何从内核端使能或禁止对其做出响应,那是NVIC控制器的事了。比方,在STM32的HAL库函数里,HAL_NVIC_EnableIRQ()和HAL_NVIC_DisableIRQ()就是用来针对特定中断请求做允许响应和禁止响应的设定。关于从外设端开关中断请求和从内核端开关中断响应的关系以及行为差异,我们下次找机会再聊。

*******************************

往期话题阅读链接【点击即可阅读】:

1、本来同步的信号为何有相差了?

2、STM32 DMA编程时的应用小提醒

3、开启Cache后UART无法发送新数据

4、CubeMx的配置顺序与DMA传输异常之提醒

5、两份做STM32 FDCAN开发的资料文章来源地址https://www.toymoban.com/news/detail-649286.html

到了这里,关于如何开关Systick定时器的中断使能?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

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

    2023年04月08日
    浏览(46)
  • 【STM32/FreeRTOS】SysTick定时器及FreeRTOS系统节拍

    目录 一、SysTick定时器 1、SysTick寄存器介绍 (1)控制及状态寄存器 (2)重装载数值寄存器 (3)当前数值寄存器 2、SysTick寄存器配置函数 二、FreeRTOS中的SysTick定时器 1、SysTick配置函数及分析 2、SysTick中断函数 三、其他操作配置FreeRTOS的SysTick 1、找到头文件 FreeRTOSConfig.h 有如

    2024年01月24日
    浏览(44)
  • ARM Cortex-M处理器中的SysTick定时器简介

    ARM Cortex-M处理器中的SysTick是一个内部的系统定时器,它提供了一种简单而有效的方式来生成定时的中断请求。SysTick定时器是一个24位的下计数定时器,它可以配置为周期性地产生中断,这些中断可以用于操作系统的任务调度、性能测量、时间延迟等。 SysTick定时器的主要特点

    2024年04月28日
    浏览(45)
  • STM32系统滴答定时器SysTick实现精确ms和us延时

    时间记录:2023/12/11 一、时间的计算 STM32F103C8T6单片机为例,系统时钟为72MHz,则一个时钟周期为(1/72M)秒,即1/72us 二、寄存器介绍 (1)CTRL控制及状态寄存器 位段 名称 描述 16 COUNTFLAG 当计数到0时,该位置为1,当读取该位时,自动清零 2 CLKSOURCE 值为0时选择外部时钟源,值为

    2024年01月24日
    浏览(42)
  • HAL STM32基于系统滴答定时器(SysTick)实现多任务时间片轮询

    📑RTOS(实时操作系统)和定时器时间片轮询是两种不同的任务调度和执行方式的差异简介 🔖 以下部分内容,由AI给出的解答: 🔖RTOS(实时操作系统): 🌿RTOS是一种专门设计用于实时系统的操作系统,它可以有效地管理多个任务,提供任务调度、同步和通信等功能。 🌿

    2024年02月21日
    浏览(44)
  • 【致敬未来的攻城狮计划】— 连续打卡第十六天:FSP固件库系统定时器(滴答定时器SysTick)每2秒LED闪烁一次

    1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.Keil配置使用(使用 RASC 生成 Keil 工程) 6.Keil配置使用(使用 RASC 生成 Keil 工程)

    2024年02月01日
    浏览(78)
  • STM-32:TIM定时中断—定时器定时中断/定时器外部时钟

    定时器可以对输入的时钟进行计数,并在达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等

    2024年02月09日
    浏览(54)
  • 定时器定时中断&定时器外部时钟

    1、RCC开启时钟,此时定时器的基准时钟和整个外设的工作时钟都打开 2、选择时基单元的时钟源,对于定时中断选择内部时钟源 3、配置时基单元,包括预分频器,自动重装器,计数模式等 4、配置输出中断控制允许更新中断输出到NVIC 5、配置NVIC,在NVIC中打开定时器中断的通

    2024年02月15日
    浏览(48)
  • 【51单片机】如何设置中断函数(场景:在定时器工作完跳转到中断程序时,怎么识别我们的中断程序在哪里呢?)

    前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 本章是【利用定时器和中断实现一个简单项目】中的一部分,感兴趣的老铁可以跳转传送门查看 传送门 欢迎订阅 YY 滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专

    2024年02月19日
    浏览(50)
  • STM32单片机(六)TIM定时器 -> 第二节:TIM定时中断练习(定时器定时中断和定时器外部时钟)

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包