void TIMER_Mode2_Configuration()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE); //TIM3 完全重映射
GPIO_DeInit(GPIOC);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //输出端口:OCx映射到的引脚
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOC,&GPIO_InitStruct);
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period=2000; //ARR的值
TIM_TimeBaseStructure.TIM_Prescaler=36000-1;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Active; //强制输出模式
TIM_OCInitStructure.TIM_Channel=TIM_Channel_1; //通道1选择
TIM_OCInitStructure.TIM_Pulse=1000; //比较值即脉冲周期
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //极性高电平
TIM_OCInit(TIM3, &TIM_OCInitStructure);
TIM_ARRPreloadConfig(TIM3, ENABLE); //使能ARR预装载缓冲器
TIM_ForcedOC1Config(TIM3, TIM_ForcedAction_InActive); //TIM通道输出有效的活动电平
TIM_ITConfig(TIM3,TIM_IT_CC1,ENABLE); //允许更新产生中断
TIM_Cmd(TIM3, ENABLE); //开启时钟
}
说明:根据手册上所说的,就是让OCx输出可以由软件配置成强置输出有效和无效状态。但是比较器依然进行工作,因而通过配置可以产生中断和DMA。
例如配置输出比较模式为强制有效电平(OC1REF为高), 极性配置为高电平有效,此时输出一直输出高电平。