打印

GD32F330 如何动态调节PWM频率?

[复制链接]
1930|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
测试了很多种方法还是不行,代码如下

    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值就行了,但是频率值是不行的,
我把频率值赋值后发现调不了,大家帮我看一下咋回事,因为我调节范围比较小,所以没有去调分频之类的,那样的话调节一下频率就会变化很多,

使用特权

评论回复
沙发
sonicll| | 2020-7-13 13:54 | 只看该作者
直接给TIMER_CAR寄存器写值不行吗?或者用timer_autoreload_value_config()这个函数

使用特权

评论回复
板凳
xdqfc| | 2020-7-13 15:01 | 只看该作者
sonicll 发表于 2020-7-13 13:54
直接给TIMER_CAR寄存器写值不行吗?或者用timer_autoreload_value_config()这个函数

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

使用特权

评论回复
地板
sonicll| | 2020-7-13 15:09 | 只看该作者
xdqfc 发表于 2020-7-13 15:01
好像要先停止计数的,时间有点长了,忘记了。反正跟51不一样。

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

使用特权

评论回复
5
清溪| | 2020-12-3 22:07 | 只看该作者
(1) 直接写数据到自动重装载寄存器:TIMER_CAR(TIMER2)=设定值;
(2) 调用定时器计数自动重装载寄存器配置函数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

82

帖子

0

粉丝