打印
[STM32F1]

关于STM32动态改变PWM的问题 相当奇葩

[复制链接]
1173|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyluckyday|  楼主 | 2014-4-2 21:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初始化代码如下

void TIM_PWM_Configuration(void)
{
extern TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
extern TIM_OCInitTypeDef  TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);


TIM_TimeBaseStructure.TIM_Period = 7200;         //Òç³öʱ¼ä((1+TIM_Prescaler )/72M)*(1+TIM_Period ) 7200 19999  2s   999  71  1ms
TIM_TimeBaseStructure.TIM_Prescaler = 19999;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;                  
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
       
TIM_OCInitStructure.TIM_Pulse = 3600;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
       
/*TIM_OCInitStructure.TIM_Pulse = 3600;   
TIM_OC2Init(TIM3, &TIM_OCInitStructure);  
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  

TIM_OCInitStructure.TIM_Pulse = 3600;
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_OCInitStructure.TIM_Pulse = 3600;
TIM_OC4Init(TIM3, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); */
   
TIM_ARRPreloadConfig(TIM3, ENABLE);


TIM_Cmd(TIM3, ENABLE);  

void GPIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
       

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  |RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);
//PWM_CH init       
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 |
                                     GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

               
GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0 |
                                       GPIO_Pin_1;                                                         
GPIO_Init(GPIOB,&GPIO_InitStructure);  
       
       
//U1_init
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  //tx
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);   


        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //rx
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
  GPIO_Init(GPIOA, &GPIO_InitStructure);   
       
       
       
}
沙发
zyluckyday|  楼主 | 2014-4-2 21:30 | 只看该作者
void PWM_Duty_Cycle_Set_4_CH(unsigned int CH1,unsigned int CH2,unsigned int CH3, unsigned int CH4)
{
       

       
TIM_OCInitStructure.TIM_Pulse = CH1;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
       
}


当在程序中用这个函数改变PWM的占空比时   PWM的输出电压只有1.7V左右  而未用这个函数动态改变占空比时  PA6的电压有3.3V。。。。

使用特权

评论回复
板凳
zyluckyday|  楼主 | 2014-4-2 21:32 | 只看该作者
int main(void)
{
        RCC_Config_72M();
  GPIO_init();
  TIM_PWM_Configuration();
        USART1_Configuration();
        NVIC_Configuration();
        while(1)
        {
                if(key==0)PWM_Duty_Cycle_Set_4_CH(3600,0,0,0);         
                                else  PWM_Duty_Cycle_Set_4_CH(100,0,0,0);
        }
主函数式这样的
}

使用特权

评论回复
地板
zyluckyday|  楼主 | 2014-4-2 21:35 | 只看该作者
不知道为什么啊  如果把TIM3整个关了 再开  PWM的电压又正常了。。。但是这样就降低了实时性了

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