tanic 发表于 2018-9-11 10:45:47

STM32 PWM

基本配置不用讲,现在问题是,调用HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_1);暂停PWM后想让IO电频输出高,有多少方案。
看到网上说配置sConfigOC.OCIdleState = TIM_OCIDLESTATE_SET;并没有效果

す疯Ⅱ恒す 发表于 2018-9-11 11:20:02

TIM_OCPolarity = TIM_OCPolarity_Low;

wenyangzeng 发表于 2018-9-11 11:56:39

PWM1改PWM2试看看

tanic 发表于 2018-9-11 13:18:42

本帖最后由 tanic 于 2018-9-11 13:33 编辑

搞定,还是通过修改占空比 0%的方式实现

tanic 发表于 2018-9-11 13:33:50

void StartStopBeep(uint8_t a)
{
        TIM_OC_InitTypeDef sConfigOC;
        HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_1);
        if(a==0)
        {
//                        HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_1);
                sConfigOC.OCMode = TIM_OCMODE_PWM1;
                sConfigOC.Pulse = 999;
                sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
                sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
                sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
                sConfigOC.OCIdleState = TIM_OCIDLESTATE_SET;
                sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
                HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
        }
        else
        {
//                        HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
          sConfigOC.OCMode = TIM_OCMODE_PWM1;
                sConfigOC.Pulse = 499;
                sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
                sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
                sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
                sConfigOC.OCIdleState = TIM_OCIDLESTATE_SET;
                sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
                HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
        }
        HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
}

feixiang20 发表于 2018-9-11 22:47:25

写个函数,单独更改pwm的占空比就行。不用重新初始化,不然容易造成乱跳。

tanic 发表于 2018-9-12 10:00:08

feixiang20 发表于 2018-9-11 22:47
写个函数,单独更改pwm的占空比就行。不用重新初始化,不然容易造成乱跳。 ...

HAL竟然没有提供函数,得自己写寄存器
页: [1]
查看完整版本: STM32 PWM