STM32延时不同写法

对于STM32系列的延时函数有着不同的写法,本章将给大家带来最简单的延时到最精准延时函数的各种写法及原理。
在STM32系列中要学会用好systick定时器,这很重要

一.普通延时函数

原理
用C中累加或者累减的方法,到一定条件后就退出。
好处
好写,用for循环或者while循环,不用去理解各种有关底层硬件的寄存器。
坏处
延时不精准,误差大,让CPU持续空跑,大大浪费CPU资源。

void delay(uint16 i)
{
	#if 0
	while(i--)
	{}
	#endif
	for(int j=0;j<i;j++)
	{}
}

二.定时器计数

在32中,使用定时器的地方很多,所以对于32中各种稀缺的外设资源极其珍贵,用好各种外设对于小白来说是关键的一步。
原理
采用C中累加原理,选定某一定时器,通过计数器来产生中断。
好处
可达到精准延时,但会使CPU在定时器中持续累加或累减,占用CPU资源。

这里随便举的一个例子

void TIM4_Init(u16 ar,u16 rs)
{
	TIM_TimeBaseInitTypeDef TIM_InitStrue;
	NVIC_InitTypeDef NVIC_InitStrue;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能定时器时钟
	
	TIM_InitStrue.TIM_Period=ar;//自动装载值
	TIM_InitStrue.TIM_Prescaler=rs;//预分频系数的设置
	TIM_InitStrue.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_InitStrue.TIM_ClockDivision=TIM_CKD_DIV1;//设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseInit(TIM4,&TIM_InitStrue);//初始化定时器,对定时器进行配置
	
	TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);//开启定时器中断
	
	NVIC_InitStrue.NVIC_IRQChannel=TIM4_IRQn;
	NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStrue.NVIC_IRQChannelSubPriority=2;
	NVIC_Init(&NVIC_InitStrue);//初始化中断,设置中断的优先级

	TIM_Cmd(TIM4,ENABLE);//使能定时器
}

void TIM4_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM4,TIM_IT_Update)!=RESET)
	{
		LED1=!LED1;
		TIM_ClearITPendingBit(TIM4,TIM_IT_Update);//清除中断标志位
	}
}	

三、Systick定时器

关于滴答定时器,我的理解为可以替代所有的定时器中有关涉及到时间的问题配置,可以让定时器更好的配合其他功能使用,而定时器中的计数器寄存器可以用于PID之类,更好的控制精度。

在此处介绍两种有关Systcik定时器的使用方法

(1).同样运用CPU持续在滴答定时器进行计数

void delay_us(
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32是一款基于ARM Cortex-M内核的微控制器系列,它的延时方法有多种。下面我将介绍其中两种常用的延时方法。 1. 使用SysTick定时器延时方法: SysTick定时器是STM32内置的一个系统定时器,可以用于延时操作。首先,需要初始化SysTick定时器,设定一个合适的计数器值,使其工作在一定的计数频率下。然后,在需要延时的地方,通过不断读取SysTick计数器的数值,并判断是否达到了设定的延时时间。当计数器达到目标值时,延时结束,程序继续执行。 2. 使用硬件定时器延时方法: STM32系列微控制器内置了多个硬件定时器,如TIM2、TIM3等。通过配置硬件定时器的计数值、时钟源和预分频器等参数,可以实现精确的延时控制。首先,需要初始化合适的硬件定时器,并设定计数值和预分频器等参数。然后,在需要延时的地方,启动定时器,并等待定时器溢出,即表明已经延时完成。之后,可以根据需求决定是否关闭定时器。 需要注意的是,以上两种方法的延时时间是相对较准确的,但都属于粗略延时,不适用于较高精度的延时要求。如果对延时要求较高,可以考虑使用外部晶振或RTC模块结合编程的方式实现高精度的延时操作。 以上是两种常用的STM32延时方法的简要介绍,具体的实现和使用细节需要根据具体的开发环境和需求进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值