OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7055|回复: 8

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

[复制链接]

9

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2014-9-29
在线时间
3 小时
发表于 2014-11-29 09:55:42 | 显示全部楼层 |阅读模式
5金钱
(一) 先贴出能工作的PWM初始化程序,如下
void TIM14_Init()
{        
        RCC->AHBENR|=1<<17;                   //使能PORTA时钟   
        GPIOA->MODER   = 0X68AAA6F5 ;     //PA4/TIM14-CH1复用功能输出
        GPIOA->OTYPER  = 0X00000000; 
        GPIOA->OSPEEDR = 0X00000000; 
        GPIOA->UPDR   = 0X25000000;  
        GPIOA->AFR[0] &=0XFFF0FFFF;;       //清除PA4原来的设置
        GPIOA->AFR[0] |=1<<18;                 //设置PA4为AF4
 
        RCC->APB1ENR|=1<<8;                  //TIM14时钟使能
        TIM14->SC=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->UPDR   = 0X25000000;  
      GPIOA->AFR[0] &=0XFFFFF0FF;;      //清除PA8原来的设置
      GPIOA->AFR[0] |=1<<9;                  //设置PA8为AF2
 
      RCC->APB2ENR|=1<<11;               //TIM1时钟使能
     TIM1->SC=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->UPDR   = 0X00004000;      //除了PB7带上拉,其它脚则无上拉/下拉
 
         GPIOB->AFR[0] &=0XFFFFFF0F;        //清除PB4原来的设置
         GPIOB->AFR[0] |=1<<4;                  //设置PB4为AF1
 
         TIM3->SC=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->UPDR   = 0X25000000;
     
        GPIOA->AFR[0] &=0XFF0FFFFF;;       //清除PA6原来的设置
        GPIOA->AFR[0] |=1<<20;                //设置PA6为AF5
        GPIOA->AFR[0] |=1<<22;
 
        RCC->APB2ENR|=1<<17;               //TIM16时钟使能
        TIM16->SC=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

}


 
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2014-9-29
在线时间
3 小时
 楼主| 发表于 2014-11-29 09:58:46 | 显示全部楼层
PCLK=HCLK=48MHZ.
查了很久,上面4路PWM设置内容几乎一样的,为何只有1路能功作,而其他3路则一直是低电平,没PWM波形输出,难道还有别的开关控制?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2014-11-30 00:00:26 | 显示全部楼层
帮顶....
回复

使用道具 举报

32

主题

153

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
453
金钱
453
注册时间
2014-11-5
在线时间
0 小时
发表于 2014-11-30 02:40:50 | 显示全部楼层
重映射问题?看看参考手册,你输出PWM波的引脚是不是被其他的外设占用了?JTAG仿真默认占用了很多引脚
酱油团队--
回复

使用道具 举报

9

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2014-9-29
在线时间
3 小时
 楼主| 发表于 2014-12-1 09:27:56 | 显示全部楼层
多谢xiaolong12 的回复,我可以设置PB4/TIM3-CH1脚的电平高低,输出正常啊。可要设置为PWM功能,就是不正常.STM32F030系列参考手册没有提到JTAG 默认占用了很多引脚(只提到SWD方式中的PA13,PA14).数据手册只说:
1.PB4(复位时)
2.SPI1_MISO/TIM3_CH1/EVENTOUT(Alternate functions时)
回复

使用道具 举报

9

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2014-9-29
在线时间
3 小时
 楼主| 发表于 2014-12-1 10:17:53 | 显示全部楼层
xiaolong12,STM32F030K6只有SWD方式没有JTAG方式
回复

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2015-10-4
在线时间
35 小时
发表于 2016-8-11 15:49:59 | 显示全部楼层
学习学习!
回复

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2015-10-4
在线时间
35 小时
发表于 2016-8-11 17:58:38 | 显示全部楼层
学习学习!
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-8-6
在线时间
0 小时
发表于 2017-8-7 10:45:33 | 显示全部楼层
代理兆易创新(GD)32-bit ARM架构,Cortex-M3、M4内核MCU,可提供技术支持等服务;
GD32F130系列 M3内核与STM32F030/051系列,硬件pin to pin兼容;烧录器、寄存器、开发环境完全兼容;
欢迎来电咨询探讨,邱先生 电话:136 8955 5135;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-20 09:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表