stm32f103 -SysTick系统定时器

SysTick简介:

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

SysTick寄存器介绍

SysTick—系统定时器有4个寄存器,简要介绍如下。在使用SysTick产生定时的时候,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。
			寄存器名称 											寄存器描述 
				CTRL 										SysTick控制及状态寄存器 
				LOAD  									SysTick重装载数值寄存器 
				VAL 										SysTick当前数值寄存器 
				CALIB										SysTick校准数值寄存器

SysTick属于内核的外设,有关的寄存器定义和库函数都在内核相关的库文件core_cm3.h中。

用固件库编程的时候我们只需要调用库函数SysTick_Config()即可,形参ticks用来设置重装载寄存器的值,最大不能超过重装载寄存器的值2的24次方,当重装载寄存器的值递减到0的时候产生中断,然后重装载寄存器的值又重新装载往下递减计数,以此循环往复。紧随其后设置好中断优先级,最后配置系统定时器的时钟等于AHBCLK=72M,使能定时器和定时器中断,这样系统定时器就配置好了,一个库函数搞定。

SysTick中断时间的计算

SysTick定时器的计数器是向下递减计数的,计数一次的时间TDEC=1/CLKAHB,当重装 载寄存器中的值VALUELOAD减到0的时候,产生中断,可知中断一次的时间 TINT=VALUELOAD*TDEC=VALUELOAD/CLKAHB,其中CLKAHB=72MHZ。如果设置 VALUELOAD为72,那中断一次的时间TINT=72/72M=1us。

SysTick_Config()的形参ticks对应的值VALUELOAD;

举个例子 :把定时器设为1s:

ticks的值为720,那么得到的时间就是10us;

SysTick定时时间的计算:
当设置好中断时间TINT后,我们可以设置一个变量t,用来记录进入中断的次数,那 么变量t乘以中断的时间TINT就可以计算出需要定时的时间。

	//main.c
	
	void SysTick_Init(void)
	{
		(SysTick_Config(SystemCoreClock/100000));
	}
	volatile uint32_t TimingDelay =0;
	void Delay_us(__IO u32 ntime)
	{
		TimingDelay = ntime;
		while(TimingDelay);
	}
	//stm3210x_it.c
	
	extern uint32_t TimingDelay ;
	void SysTick_Handler(void)
	{
		if(TimingDelay!=0x00)
		{
			TimingDelay--;
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值