您现在的位置: 主页 > MCU > 单片机技术应用 > stm32f4使用Systick实现延时 -
本文所属标签:
为本文创立个标签吧:

stm32f4使用Systick实现延时 -

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

[导读]
使用Systick定时器实现延时一、SysTick定时器特性SysTick定时器是一个24位的递减计数器,即vlue自减等于0时触发中断,并重新加载load值,如此循环。在stm32f4库文件中,默认将优先级设置为最低优先级,

使用Systick定时器实现延时

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


一、SysTick定时器特性


SysTick定时器是一个24位的递减计数器,即vlue自减等于0时触发中断,并重新加载load值,如此循环。

stm32f4库文件中,默认将优先级设置为最低优先级,可进入函数SysTick_Config查看优先级设置。

SysTick是Cortex-M内核的一部分,因此只要是Cortex-M内核都有该定时器。

SysTick的时钟源可由HCLK产生,或则HCLK/8产生。

二、如何使用SysTick定时器


既然是定时器,那么至少应该设置2方面内容:

1. 定时时间

2. 定时时间到后做什么。


三、程序解析


1. SysTick定时器初始化


在SysTick定时器初始化需要注意SysTick时钟的选择,如果使用8分频一定要在SysTick_Config执行后,才执行时钟函数SysTick_CLKSourceConfig,否则时钟分频无效。


static void SysTickInit(void)

{

#ifdef SysTick_HCLK_Div8 /* SysTick时钟源为HCLK的8分频 */

/* SystemCoreClock/1000/8 1ms

* SystemCoreClock/100000/8 10us

* SystemCoreClock/1000000/8 1us

*/

SysTick_Config(SystemCoreClock/1000/8);

/* 时钟配置必须放在SysTick_Config函数后,不然不起作用 */

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

#else

/****************************************

*SystemCoreClock/1000 1ms *

*SystemCoreClock/100000 10us *

*SystemCoreClock/1000000 1us *

*****************************************/

SysTick_Config(SystemCoreClock / 1000);

/* 时钟配置必须放在SysTick_Config函数后,不然不起作用 */

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);/* 系统默认SysTick时钟源,可以不写 */

#endif

}

2.SysTick中断函数和延时函数


static volatile uint32_t TimingDelay;

/* 延时函数 */

void Delay_Ms(uint32_t nTime)

{

TimingDelay = nTime;

while(TimingDelay != 0);

}


/* SysTick中断函数 */

void SysTick_Func(void)

{

TimingDelay--;

}




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > stm32f4使用Systick实现延时 -
 

"stm32f4使用Systick实现延时 -"的相关文章

网站地图

围观()