stm32的学习——SysTick定时器的使用

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

一、Systick定时器

1、SysTick定时器简介

SysTick定时器也称为滴答定时器,SysTick定时器是内核中的一个外设,内嵌在NVIC(嵌套向量中断控制器)里面,在cortex M3、M4中都存在,很方便用户移植。

虽然我用的是cortex M4的内核,但是他的内核文档在这方面和Cortex M3的相似。

所以我这里参考了M3的内核中文文档。M3和M4内核文档——密码:0423。

注意:因为Systick定时器是内核外设,所以在STM32F4中文参考手册是找不到的,可以参考Cortex M3权威指南(第8章) + M3/M4内核权威指南(9.5章节)。

stm32 systick,stm32,学习,嵌入式硬件

 Systick定时器是一个24bit的倒计时(向下计数)定时器,功能就是实现简单的延时。

24位向下计数定时器。

2、SysTick时钟源

SysTick定时器有两个时钟源可以选择,具体可以参考下图中的中文手册的时钟树。(stm32f4xx中文手册)密码同上。

stm32 systick,stm32,学习,嵌入式硬件

 我们主要看粉色虚线框中的内容,从左往右看,首先是AHBPRESC/1,...,512这一个输出的AHB频率为168MHz,向上分为两个方向,一个是到Cortex 系统定时器,一个是FCLK Cortex自由运行时钟,这两个时钟源都可以作为SysTick定时器的时钟源。这两个的频率分别是8分频:21MHz和没有分频的168MHz。

也可以参考stm32CubeMX中的图片:

stm32 systick,stm32,学习,嵌入式硬件

 让我们思考一下为什么要分频呢?为什么有不同频率的时钟源?

因为选择不同频率的时钟源会影响延时的长短。

如果选择168MHz的时钟源作为SysTick的时钟源,168MHz:1s震荡168 000 000次,也就是1us(1s == 1 000 000 us)震荡168次,而我们的SysTick定时器是一个24位的向下计数定时器。所以最多计数2^24-1(从零开始计数,所以要减一),所以可以算出最大延时时间:99.864ms

计算过程:2^24/168 = 99864.380952380952380952380952381us = 99.864ms

如果选择21MHz作为时钟源,则1s震荡21 000 000次,所以1us 震荡 21次,最大延时时间:

2^24/21 = 798,915.04761904761904761904761905 us = 798.915 ms

关于Systick定时器的寄存器说明以及函数接口都存储在内核文件misc.c以及misc.h,同时在core_cm4.h页定了关于Systick定时器的内容。

内核中提供了一个函数接口可以去修改Systick的时钟源  函数为 SysTick_CLKSourceConfig()

stm32 systick,stm32,学习,嵌入式硬件

我们来讲一下 SysTick_CLKSourceConfig()这个函数:

函数原型

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)

函数参数

参数一:SysTick_CLKSource   选择时钟源  一般选SysTick_CLKSource_HCLK_Div8   21MHZ

@brief配置SysTick时钟源。

@param SysTick_CLKsource: SysTick时钟源。该参数可以是以下值之一:

        @arg SysTick_CLKSource_HCLK_Div8:选择AHB时钟除以8作为SysTick时钟源

        @arg SysTick_CLKSource_HCLK:选择AHB时钟作为SysTick时钟源。

@retval 无

3、SysTick定时器的应用

内核提供两种方案来使用systick定时器,分别是 中断方式 + 非中断方式

①中断方式:

stm32 systick,stm32,学习,嵌入式硬件

 第一步:设置Systick的中断周期(SysTick_Config函数)

stm32 systick,stm32,学习,嵌入式硬件

 让我们分析一下这个SysTick_Config函数:

函数原型:__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

函数参数分析:

stm32 systick,stm32,学习,嵌入式硬件

 ticks是两个中断中的滴答数,我们回头看内核文档:

stm32 systick,stm32,学习,嵌入式硬件

滴答数 = 时钟源 / 时间,假如中断周期为1us,时钟源为168MHz,则ticks = 168 000 000 / 1 000 000 = 168

第二步:编写延时函数

stm32 systick,stm32,学习,嵌入式硬件

 文章来源地址https://www.toymoban.com/news/detail-762839.html

