• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32输出PWM波

ljmf5 2017-03-02 浏览量:1317


PWM输出,这样配置



第一个脉冲波有问题,不知道是不是配置哪里有问题,求教,

谢谢 

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你好!关于你的这个问题!以前还真没注意关注过!


    按照你的方法,我也来一次!测了一下!我没看到你说的这种情况!代码是:


    void LED_GPIO_InitConfig(void)
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); 

    GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    /* ----------------------------------------------------------------------- 
        TIM2 Channe2 duty cycle = (TIM2_CCR2/ TIM2_ARR+1)* 100% = PWMÕ¼¿Õ±È
      ----------------------------------------------------------------------- */
    // Time base configuration  
    TIM_TimeBaseStructure.TIM_Period = 255;  
    TIM_TimeBaseStructure.TIM_Prescaler = 1999;    
    TIM_TimeBaseStructure.TIM_ClockDivision = 0 ;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

    // PWM1 Mode configuration: Channe2 
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 0;
    // TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    TIM_OC1Init(TIM3, &TIM_OCInitStructure);
    TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

    TIM_OCInitStructure.TIM_Pulse = 0;
    TIM_OC2Init(TIM3, &TIM_OCInitStructure); 
    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

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

    TIM_ARRPreloadConfig(TIM3, ENABLE);
    // TIM4 enable counter 
    TIM_Cmd(TIM3, ENABLE);    
    }

    • 发布于 2017-03-03
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:7
  • 哈哈,这个问题,其实从工程角度说,完全不用在意这些细节,没必要啊,就算中间会有一个占空比不对也没关系,不是一批就不影响使用
    • 发布于2017-03-02
    • 举报
    • 评论 1
    • 0
    • 0
ljmf5 回复了 oceancjc :我是打算做超声波测距,发8个脉冲,我直接用原子的例程软件仿真,前面的脉冲也是有问题 回复

  • 你没有更改占空比,应该是同样宽度的,第一个宽度不同可能是因为刚初始化完,有的函数需要延时一点再使用
    • 发布于2017-03-02
    • 举报
    • 评论 1
    • 0
    • 0
ljmf5 回复了 afeiafei309 :很大程度是这么个原因,谢谢! 回复

  • 我认为是初始化的问题,应该是配置完寄存器后在使能的过程中timer已经运行了一小段,造成了以一个回波不完整
    • 发布于2017-03-02
    • 举报
    • 评论 1
    • 0
    • 0
ljmf5 回复了 heaton426 :谢谢! 回复

  • 需要配置极性和相位。如果第一帧是高电平这样就对了。
    • 发布于2017-03-02
    • 举报
    • 评论 1
    • 0
    • 0
ljmf5 回复了 LiuYang :还是配置的问题,PB5 在LED初始化后,给拉高了 回复

  • 後面的PWM波都正常嗎?

    如果是,您看Code就可以猜測

    TIMER有之前的設定值還沒生效

    所以從第一個PWM方波輸出後

    才會正式生效,

    配置時候並不會馬上作用正確,如果很在意這點,

    程序上延時可以避免接收第一個PWM波的(假設控制馬達/Servo),

    以上供參考

    • 发布于2017-03-03
    • 举报
    • 评论 1
    • 0
    • 0
ljmf5 回复了 MOP :后面的都正常,原因与heaton426说的类似,谢谢! 回复

  • PWM输出的第一个波形,I2C/UART的第一个数据,这些都会被默认无视掉的,因为那时硬件还在初始化,还在装入寄存器什么的,不准确
    • 发布于2017-03-03
    • 举报
    • 评论 1
    • 0
    • 0
ljmf5 回复了 chen0000009 :基本上就是这个原因,谢谢! 回复


  • 问题已解决,具体的愿意我也还感觉说不太清楚,有需要的可以研究一下,代码已上传到帖子,谢谢大伙的帮助解答!


    //www.icxbk.com/community/forum.php?mod=viewthread&tid=73242

    • 发布于2017-03-03
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32输出PWM波