SYSTICK配置

来源:互联网 发布:养生源码 编辑:程序博客网 时间:2024/06/10 13:58
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();
}

0 0
原创粉丝点击