打印
[研电赛技术支持]

GD32定时器无法使用外部脉冲计数

[复制链接]
1221|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)这样使用

使用特权

评论回复
5
szt1993| | 2022-12-21 18:34 | 只看该作者
楼主这个定时器频率能捕捉到脉冲计数吧

使用特权

评论回复
6
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);
}

使用特权

评论回复
7
OKAKAKO| | 2022-12-22 13:30 | 只看该作者
yangfrch 发表于 2022-12-22 09:13
问题原因排查到了,管脚模式设置错了,下述是修正后的
static void Timer_Gpio_Init(void)
{

有时候确实引脚配置出问题了不容易发现,楼主又让大家有更好的避坑经验了

使用特权

评论回复
8
tpgf| | 2023-1-5 13:03 | 只看该作者
都是不同厂家的芯片   在寄存器的配置上应该有细微的不同之处

使用特权

评论回复
9
keaibukelian| | 2023-1-5 13:10 | 只看该作者
yangfrch 发表于 2022-12-22 09:13
问题原因排查到了,管脚模式设置错了,下述是修正后的
static void Timer_Gpio_Init(void)
{

这两种模式的具体的区别是什么呢  跟外部的硬件连接有关系吗

使用特权

评论回复
10
paotangsan| | 2023-1-5 13:19 | 只看该作者
yangfrch 发表于 2022-12-22 09:13
问题原因排查到了,管脚模式设置错了,下述是修正后的
static void Timer_Gpio_Init(void)
{

现在更改之后的管脚设置为什么模式了呢  他的特点是什么啊

使用特权

评论回复
11
renzheshengui| | 2023-1-5 13:37 | 只看该作者
是不是gd和st的引脚模式还是有一些小差别呢

使用特权

评论回复
12
wakayi| | 2023-1-5 13:58 | 只看该作者
楼主在使用st的芯片的时候使用老的引脚配置就可以吗

使用特权

评论回复
13
wowu| | 2023-1-5 14:21 | 只看该作者
在文档上 有没有体现这两种单片机在这方面的差别呢

使用特权

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

本版积分规则

2

主题

8

帖子

0

粉丝