STM32----摸石头过河系列(七)

今天练习了32中的SysTick定时器,通常叫做滴答定时器。定时器的作用,用过51的想必都知道。定时器主要用来处理一些周期性的,时间间隔固定的事件。同时定时器也可以用来得到一个事件所耗费的时间。下面来看一下滴答定时器的配置过程:

  1. 初始化定时器,配置定时进入中断的时间间隔
  2. 如果配置失败,则死循环等待
  3. 配置成功后,先关闭定时器
  4. 在延时函数中使用全局变量记录进入了中断几次,并使能定时器
  5. 书写中断所要执行的代码

下面来看看代码(systick.c):

#include"systick.h"

u32 TimeTemp;

void SysTick_Init(void)
{
	if(SysTick_Config(SystemCoreClock/1000))
	{
		while(1);
	}
	
	SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}

void Delay_ms(u32 nTime)
{
	TimeTemp = nTime;
	
	SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
	
	while(TimeTemp != 0);
}

void TimeTemp_Decrement()
{
	if(TimeTemp != 0)
	{
		TimeTemp--;
	}
}
SysTick_Config(SystemCoreClock/1000)

初始化定时器进入中断的时间间隔。SystemCoreClock/1000表示1ms进入中断;SystemCoreClock/100000表示1us进入中断。如果配置成功,跳过if判断,执行SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;来关闭定时器。


void Delay_ms(u32 nTime)
{
	TimeTemp = nTime;
	
	SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
	
	while(TimeTemp != 0);
}

该函数提供被使用者所调用的延时函数,传入的参数为延时的时长,单位是毫秒。然后执行SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;用来使能定时器,使定时器开始工作。最后等待设置的时间,已达到延时的目的。

void TimeTemp_Decrement()
{
	if(TimeTemp != 0)
	{
		TimeTemp--;
	}
}

该函数为在中断中要执行的函数,主要来计数进入中断几次,直到设置的时间结束。

下面来看一下主函数(main.c):

#include"led.h"
#include"usart.h"
#include"systick.h"

int main(void)
{
	GPIO_LED_Config();
	USART1_Config();
	SysTick_Init();
	
	while(1)
	{
		printf("Turn on the Light!\r\n");
		LED(ON);
		Delay_us(5000);
		printf("Turn off the Light!\r\n");
		LED(OFF);
		Delay_us(5000);
		
	}
}

void SysTick_Handler(void)
{
	TimeTemp_Decrement();
}

这个定时器的相对来说是比较简单的,并且它不是外设,它在32的内核之中。比较容易实现简单的定时任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值