AT32定时器——外部脉冲计数功能实现

一、任务

芯片:AT32F403VGT7
引脚:PB5、PE5
功能:对输入的低频方波信号进行计数。

参考链接:
雅特力官网资料: https://www.arterytek.com/cn/product/AT32F403A.jsp#Resource
雅特力技术论坛: https://bbs.21ic.com/iclist-1004-1.html

二、实现思路

方案一 利用引脚中断进行计数

由于PE5、PB5共用一个中断线,没办法同时响应中断信号,故此方案不行。

方案二 利用定时器对外部脉冲进行计数

PE5 引脚定义

PB5 引脚定义
由上图可知

引脚定时器通道是否重映射
PE5TMR9CH1
PB5TMR3CH2

在这里插入图片描述

1.初始化时钟

void clock_init(void)
{
	/* 使能TMR3、GPIOB时钟 */
    crm_periph_clock_enable(CRM_TMR3_PERIPH_CLOCK, TRUE);
    crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);

	/* 使能TMR9、GPIOE时钟 */
    crm_periph_clock_enable(CRM_TMR9_PERIPH_CLOCK, TRUE);
    crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE);

	/* 由于PE5、PB5对应的定时器都需要重映射,故在此需要使能重映射时钟 */
    crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK,TRUE);
}

2.初始化GPIO

void gpio_init(void)
{
    gpio_init_type  gpio_init_struct = {0};

    /* gpio configuration */
    gpio_pin_remap_config(TMR3_MUX_10,TRUE);
    gpio_pin_remap_config(TMR9_MUX,TRUE);

    gpio_init_struct.gpio_pins = GPIO_PINS_5;
    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
    gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
    gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

    gpio_init(GPIOB, &gpio_init_struct);
    gpio_init(GPIOE, &gpio_init_struct);
}

3.配置定时器

void timer_init(void)
{
    tmr_base_init(TMR9, 0xFFFF, 0);
    tmr_cnt_dir_set(TMR9, TMR_COUNT_UP);
    tmr_sub_mode_select(TMR9, TMR_SUB_EXTERNAL_CLOCK_MODE_A); 
    tmr_trigger_input_select(TMR9, TMR_SUB_INPUT_SEL_C1DF1);

    tmr_base_init(TMR3, 0xFFFF, 0);
    tmr_cnt_dir_set(TMR3, TMR_COUNT_UP);
    tmr_sub_mode_select(TMR3, TMR_SUB_EXTERNAL_CLOCK_MODE_A); 
    tmr_trigger_input_select(TMR3, TMR_SUB_INPUT_SEL_C2DF2);

    tmr_counter_enable(TMR3, TRUE);
    tmr_counter_enable(TMR9, TRUE);
}

4. 获取定时器的计数值

	uint32_t value1 = tmr_counter_value_get(TMR3);
	uint32_t value2 = tmr_counter_value_get(TMR9);

5.设置定时器计数值

    tmr_counter_value_set(TMR3, 0);
    tmr_counter_value_set(TMR9, 0);

三、官方例程

官方 tmr 例程 官方例程对编码器模式,外部脉冲捕获、PWM捕获都有例程介绍,是个不错的参考资料,就是没有外部脉冲计数的例程。

四、小结

通过以上配置,即可实现了AT32F403AVGT7定时器的外部模式对外部脉冲信号进行计数的功能 。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值