利用系统定时器产生延时的方法

/**********************************************************************************
 * 文件名  :SysTick.c
 * 描述    :SysTick 系统滴答时钟10us中断函数库,中断时间可自由配置,
 *           常用的有 1us 10us 1ms 中断。         
 * 库版本  :ST3.5.0
 **********************************************************************************/
#include "SysTick.h"

static __IO u32 TimingDelay;


/*---------------------------------------------------------------------
 * 启动系统滴答定时器 SysTick
 */
void SysTick_Init(void)
{
	/* SystemFrequency / 1000    1ms中断一次
	 * SystemFrequency / 100000	 10us中断一次
	 * SystemFrequency / 1000000 1us中断一次
	 */
//	if (SysTick_Config(SystemFrequency / 100000))	// ST3.0.0库版本
	if (SysTick_Config(SystemCoreClock / 1000000))	// ST3.5.0库版本
	{ 
		/* Capture error */ 
		while (1);
	}
		/* 关闭滴答定时器 */ 
	SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}



/*---------------------------------------------------------------------
 * us延时程序,1us为一个单位
 * Delay_us( 1 ) 实现的延时为 1 * 1us = 1us
 */
void delay(__IO u32 nTime)
{ 
	TimingDelay = nTime;	

	/* 使能滴答定时器 */ 
	SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;

	while(TimingDelay != 0);
}



/*---------------------------------------------------------------------
 * 获取节拍程序
 * 在 SysTick 中断函数 SysTick_Handler()调用
 */
void TimingDelay_Decrement(void)
{
	if (TimingDelay != 0x00)
	{ 
	   TimingDelay--;
	}
}

/*********************************************************************************/	

 

posted @ 2016-08-13 16:38  前端人生  阅读(1829)  评论(0编辑  收藏  举报