打印

关于TIM3中的TIM_OCMode_Toggle模式

[复制链接]
1147|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
丑帅丑帅的|  楼主 | 2020-4-21 17:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我的初始化,我看资料都是写的当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功能,这里使用的是通用定时器所以不需要这条语句
        
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

741

主题

742

帖子

0

粉丝