打印
[STM32F0]

STM32F030K6的PB4(TIM3-CH1)无法输出PWM波形,一直是低电平

[复制链接]
4697|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hopewise|  楼主 | 2014-11-26 11:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原先PB4脚在TIM3定时中断里翻转,可以测出1K的方波,现改用PWM功能,一直无法输出PWM波形
      RCC->AHBENR|=1<<18;            //使能PORTB时钟       
       
      GPIOB->MODER   = 0X55551655;   //PB4复用功能输出        
      GPIOB->OTYPER  = 0X00000000;   //推挽输出
      GPIOB->OSPEEDR = 0X00000000;   //低速
      GPIOB->PUPDR   = 0X00004000;
       
      RCC->APB1ENR|=1<<1;              //TIM3时钟使能
      TIM3->PSC=47;                     //预分频器48分频
      TIM3->ARR=1000;                     //设置频率
      TIM3->CCR1 =500;               //设置占空比   
      TIM3->EGR |= 1;                //产生一次更新事件  
      TIM3->CCMR1|=7<<4;               //CH1 PWM2模式               
      TIM3->CCMR1|=1<<3;                //CH1预装载使能                       
      TIM3->CCER|=1<<0;                //OC1输出使能          
      TIM3->CR1=0x0080;                //ARPE使能
      TIM3->CR1|=0x01;                 //使能定时器3
沙发
hopewise|  楼主 | 2014-11-26 11:09 | 只看该作者
PCLK=HCLK=48MHZ

使用特权

评论回复
板凳
mmuuss586| | 2014-11-26 12:33 | 只看该作者
好像没设计数模式;

程序最好改成库函数模式吧,调好后再改成寄存器的;
寄存器的看起来累;

使用特权

评论回复
地板
hopewise|  楼主 | 2014-11-26 13:57 | 只看该作者
mmuuss586:TIM3定时功能没问题,现设置成PWM模式(CH1通道输出PWM),没反应

使用特权

评论回复
5
小班儿| | 2014-11-26 14:24 | 只看该作者
    TIM_OCInitTypeDef  TIM_OCInitStructure;//定义结构体
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定义结构体
    /* 打开定时器3外设时钟 */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
                          
                /* 定时器3基本定时器设置 */
                /* 定时器从0计数到255为一个定时周期 */
    TIM_TimeBaseStructure.TIM_Period = 255;
       
                /* 设置预分频 2000 分频 */
    TIM_TimeBaseStructure.TIM_Prescaler = 1999;
       
                /* 设置时钟分频系数,此处未分频 */
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
       
                /* 向上计数模式 */
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
       
                /* 基本定时器初始化 */
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
   
               
    /* 定时器3PWM设置   PWM1 模式 */
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
               
                /* 使能输出 */
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
               
                /* 设置初始 PWM 脉冲宽度为 0 */
    TIM_OCInitStructure.TIM_Pulse = 0;
               
                /* 当定时器计数值小于 TIM_Pulse 时为低电平 */
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
               
                /* TIM3的CH1初始化 */
    TIM_OC3Init(TIM3, &TIM_OCInitStructure);
               
                /* 使能的预装载寄存器 */
    TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
               
    /* 使能 TIM3 重载寄存器 ARR */
    TIM_ARRPreloadConfig(TIM3, ENABLE);
               
    /* 使能定时器3 */
    TIM_Cmd(TIM3, ENABLE);
               
                /* 使能定时器3的 update中断 */
    TIM_ITConfig(TIM3,TIM_IT_Update, ENABLE);

使用特权

评论回复
6
小班儿| | 2014-11-26 14:25 | 只看该作者
定时器的基本功能没有设置,PWM模式也没有设置。最好用库函数的形式来写程序,易懂,好移植!

使用特权

评论回复
7
小班儿| | 2014-11-26 14:26 | 只看该作者
/* 设置初始 PWM 脉冲宽度为 0 */
    TIM_OCInitStructure.TIM_Pulse = 0;

使用特权

评论回复
8
小班儿| | 2014-11-26 14:27 | 只看该作者
/* 设置初始 PWM 脉冲宽度为 0 */
    TIM_OCInitStructure.TIM_Pulse = 0;

这个占空比需要你自己设置,我这个是有别的用处!

使用特权

评论回复
9
hopewise|  楼主 | 2014-11-26 15:22 | 只看该作者
1.小班儿,我的这个子函数是抄原子的,也网上找一些,几乎是同一样的。
2 定时器的基本功能没有设置,PWM模式也没有设置-----这是PWM功能-----可从TIM3->CCMR1|=7<<4;这条指令看出是PWM模式,从通道1(即PB4/TIM3-CH1)输出PWM波形.
3.TIM3的定时功能是正确的,我已在定时中断函数里翻转PB4脚,测出的波形正确.

使用特权

评论回复
10
mmuuss586| | 2014-11-26 20:54 | 只看该作者
hopewise 发表于 2014-11-26 15:22
1.小班儿,我的这个子函数是抄原子的,也网上找一些,几乎是同一样的。
2 定时器的基本功能没有设置,PWM模 ...

那就用库函数先试下吧;
没必要抄原子的;

使用特权

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

本版积分规则

46

主题

468

帖子

3

粉丝