Stm32定时、延时等功能实现

stm32实现定时、延时一般通过调用CMSIS函数SysTick_Config实现。例如我们设置1ms中断如下:

 

/**************************************
**转载请注明:http://tedeum.iteye.com**
***************************************/

if (SysTick_Config(SystemCoreClock / 1000))
	  {
	    /* Capture error */
	    while (1);
	  }

 这时,每过1ms就会调用中断,可以在中断中进行定时逻辑处理:

 

 

void SysTick_Handler(void)
{
//进行相应的定时逻辑处理
}

 在此基础上,我们就可以进行延时,频率处理,计时的功能的开发:

一、延时,我们首先定义一个延时时间,然后调用延时函数后,延时时间在SysTick中断中减一,为0时跳出:

//延迟时间计数器
__IO uint32_t TimingDelay = 0;
//SysTick中断处理函数
void SysTick_Handler(void)
{
	//每次SysTick中断减一
	  if (TimingDelay != 0x00)
	  {
	    TimingDelay--;
	  }
}
//延时函数
void Delay(__IO uint32_t nTime)
{
	//设置终端延时计数器
  TimingDelay = nTime;
  //为0时延时等待结束
  while(TimingDelay != 0);
}

 二、计时,设置一个sysTickCount,两个sysTickCount的差就是时长:

//tick计数器,48天后重复,如用于四轴不用处理
static volatile uint32_t sysTickCount = 0;
//SysTick中断处理函数
void SysTick_Handler(void)
{
	//每次SysTick中断加1
	sysTickCount++
}
//获取当前计数
uint32_t millis(void)
{
    return sysTickCount;
}
//使用例子
uint32_t t1 = millis();
//do somethin
uint32_t t2 = millis();
uint32_t t3 = t2 - t1;

 三、频率处理,按上面没1ms处理1次,频率= 1000(每秒次数)/每次间隔时间,在中断处理函数中如下:

void SysTick_Handler(void)
{
	//每次SysTick中断加1
	sysTickCount++

	//500hz
	if ((sysTickCount % 2) == 0) {
		//do something 500hz
	}
	//250hz
	if ((sysTickCount % 4) == 0) {
		//do something 200hz
	}
	//200hz
	if ((sysTickCount % 5) == 0) {
		//do something 200hz
	}
	//100hz
	if ((sysTickCount % 10) == 0) {
		//do something 200hz
	}
	//50hz
	if ((sysTickCount % 20) == 0) {
		//do something 200hz
	}
	//20hz
	if ((sysTickCount % 50) == 0) {
		//do something 200hz
	}
	//10hz
	if ((sysTickCount % 100) == 0) {
		//do something 200hz
	}
	//5hz
	if ((sysTickCount % 200) == 0) {
		//do something 200hz
	}

}

 以上就是SysTick一些基本应用的笔记。

/*************************************************
*****转载请注明出处:http://tedeum.iteye.com******
**************************************************/

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值