第十一届蓝桥杯嵌入式组别底层驱动程序⑤(定时器)

第十一届蓝桥杯嵌入式组别底层驱动程序⑤(定时器)

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

void TIM4_Init(uint16_t period, uint16_t prescaler)
{
	NVIC_InitTypeDef NVIC_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);	//定时器TIM4时钟使能
	
	NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;			//中断的入口地址的TIM4_IRQn
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占式优先级别0
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;		//优先级,最高级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	TIM_TimeBaseStructure.TIM_Period = period-1;//总的值设置为0xFFFF,时间周期,定时时间
	TIM_TimeBaseStructure.TIM_Prescaler = prescaler-1;		//分频值
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	//向上计数
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
	
	TIM_Cmd(TIM4, ENABLE);//开启定时器
	TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);//开启定时器更新中断
}




主函数初始化调用:

TIM4_Init(2000, 72);//定时2ms

#ifndef _TIMER_H
#define _TIMER_H

void TIM4_Init(uint16_t period, uint16_t prescaler);

#endif

void TIM4_IRQHandler(void)
{
	static uint16_t timer_200ms = 0;
	static uint16_t timer_500ms = 0;
	static uint16_t timer_1s = 0;
	
	if(TIM_GetITStatus(TIM4, TIM_IT_Update) == SET) 
	{
		TIM_ClearITPendingBit(TIM4, TIM_IT_Update);///进来先清零。清除TIM4的中断待处理位
		KeyScan();
		BeepScan(2);
		
		timer_200ms ++;
		tmr500ms++;
		timer_1s ++;
		
		if(timer_200ms >= 100) 
		{
			timer_200ms = 0;
		}
		if(timer_500ms >= 250)//500ms定时
		{
			timer_500ms = 0;
		}
		if(timer_1s >= 500)
		{
			timer_1s = 0;
		}
	}
}


注释:之所以用TIM4,没有什么特殊含义,用别的也可以的

TIMx主要功能通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:
● 16位向上、向下、向上/向下自动装载计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
● 4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出
● 使用外部信号控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA: ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ─ 输入捕获 ─ 输出比较
● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理
摘自:(https://blog.csdn.net/zhufuronglovewenzhen/article/details/17100037)

你可能感兴趣的:(#,嵌入式)