[研电赛技术支持] GD32定时器无法使用外部脉冲计数

[复制链接]
1571|12
 楼主| yangfrch 发表于 2022-12-21 11:05 | 显示全部楼层 |阅读模式
GD32定时器无法使用ETI计数,同一个芯片,使用stm32的库则正常运行,没有问题,GD32库代码如下
static void Timer_Rcu_NvicIrq_Init(void)
{
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_AF);
    rcu_periph_clock_enable(RCU_TIMER1);
}

static void Timer_Gpio_Init(void)
{
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
}

static void Timer_Config(void)
{
    timer_parameter_struct timer_initpara;
    // timer_ic_parameter_struct timer_icinitpara;

    timer_deinit(TIMER1);
    /* initialize TIMER init parameter struct */
    timer_struct_para_init(&timer_initpara);
    /* TIMER1 configuration */
    timer_initpara.prescaler = 0;
    timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection = TIMER_COUNTER_UP;
    timer_initpara.period = 0xffff;
    timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
    timer_init(TIMER1, &timer_initpara);

    /* slave mode selection : TIMER1 */
    /* TIMER1 input trigger : external trigger connected to CI0 */
    timer_input_trigger_source_select(TIMER1, TIMER_SMCFG_TRGSEL_CI0FE0);
    timer_slave_mode_select(TIMER1, TIMER_SLAVE_MODE_EXTERNAL0);
    timer_external_clock_mode1_config(TIMER1, TIMER_EXT_TRI_PSC_OFF, TIMER_ETP_RISING, 0);

    timer_enable(TIMER1);
}



 楼主| yangfrch 发表于 2022-12-21 11:05 | 显示全部楼层
static void Timer_Rcu_NvicIrq_Init(void)
{
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_AF);
    rcu_periph_clock_enable(RCU_TIMER1);
}

static void Timer_Gpio_Init(void)
{
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
}

static void Timer_Config(void)
{
    timer_parameter_struct timer_initpara;
    // timer_ic_parameter_struct timer_icinitpara;

    timer_deinit(TIMER1);
    /* initialize TIMER init parameter struct */
    timer_struct_para_init(&timer_initpara);
    /* TIMER1 configuration */
    timer_initpara.prescaler = 0;
    timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection = TIMER_COUNTER_UP;
    timer_initpara.period = 0xffff;
    timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
    timer_init(TIMER1, &timer_initpara);

    /* slave mode selection : TIMER1 */
    /* TIMER1 input trigger : external trigger connected to CI0 */
    timer_input_trigger_source_select(TIMER1, TIMER_SMCFG_TRGSEL_CI0FE0);
    timer_slave_mode_select(TIMER1, TIMER_SLAVE_MODE_EXTERNAL0);
    timer_external_clock_mode1_config(TIMER1, TIMER_EXT_TRI_PSC_OFF, TIMER_ETP_RISING, 0);

    timer_enable(TIMER1);
}
duzhiqiang521 发表于 2022-12-21 15:28 | 显示全部楼层
yangfrch 发表于 2022-12-21 11:05
static void Timer_Rcu_NvicIrq_Init(void)
{
    rcu_periph_clock_enable(RCU_GPIOA);

定时器中的正常输入则么没有配置?
    timer_icintpara.icfilter=0U;
    timer_icintpara.icpolarity=TIMER_IC_POLARITY_RISING;
//  timer_icintpara.icpolarity=TIMER_IC_POLARITY_FALLING;
//          timer_icintpara.icpolarity=TIMER_IC_POLARITY_BOTH_EDGE;
    timer_icintpara.icprescaler=TIMER_IC_PSC_DIV4;
    timer_icintpara.icselection=TIMER_IC_SELECTION_DIRECTTI;
    timer_input_capture_config(timer,TIMER_CH_0,&timer_icintpara); // 配置通道0
duzhiqiang521 发表于 2022-12-21 15:36 | 显示全部楼层
yangfrch 发表于 2022-12-21 11:05
static void Timer_Rcu_NvicIrq_Init(void)
{
    rcu_periph_clock_enable(RCU_GPIOA);

看错了,你是要ETI脉冲计数是吧,TIMER1的 CI0和ETI使用的同一个输入引脚,不建议
timer_input_trigger_source_select(定时器1,TIMER_SMCFG_TRGSEL_CI0FE0);
timer_external_clock_mode1_config(定时器1, TIMER_EXT_TRI_PSC_OFF, TIMER_ETP_RISING,
0)这样使用
szt1993 发表于 2022-12-21 18:34 | 显示全部楼层
楼主这个定时器频率能捕捉到脉冲计数吧
 楼主| yangfrch 发表于 2022-12-22 09:13 | 显示全部楼层
问题原因排查到了,管脚模式设置错了,下述是修正后的
static void Timer_Gpio_Init(void)
{
    gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
}
OKAKAKO 发表于 2022-12-22 13:30 | 显示全部楼层
yangfrch 发表于 2022-12-22 09:13
问题原因排查到了,管脚模式设置错了,下述是修正后的
static void Timer_Gpio_Init(void)
{

有时候确实引脚配置出问题了不容易发现,楼主又让大家有更好的避坑经验了
tpgf 发表于 2023-1-5 13:03 | 显示全部楼层
都是不同厂家的芯片   在寄存器的配置上应该有细微的不同之处
keaibukelian 发表于 2023-1-5 13:10 | 显示全部楼层
yangfrch 发表于 2022-12-22 09:13
问题原因排查到了,管脚模式设置错了,下述是修正后的
static void Timer_Gpio_Init(void)
{

这两种模式的具体的区别是什么呢  跟外部的硬件连接有关系吗
paotangsan 发表于 2023-1-5 13:19 | 显示全部楼层
yangfrch 发表于 2022-12-22 09:13
问题原因排查到了,管脚模式设置错了,下述是修正后的
static void Timer_Gpio_Init(void)
{

现在更改之后的管脚设置为什么模式了呢  他的特点是什么啊
renzheshengui 发表于 2023-1-5 13:37 | 显示全部楼层
是不是gd和st的引脚模式还是有一些小差别呢
wakayi 发表于 2023-1-5 13:58 | 显示全部楼层
楼主在使用st的芯片的时候使用老的引脚配置就可以吗
wowu 发表于 2023-1-5 14:21 | 显示全部楼层
在文档上 有没有体现这两种单片机在这方面的差别呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

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