#include “timer.h”
#include “stdio.h”
#include “led.h”
/********************************************************************************************
*函数名: TIM6_Init
*功 能: 初始化定时器6
*参 数: 无
*返 回: 无
备 注: 1.步骤:1.使能时钟 2.调用定时器初始化函数 3.允许更新中断(映射) 4.NVIC相关设置
2.RCC_AHB1时钟频率 42MHz(168/4)
3.基本定时器 (TIM6和TIM7)的特性:16 位自动重装载值递增计数器
4.举例:IM6_Int_Init(8000-1,5000-1); 定时器时钟422M,分频系数8400,所以84M/8400=10Khz的计数频率,计数5000次为500ms
********************************************************************************************/
void TIM6_Init(u16 psc, u16 arr)
{
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6 , ENABLE); //使能时钟
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //计数模式
TIM_TimeBaseInitStruct.TIM_Period = arr - 1; //自动重装载值,范围0~65535,
TIM_TimeBaseInitStruct.TIM_Prescaler = psc - 1; //分频系数,不为1时,定时器频率挂载总线的两倍(看时钟树得出),所以42000000/42000
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStruct); //初始化
TIM_Cmd(TIM6, ENABLE); //使能定时器6
TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); //允许定时器6更新中断
NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;
NVIC_EnableIRQ(TIM6_DAC_IRQn ); //使能TIM6中断
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/********************************************************************************************
*函数名: TIM6_IRQHandler
*功 能: 定时器6中断服务函数
*参 数: 无
*返 回: 无
*备 注: 1.步骤:设置当发生中断溢出才进入事件,然后清除标志位。
********************************************************************************************/
void TIM6_DAC_IRQHandler(void)//曾经的错误:void TIM6_DAC_IRQn (void),TIM6_IRQHandler
{
if(TIM_GetITStatus(TIM6,TIM_IT_Update)==SET) //溢出中断
{
printf(“进入定时器中断6\r\n”); //需放在发生中断溢出后才执行,不然会一直产生。
LED1 = !LED1;
}
TIM_ClearITPendingBit(TIM6,TIM_IT_Update); //清除中断标志位
}