求助:如何在停止pwm后,置输出为0

2019-07-21 07:09发布

求助:如何在停止pwm后,置输出为0 原子哥,我有一个问题,我想在用停止pwm以后,想置输出电平为0,即pwm=0%. 但是在我的程序中,停止pwm以后,输出电平时而为0,时而为1,即pwm=0%pwm=100%. 请问如果解决呢? 谢谢   我的程序如下,用的是STM32F105中的PA2作为PWMTIM5_Ch3)的输出脚 /******初始化程序,这里和原子哥的程序基本一致PWM_Init(900,0);          ******/   void Scrubber_PWW_Init(u16 arr,u16 psc) {                                                                                                                               RCC->APB1ENR|=1<<3;       // enable TIM5 clock                                GPIOA->CRL&=0XFFFFF0FF;//PA2 output               GPIOA->CRL|=0X00000B00;//alternater function push-pull 50Mhz                         GPIOA->ODR|=1<<2; //PA2        pull up                 TIM5->ARR=arr; // set auto-Reload Register                TIM5->SC=psc;//          PWM_Init(900,0);          //non prescaler, PWM frequency=72000KHz/900=80Khz                               TIM5->CCMR2|=7<<4;  //CH3 mode PWM CCMR2 bit6:4(commence à bit12) OC3M[2:0]=111;                             TIM5->CCMR2|=1<<3; //channel 3 Output Compare   preload enable              OC3PE               TIM5->CCER|=1<<8;  //channel 3 Capture/Compare  output enable    CC3E               TIM5->CR1=0x0080;   //enalbe ARPE     Auto-reload preload enable               TIM5->CR1|=0x01;    //enable Time5                                                                                                                       }                 /******如果收到信息sMessTexte 的第8(sMessTexte[8])0:停止计数器Tim5 如果sMessTexte 的第8(sMessTexte[8])1:置Pwm=20%,开计数器Tim5 如果sMessTexte 的第8(sMessTexte[8])2:置Pwm=40%,开计数器Tim5******/   void scrubber(u8* sMessTexte)               {                             switch(sMessTexte[8])                                            {                                                          case '0':                                                                                                    TIM5->CR1&=0x00;    //disable Time5                                                                                                    break;                                                          case '1':                                                                                                    SCRUBBER_PWM=40; //Pwm=20%                                                                                                         TIM5->CR1|=0x01;    //enable Time5                                                                                                    break;                                                          case '2':                                                                                                    SCRUBBER_PWM=80;//20%                                                                                                    TIM5->CR1|=0x01;    //enable Time5                                                                                                    break;                                                                                                     }                             }          谢谢大家帮助!!  
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-21 07:43
回复【楼主位】guillet:
---------------------------------
停止输出之后,直接设置PWM的那个IO为推挽输出,然后输出0.就完了.
guillet
2楼-- · 2019-07-21 12:18
回复【2楼】正点原子:
---------------------------------
谢谢原子哥。但是这么做,要再开pwm,我得重新初始化pwm,而不能随时改变pwm的占空比.
有没有更简单的方式呢?
正点原子
3楼-- · 2019-07-21 16:48
 精彩回答 2  元偷偷看……
莫非。
4楼-- · 2019-07-21 21:10
本帖最后由 莫非。 于 2016-8-15 17:09 编辑

遇到了问题来查查结果还真找到了,一模一样的问题,谢谢原子哥,多谢楼主
llbff
5楼-- · 2019-07-21 23:12
在禁止定时器前, 用软件强制定时器更新,输出波形就是0了(初始电平)

TIM_GenerateEvent(TIM5, TIM_EventSource_Update);
TIM_Cmd(TIM5 DISABLE);

渌舟
6楼-- · 2019-07-22 01:26
原子哥,我这个是为什么,不初始化一下,好像还是不能改变那个引脚的模式。

一周热门 更多>