首页 > 分享 > SysTick定时器应用之一——用于延时函数

SysTick定时器应用之一——用于延时函数

最新推荐文章于 2024-09-23 22:32:02 发布

野猪力量 于 2018-09-01 11:25:31 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

SysTick为简单的向下计数的24位计时器,可以使用处理器时钟或外部参考时钟(通常是片上时钟源)。当不使用OS时,SysTick定时器可以用作简单的定时器外设,用以产生周期性中断、延时或者时间测量。

用于延时函数的话比较简单,SysTick定时器操作存在4个寄存器

SysTick->CTRL

SysTick->LOAD

SysTick->VAL

其中SysTick->CALIB  校准值寄存器,为软件提供了校准信息。CMSIS1.2后就不用这个寄存器了。于是查了一下CMSIS的版本号,位于core_cm4.h中。

因此主要就关注3个寄存器

SysTick->CTRL

SysTick->LOAD

SysTick->VAL

首先看delay_init函数

void delay_init(u8 SYSCLK)

{

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

fac_us=SYSCLK/8;

fac_ms=(u16)fac_us*1000;

}

 第一个函数SysTick_CLKSourceConfig

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)

{

assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));

if (SysTick_CLKSource == SysTick_CLKSource_HCLK)

{

SysTick->CTRL |= SysTick_CLKSource_HCLK;

}

else

{

SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;

}

}

 就是配置SysTick->CTRL寄存器

#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB)

可见SysTick->CTRL寄存器第2位置0,即使用外部参考时钟。

delay_init(168);  //初始化延时函数

则fac_us == 168 / 8== 21,即1us内要有21个节拍,

    fac_ms ==168 / 8 * 1000 ==21000,即1ms内要有21000个节拍

再看delay_us函数

void delay_us(u32 nus)

{

u32 temp;

SysTick->LOAD=nus*fac_us;

SysTick->VAL=0x00;

SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;

do

{

temp=SysTick->CTRL;

}while((temp&0x01)&&!(temp&(1<<16)));

SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;

SysTick->VAL =0X00;

}

 delay_xms函数

void delay_xms(u16 nms)

{

u32 temp;

SysTick->LOAD=(u32)nms*fac_ms;

SysTick->VAL =0x00;

SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;

do

{

temp=SysTick->CTRL;

}while((temp&0x01)&&!(temp&(1<<16)));

SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;

SysTick->VAL =0X00;

}

 delay_ms函数

void delay_ms(u16 nms)

{

u8 repeat=nms/540;

u16 remain=nms%540;

while(repeat)

{

delay_xms(540);

repeat--;

}

if(remain)delay_xms(remain);

}

 还是比较简单的(结合昨天看的位操作)。

这几个函数也就构成了正点原子写的delay.c的内容~再次感谢正点原子的代码和书~

相关知识

linux几种定时函数的使用
基于51单片机自动定时浇花程序
自动浇花定时器的时间设置
【毕业设计】基于STM32和WiFi模块的智能植物养护系统设计
毕设
土壤湿度检测模块51单片机程序原理图与说明书(4线制)
农业智能灌溉定时器自动化原理
反正弦函数y=arcsinx.DOC
单片机——自动浇花系统
单片机毕业设计

网址: SysTick定时器应用之一——用于延时函数 https://m.huajiangbk.com/newsview487019.html

所属分类:花卉
上一篇: 爱木盆景 I 看完这些,你会发现
下一篇: 解决易语言编程乱码的问题