如何用STM32实现定时功能并报警(附代码加原理讲解,亲测)

Posted CSINhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用STM32实现定时功能并报警(附代码加原理讲解,亲测)相关的知识,希望对你有一定的参考价值。

我是通过stm32里边的定时器来实现定时一段时间,比如说倒计时多长时间,很多人会考虑用delay函数,但delay的话程序无法执行其他语句,会一直处在delay()函数内,这样便会影响其他语句执行。

话不多说上代码:

#include "timer.h"
#include "stm32f10x.h"

#include "delay.h"

void TIM6_Int_Init(u16 arr,u16 psc)
  
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct3;
	NVIC_InitTypeDef  NVIC_InitStruct;
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
	
	
	TIM_TimeBaseInitStruct3.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStruct3.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInitStruct3.TIM_Period=arr;
	TIM_TimeBaseInitStruct3.TIM_Prescaler=psc;
	TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
	NVIC_InitStruct.NVIC_IRQChannel=TIM6_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStruct);
	TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitStruct3);
	TIM_Cmd(TIM6,ENABLE);

以上这是初始化定时器6的相关代码,不要忘记在.h文件内声明一下。如下所示:

#ifndef __TIMER_H
#define __TIMER_H
#include "sys.h"

void TIM6_Int_Init(u16 arr,u16 psc);


#endif

然后再主函数内,进行定时器6的初始化过程,将相关参数带入,假如我们要设定10秒钟定时,那么我们将定时器6初始化的两个参数arr和psc分别设定为4999和7199,设定这两个值得含义是定时500毫秒中断一次,我们要想定时10秒需要执行20次这个500毫秒的中断。所以我们索性设定一个变量为value,然后将value变为自己的2倍,拿10秒为例,就是value=20;拿20秒为例,value=40;相关代码如下所示:

#include "timer.h"
......

u8 velue ;
int main()

velue=10;
velue+=velue;
TIM6_Int_Init(4999,7199);	

那么在定时器中断函数内执行的代码如下所示:

	void TIM6_IRQHandler(void)

		static u8 record8 =0;
	if(TIM_GetITStatus(TIM6,TIM_IT_Update)!=RESET)
	
		record8++;
		if(record8>velue)
		record8=0;
		GPIO_SetBits(GPIOB,GPIO_Pin_8);
	delay_ms(1000);			
			GPIO_ResetBits(GPIOB,GPIO_Pin_8);
			TIM_Cmd(TIM6,DISABLE);
		
	
		TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
	

	

这个PB8是设定的蜂鸣器接口,就是实现的功能就是设定倒计时10秒中,蜂鸣器响1秒,这样就实现了定时器定时功能,并且不会影响程序执行其他的。

如不懂或想要压缩包评论区留下邮箱,或加我QQ留言,QQ24小时在线,我都会回复大家,除非博主睡着了。另外每天中午和晚上我会私发给大家。

以上是关于如何用STM32实现定时功能并报警(附代码加原理讲解,亲测)的主要内容,如果未能解决你的问题,请参考以下文章

如何用STM32实现定时功能并报警(附代码加原理讲解,亲测)

如何用STM32实现定时功能并报警(附代码加原理讲解,亲测)

如何用stm32检测温度

如何用STM32产生三相PWM用于控制三相直流无刷电机?

如何用stm32检测温度

如何用stm32的定时器产生一路pwm输出,周期为500hz,占空比0%~100%可调,完整c语言程序。