您的位置:首页 > 其它

SYSTICK配置

2015-08-15 13:56 399 查看
uint16_t TimingDelay=0;

/**

* @brief 启动系统滴答定时器 SysTick

* @param 无

* @retval 无

*/

void SysTick_Init(void)

{

/* ticks 常取以下值 */

/* SystemFrequency / 1000 1ms 中断一次

* SystemFrequency / 100000 10us 中断一次

* SystemFrequency / 1000000 1us 中断一次*/

if (SysTick_Config(SystemCoreClock / 100000)) // ST3.5.0 库版本 10US 中断一次

{

/* Capture error */

while (1);

}

// 关闭滴答定时器

SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;

}

/*

本函数实际上只是调用了 SysTick_Confi g() 函数,它是属于内核层的 Cortex-M3 通用

函数,位于 core_cm3.h 文件中。若调用 SysTick_Confi g() 配置 SysTick 不成功,则进入死

循环,初始化 SysTick 成功后,先关闭定时器,在需要的时候再开启。*/

/**

* @brief us 延时程序,10us 为一个单位

* @param

* @arg nTime: Delay_us(1) 则实现的延时为 1 * 10us = 10us

* @retval 无

*/

void Delay_us(__IO u32 nTime) //

{

TimingDelay = nTime;

// 使能滴答定时器

SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;

while (TimingDelay != 0);

}

/*

使能了 SysTick 之后,就使用 while(TimingDelay != 0)语句等待 TimingDelay 变量变

为 0,这个变量是在中断服务函数中被修改的。

*/

/**

* @brief 获取节拍程序

* @param 无

* @retval 无

* @attention 在 SysTick 中断函数 SysTick_Handler()调用

*/

void TimingDelay_Decrement(void)

{

if (TimingDelay != 0x00)

{

TimingDelay--;

}

}

/*

每次进入 SysTick 中断就调用一次 TimingDelay_Decrement() 函数,使全局变量

TimingDelay 自 减 一 次。 用 户 函 数 Delay_us () 在 TimingDelay 被 减 至 0 时, 才 退 出

延 时 循 环, 即 我 们 对 TimingDelay 赋的值为要中断的次数。

所以总的延时时间 :

T 延时 = T 中断周期 ×TimingDelay*/

同时在stm32f10x_it.C中

void SysTick_Handler(void)

{

TimingDelay_Decrement();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: