首页 > 其他分享 >SysTick

SysTick

时间:2024-07-19 12:25:00浏览次数:6  
标签:CTRL SysTick RELOAD 计数器 寄存器 时钟

1.systick简介

![[Pasted image 20240719113702.png]]
处理器有一个24位系统定时器SysTick,它从重新加载值倒计时到零,在下一个时钟沿重新加载(换行)LOAD寄存器中的值,然后对后续时钟倒计时。当处理器暂停调试时,计数器不会减少

2.systick相关寄存器

2.1 STK_CTRL

![[Pasted image 20240719114157.png]]

  • Bits 31:17保留,必须保持清除。

  • bit16 COUNTFLAG:如果计时器自上次读取以来计数为0,则返回1。

  • Bits 15:3保留,必须保持清除。

  • bit2 CLKSOURCE:时钟源选择
    0:12M
    1:48M

  • bit1: TICKINT:SysTick异常请求启用0:倒计时到零不会断言SysTick异常要求1:倒计时到0以断言SysTicks异常要求。注意:软件可以使用COUNTFLAG来确定SysTick是否曾经计数为零。

  • bit0: 启用:计数器启用启用计数器。当ENABLE设置为1时,计数器从LOAD寄存器加载RELOAD值,然后倒计时。当达到0时,它将COUNTFLAG设置为1,并根据TICKINT的值可选地断言SysTick。然后,它再次加载RELOAD值,并开始计数。0:计数器已禁用1:计数器已启用

2.2 STK_LOAD

![[Pasted image 20240719114754.png]]

  • Bits 31:24保留,必须保持清除。

  • bits 23:0 RELOAD[23:0]:RELOAD值LOAD寄存器指定计数器启用时以及计数器达到0时加载到VAL寄存器的起始值。计算RELOAD值RELOAD可以是0x0000001-x00FFFFFF范围内的任何值。起始值为0是可能的,但没有效果,因为从1到0计数时,SysTick异常请求和COUNTFLAG被激活。RELOAD值根据其用途计算:

    1. l要生成具有N个处理器时钟周期的多触发定时器,请使用N-1的RELOAD数值。例如,如果每100个时钟脉冲需要SysTick中断,请将RELOAD设置为99。
    2. II要在延迟N个处理器时钟周期后传递单个SysTick中断,请使用值为N的RELOAD。例如,如果在400个时钟脉冲后需要SysTick打断,请将RELOAD设置为400。

2.3 STK_VAL

![[Pasted image 20240719115130.png]]

  • Bits 31:24保留,必须保持清除。
  • bits 23:0 CURRENT 23:0:当前计数器值VAL寄存器包含SysTick计数器的当前值。读取返回SysTick计数器的当前值。任何值的写入都会将字段清除为0,并将STK_CTRL寄存器中的COUNTFLAG位清除为0。
    另外有一个校准用的寄存器,这里没有用上

3.MM32 SysTick时钟

![[Pasted image 20240719115406.png]]

可知systick可以使用最大48M频率时钟和12M 4分频时钟,时钟选择

4. 源码

#include "mm32g0001.h"

void Delay_Init(void)       
{
	//SysTick->CTRL|=SysTick_CTRL_CLKSOURCE_Msk;  //Selects the clock source.  //48M
	SysTick->CTRL &= ~SysTick_CLKSource_HCLK;      //12M
	SysTick->CTRL&=~SysTick_CTRL_TICKINT_Msk;    //not enable intterrupt
	SysTick->CTRL&=~SysTick_CTRL_COUNTFLAG_Msk;  //reset COUNTFLAG
}

void Delay_us(uint32_t time)
{
	SysTick->LOAD=12;
	SysTick->VAL=12;
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;  //enable count
	while(time)
	{
		if(SysTick->CTRL&0x00010000)
			time--;
	}
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;  //enable count
}

