STM32的SysTick系统定时器

目录

1、SysTick简介

2、SysTick寄存器介绍


 

1、SysTick简介

SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器 是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置 系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产 生一次中断,以此循环往复。

因为 SysTick 是属于 CM3 内核的外设,所以所有基于 CM3 内核的单片机都具有这个 系统定时器,使得软件在 CM3 单片机中可以很容易的移植。系统定时器一般用于操作系统, 用于产生时基,维持操作系统的心跳。一般SysTick系统寄存器用来做延时函数,在此之中可以设置ms和us级别。

2、SysTick寄存器介绍

SysTick—系统定时器有 4 个寄存器,简要介绍如下。在使用 SysTick 产生定时的时候, 只需要配置前三个寄存器,最后一个校准寄存器不需要使用。

 代码如下:

void ms_delay(uint32_t ms)
{
	uint32_t i;
	SysTick_Config( 72000);
	for(i=0;i<ms;i++)//一个循环相当于1ms
	{
		while(  !((SysTick->CTRL)&(1<<16))  );//一次计时结束
	}
		
		SysTick->CTRL	&=~	SysTick_CTRL_ENABLE_Msk;//使之使能,置O

}

1、 while(  !((SysTick->CTRL)&(1<<16))  ),判断SysTick控制及状态寄存器CTRL,是否计数结束置0,当计数器的值减小到0的时候,CRTL寄存器的位16会置1。

图片内容来源 【野火®】零死角玩转STM32—F103霸道.pdf-->19.2 SysTick 寄存器介绍-->表 19-2 SysTick 控制及状态寄存器

 定时时间的计算方式:

其中 CLKAHB =72MHZ=72000000HZ

计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断, 直到SysTick 控制及状态寄存器中的使能位清除。不过 1us 的中断没啥意义,整个程序都用在中断上了,所以我们一般看情况用1ms。

Clk(时钟中断)=72M,t=(72)×(1/72M)=0.000001s=1 us; //1 us进入一次中断NVIC

Clk(时钟中断)=72M,t=(72000)×(1/72M)=0.001s=1 ms; //1 ms进入一次中断NVIC

时间换算单位:1 s=1000 ms=1000000 us

STM32 的内核库已经提供了这个功能,只要配置内置的SysTick_Config()即可实现,一般我们配置计数次数就可以达到我们想要的延时时间单位,SysTick_Config()函数的形参用来设置重装载寄存器的值。1us的代码可以参照1ms的来编写,在需要使用时直接调用即可。

参考链接

学习记录:理解 SysTick系统定时器,编写延时函数_Bitter tea seeds的博客-CSDN博客_systick->ctrl

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值