搜索

GD32F330 如何动态调节PWM频率?

[复制链接]
407|3
 楼主 | 2020-7-13 10:44 | 显示全部楼层 |阅读模式
测试了很多种方法还是不行,代码如下

    rcu_periph_clock_enable(RCU_TIMER2);

    timer_deinit(TIMER2);

    timer_initpara.prescaler         = 9;

    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = 4000;                                   //频率值
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER2,&timer_initpara);

     /* CH1 configuration in PWM mode */
    timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;
    timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;
    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;

    timer_channel_output_config(TIMER2,TIMER_CH_1,&timer_ocintpara);

    timer_channel_output_pulse_value_config(TIMER2,TIMER_CH_1,2000);  //占空比值
    timer_channel_output_mode_config(TIMER2,TIMER_CH_1,TIMER_OC_MODE_PWM0);
    timer_channel_output_shadow_config(TIMER2,TIMER_CH_1,TIMER_OC_SHADOW_DISABLE);

    timer_primary_output_config(TIMER2,ENABLE);

    timer_enable(TIMER2);




调节占空比是比较简单, timer_channel_output_pulse_value_config(TIMER2,TIMER_CH_1,PWM);  //占空比值赋值到PWM然后调节PWM值就行了,但是频率值是不行的,
我把频率值赋值后发现调不了,大家帮我看一下咋回事,因为我调节范围比较小,所以没有去调分频之类的,那样的话调节一下频率就会变化很多,

使用特权

评论回复
| 2020-7-13 13:54 | 显示全部楼层
直接给TIMER_CAR寄存器写值不行吗?或者用timer_autoreload_value_config()这个函数

使用特权

评论回复
| 2020-7-13 15:01 | 显示全部楼层
sonicll 发表于 2020-7-13 13:54
直接给TIMER_CAR寄存器写值不行吗?或者用timer_autoreload_value_config()这个函数

好像要先停止计数的,时间有点长了,忘记了。反正跟51不一样。

使用特权

评论回复
| 2020-7-13 15:09 | 显示全部楼层
xdqfc 发表于 2020-7-13 15:01
好像要先停止计数的,时间有点长了,忘记了。反正跟51不一样。

我之前用ST的芯片,是可以在timer运行时动态修改预分频值和重载值的,GD手册里有个图也画了可以在运行时修改TIMER_CAR寄存器的值

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表