void Delay_ms(uint32_t time)
{
	SysTick->LOAD=12000;
	SysTick->VAL=12000;
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;  //enable count
	while(time)
	{
		if(SysTick->CTRL&0x00010000)
			time--;
	}
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;  //enable count
}

5.修改说明

  • 2024/7/19 第一次编辑

标签:CTRL,SysTick,RELOAD,计数器,寄存器,时钟
From: https://blog.csdn.net/m0_65360834/article/details/140545727

相关文章

  • STM32系统嘀嗒Systick定时器
    目录STM32系统嘀嗒Systick定时器基本概念基本应用时钟分析时钟选择(1) 内部时钟(2) 外部时钟原理分析控制方式STM32系统嘀嗒Systick定时器基本概念定时器是STM32中常用的外设,一般定时器的基本功能就是定时,而在CortexM3/M4内核中也包含一个简单的定时器,就是系统嘀嗒定时器(Sy......
  • STM32定时器篇——Systick定时器的使用(实现delay延时函数)
    一、Systick定时器的简介:        Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器对于CM3,CM4内核芯片,都有Systick定时器。当Systick计到0时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在......
  • CH32系列MCU SysTick使用与计算
    1、关于SysTickCH32F103/203:CH32F103/203为Cortex-M3内核,SysTick是一个24位的向下递减计数器,计数器每计数一次的时间可配置为1/时基。当SysTick重装载数寄存器的值递减到0的时候,产生一次中断。CH32F系列MCUSysTick由4个寄存器控制,具体如下图。具体介绍可参考《CM3权威指南》......
  • 【ARM课】4-Systick
    1.cubemx设置参考文章【STM32】HAL库-系统滴答定时器SysTick时钟设置将HCLK设置为最大频率72MHzNVIC设置Timebase:Systemticktimer优先级默认为15,可以自己修改,没有其他中断的时候也可以不修改2.使用函数电平翻转voidHAL_GPIO_TogglePin(GPIO_TypeDef*GPI......
  • STM32之HAL开发——系统定时器(SysTick)
    系统定时器(SysTick)介绍   SysTick—系统定时器是属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟SYSCLK等于72M。当重装载数值寄存器的值递减到0的时候,系统定时器就产生......
  • Systick定时器详解
    目录一.SysTick简介1.SysTick概念2.Systick寄存器二.代码详解1.寄存器方式驱动2.固件库方式驱动一.SysTick简介1.SysTick概念Systick属于系统内核中的外设,其详细使用说明和寄存器介绍都在M3权威指南手册中.Systick内嵌在NVIC中,系统定时器是一个24bit的向下递......
  • CH32V003的系统定时器SysTick
    在CH32V003内部有一个特殊的定时器——系统定时器(SysTick),它位于青稞V2微处理内核里面,是RISC-V内核的一个组成部分,主要用来给操作系统提供时间片轮转的定时,一般固定为10ms的定时,所以中文也称它为“嘀嗒”定时器(也称“心跳”定时器)。在不跑操作系统时,可以把它当作普通定时器来使用,一......
  • 关于CH32F系列以及CH32V系列 SysTick的使用
    1、关于SysTickCH32F103/203:CH32F103/203SysTick和STM32F103一样为Cortex-M3内核,是一个24位的向下递减计数器,计数器每计数一次的时间为1/SYSCLK(系统主频)。当SysTick重装载数寄存器的值递减到0的时候,产生一次中断。CH32F系列MCUSysTick由4个寄存器控制,具体如下图。具体介绍可......
  • CM4 systick 时钟源设置
    CM4systick时钟源设置起因之前离职的同事交接给我的项目里面timer2的配置错误让我决定修改他用到的每一个时钟的配置。systick时钟源设置方法systick的时钟源可以从两个地方选择。internal源external源TheCortexSystemTimer(SysTick)externalclockisclocked......
  • systick 理解
     systick中断的优先级往往设置为最低值,而不是最高值;如果设置为最低值不会发生上图标号[6]处的情况,设置为最低可能会被其他中断抢占,延长systick的响应时间,但是这个延迟......