• STM32 TIM3 PWM输出 4路


    一、设置TIM3的GPIO为推挽输出

    void TIM3_IOConfig(void)
    {
            GPIO_InitTypeDef  GPIO_InitStructure;
      
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
    
            //这里TIM3的通道1是GPIOA_Pin_6,通道2是GPIOA_Pin_7;通道3是GPIOB_Pin_0;
            //这里TIM3的通道4是GPIOB_Pin_1;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
            //使用PWM的功能需要设置成AF_PP模式
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
            GPIO_Init(GPIOA,&GPIO_InitStructure);
            
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
            GPIO_Init(GPIOB,&GPIO_InitStructure);
    }

    二、设置TIM3的PWM1方式4路输出

    //arr:自动重装值 psc:时钟预分频数
    //定时器溢出时间计算:Tout=((arr+1)*(psc+1))/Ft   
    void TIM3_PWM_Init(void)
    {
            TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;//TIM定时器的配置
            TIM_OCInitTypeDef        TIM_OCInitStructure;//TIMPWM的
            
            RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
            //使能TIM3的时钟线;
            
            //复位定时器
            TIM_DeInit(TIM3);
        
            //TIM_Prescaler:72,TIM_Period:20000周期为20ms
            TIM_TimeBaseInitStructure.TIM_Prescaler = 72-1;                        //定时器周期
            TIM_TimeBaseInitStructure.TIM_Period = 20000-1;                        //定时器更新的重装载值0-65535
            TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
            TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
            TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);            //初始化TIM3      
            
            TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
            TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
            TIM_OCInitStructure.TIM_Pulse = 1000;                                //预设值
            TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    
            
            TIM_OC1Init(TIM3,&TIM_OCInitStructure);
            TIM_OC2Init(TIM3,&TIM_OCInitStructure);
            TIM_OC3Init(TIM3,&TIM_OCInitStructure);
            TIM_OC4Init(TIM3,&TIM_OCInitStructure);
    
            TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
            TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
            TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);
            TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
          
            TIM_CtrlPWMOutputs(TIM3, ENABLE);
    //        TIM_ITConfig(TIM3,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);
            //使能标志位CC1,CC2,CC3,CC4
            TIM_Cmd(TIM3,ENABLE);
            //使能TIM;
    }

    上面的TIM周期是20ms

    三、修改PWM的方法

    void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
    void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
    void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
    void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);
  • 相关阅读:
    VMware Workstation 14 Pro永久激活密钥
    maven属性、profile、资源过滤、不同环境构建项目
    控制返回前台字段
    jsonp 返回以前必须要再转一次json
    doPost方法不支持 a 标签和地址栏直接输入地址访问
    设置响应头控制浏览器的缓存
    获取请求头、设置响应头、设置缓冲区
    重定向与错误发送
    文件下载
    web 应用响应乱码问题
  • 原文地址:https://www.cnblogs.com/ch122633/p/9559487.html
Copyright © 2020-2023  润新知