您现在的位置: 主页 > MCU > 单片机技术应用 > STM32 SysTick 精准延时 简单分析 -
本文所属标签:
为本文创立个标签吧:

STM32 SysTick 精准延时 简单分析 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]
在设计软件的时候,有的对时序要求比较严格,但是简单的延时函数又不能准确延时---STM32中有一个系统滴答时钟是不错的配置-------第一部分是---向滴答时钟寄存器写初值,也就是要根据系统频率来递减---

在设计软件的时候,有的对时序要求比较严格,但是简单的延时函数又不能准确延时---STM32中有一个系统滴答时钟是不错的配置---

本文引用地址: http://www.21ic.com/app/mcu/201808/765749.htm

----第一部分是---向滴答时钟寄存器写初值,也就是要根据系统频率来递减----然后为0 则产生中断

void SysTick_Init(uint32_t a) //a-us
{
/* SystemFrequency / 1000 1ms中断一次
* SystemFrequency / 100000 10us中断一次
* SystemFrequency / 1000000 1us中断一次
*/


// if (SysTick_Config(SystemCoreClock / 1000000*a)//写初值----ST3.0.0库版本
if (SysTick_Config(SystemCoreClock / 1000000)*a) //写初值----ST3.5.0库版本
{
while (1); //写初值成功---则进入while死循环-等待滴答时钟的中断到来
}
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; //如果向滴答时钟写初值失败---则关闭系统滴答时钟
}
----第二部分是---延时函数----
void Delay_us(__IO u32 nTime)
{
TimingDelay = nTime;//多少个基础节拍
SysTick_Init(1); //1us
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //使能系统滴答时钟---开始计时

while(TimingDelay!= 0); //定时节拍结束
}

void Delay_ms(__IO u32 nTime)
{
TimingDelay = nTime;//多少个基础节拍
SysTick_Init(1000); //1ms
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //使能系统滴答时钟---开始计时

while(TimingDelay!= 0); //定时节拍结束
}

---第三部分是---滴答时钟的中断函数---

voidTimingDelay_Decrement(void) //节拍递减---在中断中使用
{
if (TimingDelay != 0x00)
TimingDelay--;
}

void SysTick_Handler(void) //---中断---
{
TimingDelay_Decrement();//进一次中断递减一次
}

---第四部分---主函数---

int main(void)
{
SysTick_Init(); //初始化
Delay_us(10000); // 10000 * 10us = 100ms

}




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > STM32 SysTick 精准延时 简单分析 -
 

"STM32 SysTick 精准延时 简单分析 -"的相关文章

网站地图

围观()