STM32 TIM6&TIM7 低级定时器配置-代码干货

        基于STM32F10X系列的TIM6&TIM7  低级定时器配置。

        废话不多说,小杜贴代码!大笑

        TIM6的配置

#ifndef _TIMER_H
#define _TIMER_H

#include "stm32f10x.h"


void TIM6_Int_Init(u16 arr,u16 psc);

#endif

#include "timer.h"

/**********************************************************
** 函数名: TIM6_Int_Init
** 功能描述:  基本定时器配置
** 输入参数: 无
** 输出参数: 无
** 说明:定时时间=(预分频数+1)*(计数值+1) /TIM6时钟(72MHz),单位(s)
   这里溢出时间t=(7200*10000)/72000000s=1s
***********************************************************/
void TIM6_Int_Init(u16 arr,u16 psc)
{
	TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
	NVIC_InitTypeDef           NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); //使能TIM6时钟
	
	//定时器TIM6初始化
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);  //根据指定的参数初始化TIMx的时间基数单位
	
	//允许更新中断,触发方式中断
	TIM_ITConfig(TIM6,TIM_IT_Update, ENABLE);     //使能指定的TIM6中断,允许更新中断
//	TIM_ITConfig(TIM6,TIM_IT_Trigger,ENABLE);
	
	//中断优先级NVIC设置
	NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;  //TIM3中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);
	
	TIM_Cmd(TIM6, ENABLE);     //使能定时器6
}

/**********************************************************
** 函数名: TIM6_IRQHandler
** 功能描述: 定时器6的更新中断服务程序
** 输入参数: 无
** 输出参数: 无
***********************************************************/
void TIM6_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
	{
		TIM_ClearITPendingBit(TIM6,TIM_IT_Update);//清除更新中断标志位
	}
}

TIM7和上面同理修改就行啦!大笑

#ifndef _TIMER_H
#define _TIMER_H

#include "stm32f10x.h"


void TIM7_Int_Init(u16 arr,u16 psc);

#endif

/**********************************************************
** 函数名: TIM7_Int_Init
** 功能描述:  基本定时器配置
** 输入参数: 无
** 输出参数: 无
** 说明:定时时间=(预分频数+1)*(计数值+1) /TIM7时钟(72MHz),单位(s)
   这里溢出时间t=(7200*10000)/72000000s=1s
***********************************************************/
void TIM7_Int_Init(u16 arr,u16 psc)
{
	TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
	NVIC_InitTypeDef           NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE); //使能TIM7时钟
	
	//定时器TIM6初始化
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure);  //根据指定的参数初始化TIMx的时间基数单位
	
	//允许更新中断,触发方式中断
	TIM_ITConfig(TIM7,TIM_IT_Update, ENABLE);     //使能指定的TIM7中断,允许更新中断
//	TIM_ITConfig(TIM7,TIM_IT_Trigger,ENABLE);
	
	//中断优先级NVIC设置
	NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;  //TIM3中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;  //从优先级4级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);
	
	TIM_Cmd(TIM7, ENABLE);     //使能定时器7
}

/**********************************************************
** 函数名: TIM7_IRQHandler
** 功能描述: 定时器7的更新中断服务程序
** 输入参数: 无
** 输出参数: 无
***********************************************************/
void TIM7_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET)
	{
		TIM_ClearITPendingBit(TIM7,TIM_IT_Update);//清除更新中断标志位
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_41094315/article/details/80150141