你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030K6 4路PWM只有1路正常,其它3路没PWM波形,一直是低电...

[复制链接]
huangjiayin 提问时间:2014-11-29 10:07 /
(一) 先贴出能工作的PWM初始化程序,如下
void TIM14_Init()
{        
        RCC->AHBENR|=1<<17;                   //使能PORTA时钟   
        GPIOA->MODER   = 0X68AAA6F5 ;     //PA4/TIM14-CH1复用功能输出
        GPIOA->OTYPER  = 0X00000000;  
        GPIOA->OSPEEDR = 0X00000000;  
        GPIOA->PUPDR   = 0X25000000;  
        GPIOA->AFR[0] &=0XFFF0FFFF;;       //清除PA4原来的设置
        GPIOA->AFR[0] |=1<<18;                 //设置PA4为AF4

        RCC->APB1ENR|=1<<8;                  //TIM14时钟使能
        TIM14->PSC=0;                               //预分频器1分频
        TIM14->ARR=240;                          //设置频率(200K)
        TIM14->CCR1 =72;                         //设置占空比   
        TIM14->EGR |= 1;                           //产生一次更新事件  
        TIM14->CCMR1|=6<<4;                 //CH1 PWM1模式  
        TIM14->CCMR1|=1<<3;                 //CH1预装载使能   
        TIM14->CCER|=1<<0;                   //OC1输出使?高电平有效有效  
        TIM14->CR1=0x0080;                    //ARPE使能
       TIM14->CR1|=0x01;                        //使能定时器14
}


(二) 不能工作的第1路PWM(TIMI-CH1/PA8)初始化程序,如下
void TIM1_Init()
{   
       RCC->AHBENR|=1<<17;                //使能PORTA时钟
     
      GPIOA->MODER   = 0X68AAA6F5 ;
      GPIOA->OTYPER  = 0X00000000;  
      GPIOA->OSPEEDR = 0X00000000;  
      GPIOA->PUPDR   = 0X25000000;  
      GPIOA->AFR[0] &=0XFFFFF0FF;;      //清除PA8原来的设置
      GPIOA->AFR[0] |=1<<9;                  //设置PA8为AF2

      RCC->APB2ENR|=1<<11;               //TIM1时钟使能
     TIM1->PSC=47;                               //预分频器48分频
     TIM1->ARR=1000;                           //设置频率
     TIM1->CCR1 =500;                          //设置占空比   
     TIM1->CCMR1|=7<<4;                    //CH1 PWM2模式  
     TIM1->CCMR1|=1<<3;                     //CH1预装载使能   
     TIM1->CCER|=1<<0;                       //OC1输出使能   
     TIM1->CR1|=1<<7;                         //ARPE使能
     TIM1->EGR |= 1;                              //产生一次更新事件
     TIM1->CR1|=0x01;                          //使能定时器1
     TIM1->BDTR |=1<<15;
}


(三) 不能工作的第2路PWM(TIM3-CH1/PB4)初始化程序,如下
void TIM3_Init()
{   
        RCC->APB1ENR|=1<<1;                   //TIM3时钟使能
        RCC->AHBENR|=1<<18;                   //使能PORTB时钟
        GPIOB->MODER   = 0X55551655;     //PB4复用功能输出   
        GPIOB->OTYPER  = 0X00000000;     //推挽输出
        GPIOB->OSPEEDR = 0X00000000;    //低速
        GPIOB->PUPDR   = 0X00004000;      //除了PB7带上拉,其它脚则无上拉/下拉

         GPIOB->AFR[0] &=0XFFFFFF0F;        //清除PB4原来的设置
         GPIOB->AFR[0] |=1<<4;                  //设置PB4为AF1

         TIM3->PSC=47;                               //预分频器48分频
         TIM3->ARR=1000;                          //设置频率
         TIM3->EGR |= 1;                             //产生一次更新事件
         TIM3->CCR1 =500;                         //设置占空比

         TIM3->CCMR1|=7<<4;                   //CH1 PWM2模式  
         TIM3->CCMR1|=1<<3;                   //CH1预装载使能   
         TIM3->CCER|=1<<0;                     //OC1输出使能,高电平有效   
      
          TIM3->CR1|=1<<7;                     //ARPE使能
          TIM3->CR1|=0x01;                      //使能定时器3
   }

(三) 不能工作的第3路PWM(TIM16-CH1/PA6)初始化程序,如下
void TIM16_Init()
{            
        RCC->AHBENR|=1<<17;                   //使能PORTA时钟
        GPIOA->MODER   = 0X68AAA6F5 ;     //PA6复用功能输出
        GPIOA->OTYPER  = 0X00000000;  
        GPIOA->OSPEEDR = 0X00000000;  
        GPIOA->PUPDR   = 0X25000000;
      
        GPIOA->AFR[0] &=0XFF0FFFFF;;       //清除PA6原来的设置
        GPIOA->AFR[0] |=1<<20;                //设置PA6为AF5
        GPIOA->AFR[0] |=1<<22;

        RCC->APB2ENR|=1<<17;               //TIM16时钟使能
        TIM16->PSC=47;                             //预分频器48分频
        TIM16->ARR=1000;                        //设置频率
        TIM16->CCR1 =170;                       //设置占空比   
        TIM16->EGR |= 1;                           //产生一次更新事件  
        TIM16->CCMR1|=6<<4;                 //CH1 PWM1模式  
         TIM16->CCMR1|=1<<3;                //CH1预装载使能   
         TIM16->CCER|=1<<0;                   //OC1输出使能   
         TIM16->CR1=0x0080;                   //ARPE使能
         TIM16->CR1|=0x01;                      //使能定时器16

}
PCLK=HCLK=48MHZ.
查了很久,上面4路PWM设置内容几乎一样的,为何只有1路能功作,而其他3路则一直是低电平,没PWM波形输出,难道还有别的开关控制?


收藏 评论1 发布时间:2014-11-29 10:07

举报

1个回答
zlutian 回答时间:2014-12-2 18:51:33
看楼主的程序头晕啊, 初学还是用库吧,按DISCOVERY的例程操作下就可以了。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版