STM32设置内核定时器延时us

记录

1.查找系统嘀嗒定时器,根据
《STM32F4xx-Cortex_-M4内核参考手册.pdf》来查看寄存器,
并结合core_cm4.h。
在这里插入图片描述
系统定时器的时钟源=21Hz,完成21000000次计数的时候,就代表说1秒时间的到达。
21000000/1000000=21,也代表说只要完成21次计数就是1微秒的时间。SysTick->LOAD决定了延时的时间。

STTM32F407为例,用寄存器写延时函数:
需要注意的是把STM32f4xx.h文件中的HSE修改为8000000,参数因子PLL_M修改为8
在这里插入图片描述
时钟源来源于21 Hz
最大延时时间= 2*24 1 -21000000= 798.91ms.
时钟源来源于168 Hz
最大延时时间= 2^24 -168000000= 99.86ms.

如果要实现5000ms延时的话,可以对上面进行改造,500ms的整数倍延时都可以
void delay_us(uint32_t nus)
{
    
    
   int m=0,n=0;
   m = nus/500;
   n = nus%500;
   while(m--)
   {
    
    
		SysTick->LOAD = (168000000/8/1000000)*500;//执行10次500us=5s
		SysTick->CTRL |= 1;
		while(SysTick->CTRL &(1<<16)==0)//判断定时器标志位是否达到
		SysTick->CTRL &= ~1;//使能定时器
	}
	if(n)
	{
    
    
		SysTick->LOAD = (168000000/8/1000000)*n;//执行10次500us=5s
		SysTick->CTRL |= 1;
		while(SysTick->CTRL &(1<<16)==0)//判断定时器标志位是否达到
		SysTick->CTRL &= ~1;//使能定时器
	}

}

如果固定使用168000000的系统时钟,可以用SystemCoreClock来代替168000000.

猜你喜欢

转载自blog.csdn.net/ABCisCOOL/article/details/115006604