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 看完这些,你会发现... | 下一篇: 解决易语言编程乱码的问题 |



