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();
}
/**
* @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();
}
相关文章推荐
- Delphi操作Unicode字符
- 08/13 D -> codeforces Round #Pi div 2 E. President and Roads 最短路变形
- 搜狐-入职周年祝贺
- asp 实现域名转向
- 如何解决mathpage.dll或MathType.dll文件找不到问题
- 新浪微博ERROR_CODE:21301.auth by Null spi问题
- GCD之dispatch queue深入浅出
- C#贪吃蛇(窗体版本)
- leetcode 判断两棵树是否一致Same Tree
- 使用libjpeg.framework压缩UIImage
- unity3d ngui3.7 新手引导遮罩和高亮实现
- 复习:JSP基本语法(JSP注释 + JSP指令 + JSP脚本元素 + JSP动作元素)
- hadoop集群的创建
- 二分匹配HDU1054 Strategic Game
- 函数调用
- 关于linux下svn日志问题
- 质数因子
- 设计模式的饕餮盛宴
- 深箸隋唐
- Java EE HTML5 WebSocket 示例