这是我的初始化,我看资料都是写的当CNT》CCR时就会翻转,这样子的话TIM_OCMode_Toggle的频率是怎么设定的?
我这样初始化的话 频率刚好是:36M/72/72 = 69.944K
但是这个和CCR没有关系了,很奇怪
void init_tim3()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//TIM3是挂接在APB1时钟上的
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用开漏输出
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//PA6
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//翻转速度=10MHZ
GPIO_Init(GPIOA, &GPIO_InitStructure);//TIM3通道1IO口
TIM_DeInit(TIM3);
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;//目前TIM3的时钟是36m
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向下计数
TIM_TimeBaseInitStruct.TIM_Period=72-1; //这个是预装载值arr ,也就是定时时间,一个时钟0.5us,向下计数值200就是定时0.1ms=10k
TIM_TimeBaseInitStruct.TIM_Prescaler=72-1;//36m的时钟72分频=0.5mhz,这个就是psc
//TIM_TimeBaseInitStruct.TIM_RepetitionCounter=//这个选项是高级定时器才会用到
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);//输出频率=定时器溢出周期的倒数
//TIM_OCInitStruct.TIM_OCIdleState=//高级定时器才需要配置这个选项
//TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//pwm模式1输出
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_Toggle;//TIM_OCMode_Toggle输出
//TIM_OCInitStruct.TIM_OCNIdleState=//高级定时器才需要配置这个选项
//TIM_OCInitStruct.TIM_OCNPolarity=//高级定时器才需要配置这个选项
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//高电平有效
//TIM_OCInitStruct.TIM_OutputNState=//高级定时器才需要配置这个选项
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//使能比较输出
TIM_OCInitStruct.TIM_Pulse=30;//这个是ccr,占空比=ccr/arr,不过理论值和实际结果好像对不上
TIM_OC1Init(TIM3,&TIM_OCInitStruct);//TIM3的通道1-PA6
/*
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//pwm模式1输出
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//高电平有效
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//使能比较输出
TIM_OCInitStruct.TIM_Pulse=50;//初始化占空比,高电平有效情况下,低电平的占空比
TIM_OC2Init(TIM3,&TIM_OCInitStruct);//TIM3的通道2-PA7
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//pwm模式1输出
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//高电平有效
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//使能比较输出
TIM_OCInitStruct.TIM_Pulse=25;//初始化占空比,高电平有效情况下,低电平的占空比
TIM_OC3Init(TIM3,&TIM_OCInitStruct);//TIM3的通道3-PB0
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//pwm模式1输出
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//高电平有效
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//使能比较输出
TIM_OCInitStruct.TIM_Pulse=10;//初始化占空比,高电平有效情况下,低电平的占空比
TIM_OC4Init(TIM3,&TIM_OCInitStruct);//TIM3的通道4-PB1
*/
/* 定时器比较输出通道1预装载配置:使能预装载 */
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable);
//clear the TIM3 overflow interrupt flag
TIM_ClearFlag(TIM3,TIM_FLAG_Update);
//TIM3 overflow interrupt enable
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
//enable TIM3
TIM_Cmd(TIM3,ENABLE);
//TIM_CtrlPWMOutputs(TIM1, ENABLE); //如果是使用高级定时器一定要使能pwm功能,这里使用的是通用定时器所以不需要这条语句
} |