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 赋的值为要中断的次数。
所以总的延时时间 :
/**
* @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
- SYSTICK配置
- systick 的配置总结
- STM32的SysTick配置说明
- Systick
- systick
- SysTick
- Systick
- Systick
- SysTick_Config()函数的参数配置,SysTick时钟配置
- 一个关于stm32的systick配置出错的小问题
- STM32入门学习之_SysTick_Config()函数的SysTick时钟配置
- SysTick定时器
- SysTick定时器
- stm32 systick
- STM32 Systick
- STM32F4 systick
- SYSTICK用法
- PIT systick
- 复习:JSP基本语法(JSP注释 + JSP指令 + JSP脚本元素 + JSP动作元素)
- leetcode 判断两棵树是否一致Same Tree
- GCD之dispatch queue深入浅出
- 搜狐-入职周年祝贺
- C#贪吃蛇(窗体版本)
- SYSTICK配置
- Delphi操作Unicode字符
- mvn(即maven)、ant、svn、cvs、git
- python2.7学习笔记(4) ——条件判断、循环、dict、set
- 08/13 D -> codeforces Round #Pi div 2 E. President and Roads 最短路变形
- 软件列表
- hdu5386Cover 暴力枚举
- AC算法初探
- Github 初次使用 commit命令提交失败