打印

GD32F130G8U6的TIMER15,16

[复制链接]
1516|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
四路PWM, 分别PB4 ,PB5 ,PB6 ,PB7
关联是
//LA脚=PB4=TIMER2_CH0
//LB脚=PB5=TIMER2_CH1
//RA脚=PB6==TIMER15_CH0
//RB脚=PB7==TIMER16_CH0

TIMER2的CH0和CH1都能正常的输出PWM,切换正反也OK,调占空比都OK的.10KHZ

可相同的配置 PB6,PB7 对应的TIMER15,TIMER16 怎么也不出来,大佬看看?
------------------------------------------------------------------------------------------------------------------------------------

rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_6);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
gpio_af_set(GPIOB, GPIO_AF_2, GPIO_PIN_6);

rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_7);
gpio_af_set(GPIOB, GPIO_AF_2, GPIO_PIN_7);
------------------------------------------------------------------------------------------------------------------------------------
void pwm_timer15_ch0(void)
{
    timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;
    rcu_periph_clock_enable(RCU_TIMER15);
    timer_deinit(TIMER15);
    timer_initpara.prescaler            = 72-1;
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period                = 100-1;
    timer_initpara.clockdivision       = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER15,&timer_initpara);

    timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
    timer_ocintpara.ocpolarity  = TIMER_OC_POLARITY_HIGH;
    timer_channel_output_config(TIMER15,TIMER_CH_0,&timer_ocintpara);
    timer_channel_output_pulse_value_config(TIMER15,TIMER_CH_0,49);
    timer_channel_output_mode_config(TIMER15,TIMER_CH_0,TIMER_OC_MODE_PWM1);
    timer_channel_output_shadow_config(TIMER15,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);
    timer_auto_reload_shadow_enable(TIMER15);
    timer_enable(TIMER15);
}
------------------------------------------------------------------------------------------------------------------------------------
void pwm_timer16_ch0(void)
{
    timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;
    rcu_periph_clock_enable(RCU_TIMER16);
    timer_deinit(TIMER16);
    timer_initpara.prescaler            = 72-1;
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period                = 100-1;
    timer_initpara.clockdivision       = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER16,&timer_initpara);

    timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
    timer_ocintpara.ocpolarity  = TIMER_OC_POLARITY_HIGH;
    timer_channel_output_config(TIMER16,TIMER_CH_0,&timer_ocintpara);
    timer_channel_output_pulse_value_config(TIMER16,TIMER_CH_0,49);
    timer_channel_output_mode_config(TIMER16,TIMER_CH_0,TIMER_OC_MODE_PWM1);
    timer_channel_output_shadow_config(TIMER16,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);
    timer_auto_reload_shadow_enable(TIMER16);
    timer_enable(TIMER16);
}

使用特权

评论回复
沙发
〽️〽️〽️|  楼主 | 2020-7-21 23:48 | 只看该作者
加了这2行也不行
timer_primary_output_config(TIMER15,ENABLE);
timer_primary_output_config(TIMER16,ENABLE);

使用特权

评论回复
板凳
〽️〽️〽️|  楼主 | 2020-7-21 23:55 | 只看该作者
看着TIMER15_CH0_ON 和TIMER16_CH0_ON   所以 改了这2行   还是不行   
timer_ocintpara.outputstate = TIMER_CCXN_ENABLE; //使能输出比较通道
timer_ocintpara.ocpolarity  = TIMER_OCN_POLARITY_HIGH;//输出极性高

使用特权

评论回复
地板
lvben5d| | 2020-7-22 09:23 | 只看该作者
本帖最后由 lvben5d 于 2020-7-22 09:25 编辑

注意下 PB6 7  是属于CHX_ON  也就是  OCN timer_channel_complementary_output_polarity_config   试试这个互补   OCP    OCN是互补输出

使用特权

评论回复
5
xdqfc| | 2020-7-22 09:42 | 只看该作者
〽️〽️〽️ 发表于 2020-7-21 23:55
看着TIMER15_CH0_ON 和TIMER16_CH0_ON   所以 改了这2行   还是不行   
timer_ocintpara.outputsta ...

兄弟,你用仿真器看看各项配置是不是有效就行了,一般定时器的初始化,我基本不用库函数,看看各个寄存器是不是达到自己的要求,一般这些问题自己摸索摸索很快就可以搞定的,多尝试尝试就行。

使用特权

评论回复
6
〽️〽️〽️|  楼主 | 2020-7-22 11:36 | 只看该作者
看来是电路设计错了? TIMER15_CH0_ON 和TIMER16_CH0_ON对应的PIN不能和普通PWM那样啊

使用特权

评论回复
7
lvben5d| | 2020-7-22 14:24 | 只看该作者
〽️〽️〽️ 发表于 2020-7-22 11:36
看来是电路设计错了? TIMER15_CH0_ON 和TIMER16_CH0_ON对应的PIN不能和普通PWM那样啊 ...

手册写了是  OCN  互补那边  你试试用另外的函数 初始化!

使用特权

评论回复
8
〽️〽️〽️|  楼主 | 2020-7-22 21:18 | 只看该作者
可以了,感谢大家,配置互补通道就行了

使用特权

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

本版积分规则

51

主题

377

帖子

2

粉丝