学习STM32系列芯片已经有一段时间了,从今天起会把STM32的学习笔记发到博客上。
最开始用STM32控制LED闪烁时用的是for循环延时,后来看到网上有用SysTick延时的,精确而且方便,试了一下确实不错!
首先对SysTick初始化:
void SysTick_Config(void)
{
/* Disable SysTick Counter */
SysTick_CounterCmd(SysTick_Counter_Disable); //失能计数器
/* Disable the SysTick Interrupt */
SysTick_ITConfig(DISABLE); //关闭中断
/* Configure HCLK clock as SysTick clock source */
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //8分频
/* SysTick interrupt each 1000 Hz with HCLK equal to 72MHz */
SysTick_SetReload(9000); //周期1ms
/* Enable the SysTick Interrupt */
SysTick_ITConfig(ENABLE); //打开中断
/* Enable the SysTick Counter */
// SysTick_CounterCmd(SysTick_Counter_Enable); //使能计数器
}
然后写一个延时的函数:
void Delay(u32 nTime)
{
/* Enable the SysTick Counter */
SysTick_CounterCmd(SysTick_Counter_Enable);
TimingDelay = nTime;
while(TimingDelay != 0);
/* Disable SysTick Counter */
SysTick_CounterCmd(SysTick_Counter_Disable);
/* Clear SysTick Counter */
SysTick_CounterCmd(SysTick_Counter_Clear);
}
在stm32f10x_it.c中找到void SysTickHandler(void)
写成
void SysTickHandler(void)
{
TimingDelay_Decrement();
}
回到main.c加入中断调用函数:
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
这样就OK了!
使用时 Delay(1000); 就是延时1S。
文章评论(0条评论)
登录后参与讨论