第三步:在Systick中断服务函数中修改中断次数

stm32 systick,stm32,学习,嵌入式硬件 

 ②非中断方式:

直接操作Systick定时器的4个寄存器,使用流程如下

stm32 systick,stm32,学习,嵌入式硬件

stm32 systick,stm32,学习,嵌入式硬件 

stm32 systick,stm32,学习,嵌入式硬件 

 

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

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

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

相关文章

  • HAL STM32基于系统滴答定时器(SysTick)实现多任务时间片轮询

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

    2024年02月21日
    浏览(44)
  • 【HAL库】STM32CubeMX开发----非阻塞延时实验----SysTick(滴答定时器)中断

    STM32CubeMX 下载和安装 详细教程 【HAL库】STM32CubeMX开发----STM32F103/F207/F407----目录 HAL库 有自带的 ms级 延时函数: HAL_Delay(); 缺点: 这是 阻塞延时 方式,就是延时期间,什么都不能干,这样很浪费资源。 这篇文章主要介绍,利用 SysTick(滴答定时器)中断 实现 非阻塞延时 的实验

    2024年02月16日
    浏览(49)
  • 【STM32笔记】低功耗模式、WFI命令等进入不了休眠的可能原因(系统定时器SysTick一直产生中断)

    【STM32】低功耗模式、WFI命令等进入不了休眠的可能原因(系统定时器SysTick一直产生中断) 【STM32笔记】低功耗模式配置及避坑汇总 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案) __WFI

    2024年02月10日
    浏览(48)
  • 如何开关Systick定时器的中断使能?

    我们知道,STM32芯片里的ARM处理器都集成了1个24位向下计数的具备自动重装功能的SYSTICK定时器,功能比较单纯,就是计数定时。它常用来作为OS的滴答时钟,或者作为基本的计数时基。比方在各个RTOS系统里往往把SYSTICK作为滴答时钟,对于OS来讲,用它做时基可以提高代码移植

    2024年02月13日
    浏览(35)
  • ARM Cortex-M处理器中的SysTick定时器简介

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

    2024年04月28日
    浏览(45)
  • 【致敬未来的攻城狮计划】— 连续打卡第十六天: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)
  • 【STM32】STM32学习笔记-定时器定时中断 定时器外部时钟(14)

    1.1 TIM_InternalClockConfig 1.2 TIM_TimeBaseInit 1.3 TIM_TimeBaseInitTypeDef 1.4 TIM_ClearFlag 1.5 TIM_ITConfig 1.6 TIM_Cmd 1.7 中断服务函数 参考程序 1.8 TIM_ETRClockMode2Config timer.h timer.c main.c timer.h timer.c main.c 09-定时器定时中断.rar 10-定时器外部时钟.rar 参考: 【STM32】江科大STM32学习笔记汇总

    2024年02月03日
    浏览(51)
  • 【STM32】定时器详细学习

    定时器介绍 HAL库外设模块设计方法 外设通用接口函数设计 定时/计数功能 时基单元 外部脉冲计数 定时器的核心就是一个计数器模块,可以进行加一或减一计数。每出现一个计数信号,计数器的值就自动加一或减一。当计数值从0递增到最大值或者从最大值递减到0时,定时器

    2024年02月05日
    浏览(35)
  • STM32学习--定时器中断

    目录  概述 一、STM32 通用定时器简介 1.1 STM32定时器定时原理  1.2 STM32 通用定时器相关寄存器简介 1.3 定时器功能描述 1.4计数器模式 二、定时器中断库函数 2.1 步骤总结 2.2 库函数讲解 总结:         这一章,我们将向大家介绍如何使用 STM32F1 系列 的通用定时器。 TIM

    2024年02月02日
    浏览(43)
  • 【STM32】FreeRTOS软件定时器学习

      软件定时器 FreeRTOS提供了现成的软件定时器功能,可以一定程度上替代硬件定时器,但精度不高。 实验:创建一个任务,两个定时器,按键开启定时器,一个500ms打印一次,一个1000ms打印一次。 实现:在【STM32】FreeRTOS事件组学习基础上修改。 上面的代码是CubeMX封装好的。

    2024年02月12日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包