STM32f103程序模块4-------通用定时器
void Time_Init(void) //RTC时钟初始化
{
TIM2_Config(); //定时器2初始化
TIM3_Config();//定时器3初始化
TIM4_Config(); //定时器4初始化
}
/***************************************************************************/
//*******函数名:TIM2_IRQHandler()
//*******说 明: 定时器2中断服务函数10ms
//*******参 数:
//*******返回值:
/***************************************************************************/
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET) //当前10ms定时,溢出中断
{
……
}
TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中断标志位
}
/***************************************************************************/
//*******函数名:TIM4_IRQHandler()
//*******说 明: 定时器4中断服务函数1ms
//*******参 数:
//*******返回值:
/***************************************************************************/
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //溢出中断
{
……
}
TIM_ClearITPendingBit(TIM4,TIM_IT_Update); //清除中断标志位
}
/***************************************************************************/
//*******函数名:TIM3_IRQHandler()
//*******说 明: 定时器3中断服务函数10ms(DTU使用)
//*******参 数:
//*******返回值:
/***************************************************************************/
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)//溢出中断
{
……
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
/////////////////////////////定时器3中断服务函数结束/////////////////////
/***********************************************************************/
//*******函数名:TIM1_Config(void)
//*******用途:定时器1ms中断配置
//*******说明:
//*******参数:无
//*******返回值:无
/***********************************************************************/
void TIM3_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能Timer3时钟
TIM_TimeBaseStructure.TIM_Period = 99; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值(计数到100为10ms)
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //设置用来作为TIMx时钟频率除数的预分频值(10KHz的计数频率)
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = TIM_CKD_DIV1
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
/*中断优先级NVIC设置*/
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1; //先占优先级1级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级1级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能IRQ通道
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE ); //使能TIM3指定的中断
TIM_Cmd(TIM3, ENABLE); //使能TIMx外设
}
/***************************************************************************/
//*******函数名:TIM2_Config()
//*******说 明: 定时器2初始化,10ms
//*******参 数:
//*******返回值:
/***************************************************************************/
void TIM2_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能Timer2时钟
TIM_TimeBaseStructure.TIM_Period = 99; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值(计数到100为10ms)
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //设置用来作为TIMx时钟频率除数的预分频值(10KHz的计数频率)
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = TIM_CKD_DIV1
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
/*中断优先级NVIC设置*/
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1; //先占优先级1级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //从优先级1级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能IRQ通道
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE ); //使能TIM2指定的中断
TIM_Cmd(TIM2, ENABLE); //使能TIMx外设
}
/***************************************************************************/
//*******函数名:TIM4_Config()
//*******说 明: 定时器4初始化,1ms
//*******参 数:
//*******返回值:
/***************************************************************************/
void TIM4_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能Timer4时钟
//TIM_TimeBaseStructure.TIM_Period = 9999; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值(计数到10000为1s)
TIM_TimeBaseStructure.TIM_Period = 9; //1ms
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //设置用来作为TIMx时钟频率除数的预分频值(10KHz的计数频率)
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = TIM_CKD_DIV1
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
/*中断优先级NVIC设置*/
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM4中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0; //先占优先级1级
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //从优先级4级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能IRQ通道
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE ); //使能TIM4指定的中断
TIM_Cmd(TIM4, ENABLE); //使能TIMx外设
}