GD32系列Timer定时器的单次脉冲或者定时器中断

说明:本教程使用的单片机为GD32E230XX,同系列其他型号程序基本相同。

一、单脉冲模式的功能以及作用:

        单片机定时器的单脉冲功能允许设备生成一个特定宽度的脉冲信号,通常用于精确控制时间间隔或事件触发。当定时器配置为单脉冲模式时,它会在接收到启动命令后开始计时,达到预设值时产生一个中断或输出一个脉冲,然后自动停止。此功能在实际应用中极为重要,比如在电机控制中实现精准的速度和位置控制;在通信系统里同步数据传输;或者在测量仪器中进行准确的时间戳记录。

二、GD32E230定时器说明:

共六种类型,7个定时器,如图。其中有六个定时器支持单脉冲模式。本文选用定时器14。

三、废话不多说上源码!

有不懂的评论区见!


/******************************************************************************************
*** 函数名称: Timer14_Init
*** 输入参数: 无
*** 返 回 值: 无
*** 说    明:定时器14初始化函数
*** 功能说明:
1.初始定时器14为单次脉冲模式,由软件触发只中断一次
2.本定时器为1000Hz,即每个周期为1ms,占空比为1/1000,每计数一次为1us

******************************************************
你可以使用GD32系列微控制器中的定时器来实现脉冲计数功能。下面是一个简单的示例代码,演示如何使用GD32定时器2来进行脉冲计数: ```c #include "gd32f10x.h" void timer2_init(void) { /* 使能定时器2的时钟 */ rcu_periph_clock_enable(RCU_TIMER2); /* 配置定时器2的工作模式为边沿计数模式 */ timer_ic_parameter_struct timer_icinitpara; timer_icinitpara.icpolarity = TIMER_IC_POLARITY_RISING; // 上升沿触发 timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI; // 直接计数模式 timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1; // 输入捕获分频器预分频值 timer_icinitpara.icfilter = 0x0F; // 输入捕获滤波器 timer_input_capture_config(TIMER2, TIMER_CH_0, &timer_icinitpara); /* 配置定时器2的计数模式为上升沿计数 */ timer_counter_mode_config(TIMER2, TIMER_COUNTER_EDGE); /* 配置定时器2的触发源为TI0FP0 */ timer_external_trigger_source_config(TIMER2, TIMER_SMCFG_TRGSEL_CI0FE0); /* 配置定时器2的触发极性为上升沿触发 */ timer_external_trigger_polarity_config(TIMER2, TIMER_SMCFG_ETP); /* 配置定时器2的预分频值与计数值 */ timer_prescaler_config(TIMER2, 71, TIMER_PSC_RELOAD_UPDATE); timer_counter_value_config(TIMER2, 0); /* 使能定时器2的输入捕获功能 */ timer_channel_input_capture_config(TIMER2, TIMER_CH_0, TIMER_IC_SELECTION_DIRECTTI); timer_channel_enable(TIMER2, TIMER_CH_0); /* 使能定时器2 */ timer_enable(TIMER2); } uint32_t get_pulse_count(void) { /* 获取定时器2的当前计数值 */ return timer_channel_capture_value_register(TIMER2, TIMER_CH_0); } ``` 在使用之前,你需要确保已经正确初始化了GD32的系统时钟,并根据实际需求进行相应的配置。示例代码中的定时器2配置为边沿计数模式,上升沿触发,输入捕获滤波器为15个连续的采样结果,预分频值为71。可以根据实际情况进行调整。 使用`timer2_init()`函数初始化定时器2,然后使用`get_pulse_count()`函数可以获取当前的脉冲计数值。 请注意,示例代码中仅供参考,具体的配置和使用方法还需要根据你的实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值