void UTimer_init(void)
{
TIM_TimerInitTypeDef TIM_InitStruct;
TIM_TimerCmd(TIMER0, ENABLE); /* Timer0 模块使能 */
TIM_TimerStrutInit(&TIM_InitStruct); /* Timer结构体初始化*/
TIM_InitStruct.Timer_CH0_WorkMode = TIMER_OPMode_CMP; /* 设置Timer CH0 为比较模式 */
TIM_InitStruct.Timer_CH0_CapMode = TIMER_CapMode_None;/* 无捕获*/
TIM_InitStruct.Timer_CH0Output = 0; /* 计数器回零时,比较模式输出极性控制 */
TIM_InitStruct.Timer_CH1_WorkMode = TIMER_OPMode_CMP; /* 设置Timer CH1 为比较模式 */
TIM_InitStruct.Timer_CH1_CapMode = TIMER_CapMode_None;
TIM_InitStruct.Timer_CH1Output = 0; /* 计数器回零时,比较模式输出极性控制 */
TIM_InitStruct.Timer_TH = 48000; /* 定时器计数门限初始值1000*/
TIM_InitStruct.Timer_CMP0 = 24000; /* 设置比较模式的CH0比较初始值24000 */
TIM_InitStruct.Timer_CMP1 = 24000; /* 设置比较模式的CH1比较初始值24000 */
TIM_InitStruct.Timer_Filter0 = 0; /* 设置捕捉模式或编码器模式下对应通道的数字滤波值 */
TIM_InitStruct.Timer_Filter1 = 0; /* 设置捕捉模式或编码器模式下对应通道的数字滤波值 */
TIM_InitStruct.Timer_ClockDiv = TIM_Clk_Div2; /* 设置Timer模块时钟2分频系数 */
TIM_InitStruct.Timer_IRQEna = Timer_IRQEna_CH0 | Timer_IRQEna_CH1 | Timer_IRQEna_Zero; /* 开启Timer模块比较中断和过零中断*/
TIM_TimerInit(TIMER0, &TIM_InitStruct);
NVIC_SetPriority(TIMER0_IRQn, 0); //TIMER0中断优先级配置
NVIC_EnableIRQ(TIMER0_IRQn); //使能UTimer定时器中断
}
void UTIMER0_IRQHandler(void)
{
static int Timer_flag = 0, Timer_flag1 = 0;
if (UTIMER_IF & BIT0) //判断UTimer0是否发生过零中断
{
UTIMER_IF = BIT0; //清除UTimer中断标志位
Timer_flag++;
if (Timer_flag == 500)
{
Timer_flag = 0;
}
}
if (UTIMER_IF & BIT1) //判断UTimer0的CH0是否发生比较中断
{
UTIMER_IF = BIT1; //清除UTimer中断标志位
Timer_flag1++;
if (Timer_flag1 == 500)
{
Timer_flag1 = 0;
//Invers_GPIO(GPIO0, GPIO_Pin_7); //LED2反转
}
}
if (UTIMER_IF & BIT2) //判断UTimer0的CH1是否发生比较中断
{
UTIMER_IF = BIT2; //清除UTimer中断标志位
}
}
|
|