STM32—系统定时器

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

1.SysTick简介

SysTick是一种系统定时器,可以用于实现操作系统、任务调度、时钟管理等功能。它通常集成在微控制器中,并且是硬件实现的,具有高精度和可靠性。

在ARM Cortex-M处理器中,SysTick定时器可以配置为计数器模式或外部时钟模式。在计数器模式下,SysTick定时器使用内部时钟作为时基,可以产生中断,以实现系统的定时功能和任务调度。在外部时钟模式下,SysTick定时器使用外部时钟信号作为时基,可以用于协调外部设备的时序和同步。

SysTick定时器通常具有以下特点:

1. 高精度:SysTick定时器通常可以提供高精度的计时功能,以满足实时应用的要求。

2. 灵活性:SysTick定时器可以通过软件配置来适应不同的应用场景和需求。

3. 可编程性:SysTick定时器可以通过编程来实现各种定时功能,例如系统节拍、超时检测、延时等。

2.SysTick使用方法

STM32系列微控制器中的SysTick定时器可以用于实现系统的定时功能和任务调度。以下是使用SysTick的基本步骤:

1. 启用SysTick定时器

首先需要启用SysTick定时器,通过设置SysTick控制和状态寄存器(STK_CTRL)的ENABLE位为1来完成。可以使用以下代码片段实现:

SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;

2. 配置SysTick时钟源

SysTick定时器可以使用内部时钟(CPU时钟)或外部时钟作为时基。通过设置SysTick控制和状态寄存器的CLKSOURCE位来选择时钟源。例如,要使用CPU时钟作为时基,可以使用以下代码片段:

SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;

3. 配置定时周期

SysTick定时器以一个固定的频率递减计数,当计数达到零时会触发中断。可以通过设置SysTick重载值寄存器(STK_LOAD)来配置定时周期。例如,要设置定时周期为1毫秒,可以使用以下代码片段(假设使用的时钟频率为72MHz):

SysTick->LOAD = 72000-1; // 72MHz / 1000Hz - 1

4. 启用中断

如果需要在定时周期结束时触发中断,可以设置SysTick控制和状态寄存器的TICKINT位为1。例如,要启用中断,可以使用以下代码片段:

SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;

5. 中断处理

在定时周期结束时,SysTick定时器会触发中断。可以编写中断处理函数来执行相应的操作。例如,在Cortex-M系列处理器中,可以使用以下方式定义SysTick中断处理函数:

void SysTick_Handler(void)
{
    // 在这里执行需要定时的任务
}

6. 启动定时器

最后,通过设置SysTick控制和状态寄存器的ENABLE位为1来启动定时器。例如,可以使用以下代码片段:

SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;

通过以上步骤,就可以使用SysTick定时器实现系统的定时功能和任务调度了。需要根据具体的需求进行配置和使用,例如调整定时周期、启用/禁用中断等。请注意,具体的寄存器名称和位定义可能因STM32系列型号而有所差异,请查阅相关的参考手册获取准确的信息。

3.SysTick定时器实例

 由于SysTick定时器是内核里面的外设,所以需要包含头文件“core_cm3.h”。

1. SysTick_Config

static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{ 
  //reload寄存器位24bit,最大值为2^24
  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            
  
  //配置reload寄存器的初始值                                                             
  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; 

  //配置中断优先级为1<<4-1 =15,优先级为最低     
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  

  //配置counter计数器的值
  SysTick->VAL   = 0;        

  //分别配置systick的时钟为72M,使能中断,使能systick                                  
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | 
                   SysTick_CTRL_TICKINT_Msk   | 
                   SysTick_CTRL_ENABLE_Msk;                    
  return (0); 
}                                                

 SysTick_Config()需要传进去一个形参,这个形参是要被写入重装载寄存器LOAD里面。

2.SysTick定时是时间计算 

t = reload * (1/clk)
clk = 72M时   t = (72)*(1/72M) = 1us
clk = 72M时   t = (72000)*(1/72M) = 1ms

3. 编写延时函数

首先调用 SysTick_Config()函数,传入参数72就是1us,72000就是1ms。

SysTick_Config(72);

然后使用一个for循环计数,执行一次for循环就代表1us,for循环里面再用一个while循环,通过CTRL是否置1来 判断是都计时1us。

for(i = 0;i < us; i++)
	{
		while( ! ((SysTick->CTRL) & (1 << 16)) );
	}

延时完成后需要关闭定时器

SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;

最后,在main函数中调用这个延时函数并传递 一个形参即可。文章来源地址https://www.toymoban.com/news/detail-832247.html

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

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

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

相关文章

  • 【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日
    浏览(56)
  • 【嵌入式】HC32F定时器PWM捕获+APC芯片实现模拟AD采样

    目录 一 项目背景 二 原理说明 三 设计实现——定时器初始化 四 设计实现——PWM捕获 五 梳理总结         目前使用了TI的ADC采样芯片 ADS1018实现模拟量4-20mA/0-20mA的采样 ,原理是 将外部输入的模拟量信号4-20mA,经由并联的两个100Ω电阻,转换为0.2-1V的电压信号传递到模数转

    2023年04月24日
    浏览(50)
  • 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日
    浏览(45)
  • 【STM32笔记】STM32的定时器开发基础(二)(基于STM32CubeMX实现定时器中断)

      传统STM32外部中断 的设计步骤:  (1)将GPIO初始化为输入端口。  (2)配置相关I/O引脚与中断线的映射关系。  (3)设置该I/O引脚对印的中断触发条件。  (4)配置NVIC,并使能中断。  (5)编写中断服务函数。   基于STM32CubeMX的外部中断 设计步骤  (1)在STM3

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

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

    2024年02月21日
    浏览(47)
  • STM32定时器-定时器中断功能详解

    STM32的众多定时器中我们使用最多的是高级定时器和通用定时器,而高级定时器一般也是用作通用定时器的功能,下面我们就以通用定时器为例进行讲解,其功能和特点包括: 通用与基本定时器(2~7)位于低速的APB1总线上 高级定时器(1、8)位于高速的APB2总线上 自动装载计

    2024年02月08日
    浏览(56)
  • STM32——定时器——定时中断

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本节先只讲解定时器的定时中断,内外中断源选择。 TIM(Timer)定时器 定时器可以 对输入的时钟进行计数 ,并在计数值达到设定值时触发中断。 16位计数器、预分频器、自动重装寄存器的时基单元 ,

    2024年04月10日
    浏览(50)
  • stm32 定时器部分(定时中断)

    一.定时中断(概念部分) 定时中断主要包含两种中断一种是更新中断还有一种是输入捕获中断 更新中断 :更新中断通常用于定时器的基本定时功能。当定时器计数器溢出并重新从零开始计数时,会触发更新中断。你可以配置定时器的计数周期和预分频器来控制定时器的计时

    2024年03月15日
    浏览(60)
  • stm32——定时器

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

    2024年02月06日
    浏览(46)
  • STM32定时器

    目录 一 定时器的基本介绍 二 定时器的原理框图 1、定时器时钟 2 时基单元 3 捕获输入 4 PWM输出。 三 定时器的应用 1 定时器的基础定时计数功能 2 PWM比较输出 3 外部脉冲计数                                 a、外部触发输入(ETR--外部时钟模式2)                   

    2024年02月16日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包