5107|6

2943

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

GD32的引脚PWM输出停止后电平问题 [复制链接]

我用GD32F103Cxx的单片机,我开启了单片机提供的PWM功能,初始化后启动输出可以正常输出波形,但是有一个问题无法解决:

就是当timer_disable(TIMER2);执行后,就会保持PWM输出时的状态,我过是高就保持为高,如果为低保持为低。无论引脚设置为GPIO_MODE_AF_PP或GPIO_MODE_AF_OD都没有办法固定为一种状态。我希望在PWM停止后停留在一个固定状态,不论停止时是何种输出状态。

   /* TIMER3 configuration: generate PWM signals with different duty cycles:
       TIMER3CLK = SystemCoreClock / 108 = 1MHz */
    timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;

    rcu_periph_clock_enable(RCU_TIMER3);
    timer_deinit(TIMER3);

    /* TIMER3 configuration */
    timer_initpara.prescaler         = 72-1;
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = 1000;
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV4;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER3,&timer_initpara);

     /* CH0 configuration in PWM mode */
    timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;
    timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;
    timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;
    timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;
    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;
    timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
    timer_channel_output_config(TIMER3,TIMER_CH_0,&timer_ocintpara);

    timer_channel_output_pulse_value_config(TIMER3,TIMER_CH_0,500);
    timer_channel_output_mode_config(TIMER3,TIMER_CH_0,TIMER_OC_MODE_PWM0);
    timer_channel_output_shadow_config(TIMER3,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);

    timer_primary_output_config(TIMER3,ENABLE);
    /* auto-reload preload enable */
    timer_auto_reload_shadow_enable(TIMER3);
    timer_enable(TIMER3);

引脚设置

gpio_pin_remap_config(GPIO_TIMER2_PARTIAL_REMAP, ENABLE);
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5);

 

此帖出自GD32 MCU论坛

最新回复

直接抄TIM_ForcedOC3Config寄存器控制方式看看能不能弄到GD上。   详情 回复 发表于 2022-4-27 22:36
点赞 关注
 

回复
举报

2943

帖子

4

TA的资源

五彩晶圆(中级)

沙发
 

上面初始化的代码错误,里面是TIMER2,不是TIMER3,但是代码是一样的。

此帖出自GD32 MCU论坛
 
 
 

回复

1801

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 

你可以单独在结束里加个赋值语句啊

 

此帖出自GD32 MCU论坛

点评

这种方式我试过了不可以,STM32是使用TIM_ForcedOC3Config函数,GD32的库没有发现类似的函数。  详情 回复 发表于 2022-4-27 17:30
 
 
 

回复

2943

帖子

4

TA的资源

五彩晶圆(中级)

4
 
sint27 发表于 2022-4-27 17:28 你可以单独在结束里加个赋值语句啊  

这种方式我试过了不可以,STM32是使用TIM_ForcedOC3Config函数,GD32的库没有发现类似的函数。

此帖出自GD32 MCU论坛
 
 
 

回复

7671

帖子

18

TA的资源

五彩晶圆(高级)

5
 
bigbat 发表于 2022-4-27 17:30 这种方式我试过了不可以,STM32是使用TIM_ForcedOC3Config函数,GD32的库没有发现类似的函数。

直接抄TIM_ForcedOC3Config寄存器控制方式看看能不能弄到GD上。

此帖出自GD32 MCU论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

2943

帖子

4

TA的资源

五彩晶圆(中级)

6
 

也可能是我使用错误,可能不是使用timer_disable函数,可能是通过停止通道来停止pwm输出,但是我无法知道是哪一个函数

此帖出自GD32 MCU论坛
 
 
 

回复

2943

帖子

4

TA的资源

五彩晶圆(中级)

7
 

我通过查询gd32库源码,发现timer_channel_output_mode_config函数,可以完成设置,但是这是一个配置函数,

timer_channel_output_mode_config(TIMER2,TIMER_CH_1,TIMER_OC_MODE_PWM0);

timer_enable(TIMER2);

 

timer_disable(TIMER2);

 timer_channel_output_mode_config(TIMER2,TIMER_CH_1,TIMER_OC_MODE_LOW);

我是用的timer_disable(TIMER2);函数是把整个定时器停掉,而不是只停一个通道

此帖出自GD32 MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表