使用STM32的定时器进行输入脉冲的计数

发布者:快乐行者最新更新时间:2015-04-14 来源: eechina关键字:STM32  定时器  输入脉冲 手机看文章 扫描二维码
随时随地手机看文章
STM32的定时器具有计数功能,在实际应用中可以用来对引脚上的输入信号进行统计。其输入信号作为计数时钟,输入引脚为ETR引脚。

    本例程使用Timer 2,其ETR输入引脚为PA1,初始化是设置该引脚工作模式为输入模式,Timer2的工作模式为从模式。

    为了方便测试,另外使用PC6模式输出一个时钟信号。测试时将PC6与PA1短接。(用户也可另外连接一个时钟信号到PA1引脚上。)

代码如下:

int main(void)
{
unsigned char i_Loop;
unsigned char n_Counter;

#ifdef DEBUG
  debug();
#endif

RCC_Configuration();  // System Clocks Configuration
NVIC_Configuration();  // NVIC configuration
GPIO_Configuration();  // Configure the GPIO ports

TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);  // Time base configuration

TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);

TIM_SetCounter(TIM2, 0);
TIM_Cmd(TIM2, ENABLE);

for(i_Loop = 0; i_Loop < 100; i_Loop ++) {
  GPIO_SetBits(GPIOC, GPIO_Pin_6);
  Delay(10);
  GPIO_ResetBits(GPIOC, GPIO_Pin_6);
  Delay(10);
}

n_Counter = TIM_GetCounter(TIM2);
while (1) {
}
}

前三行进行了时钟、中断、和I/O口的配置。然后进行Timer的基本配置,计数器自动装载值为0xFFFF,计数频率不分频,定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比为1,计数器向上计数。

TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);

使用ETR时钟作为计数时钟需要设置为外部时钟模式2,故调用该函数,在设置时

1、关闭预分频:TIM_ExtTRGPSC_OFF。
可选项:
    TIM_ExtTRGPSC_OFF      0x0000
    TIM_ExtTRGPSC_DIV2     0x1000
    TIM_ExtTRGPSC_DIV4     0x2000
    TIM_ExtTRGPSC_DIV8     0x3000

2、外部触发极性ETR不反相,高电平或上升沿有效:TIM_ExtTRGPolarity_NonInverted。
可选项:
    TIM_ExtTRGPolarity_Inverted和
    TIM_ExtTRGPolarity_NonInverted。

3、外部触发无滤波器:0000。
   可选项:
0:无滤波器,以fDTS采样
1:采样频率fSAMPLING=fCK_INT,N=2
2:采样频率fSAMPLING=fCK_INT,N=4
3:采样频率fSAMPLING=fCK_INT,N=8
4:采样频率fSAMPLING=fDTS/2,N=6
5:采样频率fSAMPLING=fDTS/2,N=8
6:采样频率fSAMPLING=fDTS/4,N=6
7:采样频率fSAMPLING=fDTS/4,N=8
8:采样频率fSAMPLING=fDTS/8,N=6
9:采样频率fSAMPLING=fDTS/8,N=8
10:采样频率fSAMPLING=fDTS/16,N=5
11:采样频率fSAMPLING=fDTS/16,N=6
12:采样频率fSAMPLING=fDTS/16,N=8
13:采样频率fSAMPLING=fDTS/32,N=5
14:采样频率fSAMPLING=fDTS/32,N=6
15:采样频率fSAMPLING=fDTS/32,N=8

TIM_SetCounter(TIM2, 0);
初始化Timer的计数器初始值为0;
TIM_Cmd(TIM2, ENABLE);
启动Timer2
关键字:STM32  定时器  输入脉冲 引用地址:使用STM32的定时器进行输入脉冲的计数

上一篇:STM32温度传感器的使用和计算
下一篇:STM32系列产品编号信息

推荐阅读最新更新时间:2024-03-16 13:58

STM32 串口简介
简介:串口作为 MCU 的重要外部接口,同时也是软件开发重要的调试手段, 其重要性不言而喻。STM32 的串口资源相当丰富的,功能也相当强劲。ALIENTEK 战舰 STM32 开发板所使用的 STM32F103ZET6 最多可提供 5 路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持 LIN、 支持调制解调器操作、 智能卡协议和 IrDA SIR ENDEC 规范、具有 DMA等。 串口设置的一般步骤可以总结为如下几个步骤: 1)串口时钟使能,GPIO时钟使能 2)串口复位 3)GPIO端口模式设置 4)串口参数初始化 5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
[单片机]
HC-SR501热释电红外传感器驱动(STM32
一、前期准备 单片机:STM32F103ZET6 开发环境:MDK5.14 库函数:标准库V3.5 HC-SR501热释电红外传感器模块:淘宝有售 二、实验效果 三、驱动原理 这个模块比较简单,当有人靠近时候其IO输出3.3V,STM32可以直接采集。 需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。 四、驱动代码 HC_SR501.h #ifndef __HC_SR501_H__ #define __HC_SR501_H__ #include stm32f10x.h #include gpio.h #include delay.h #define HC_SR501 PA
[单片机]
HC-SR501热释电红外传感器驱动(<font color='red'>STM32</font>)
STM32 USB虚拟串口
串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出。很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发。本章节来简单概述STM32低端芯片上的USB虚拟串口的移植。在官方DEMO中已经提供了现成的程序,这里对修改方法做简单说明。 首先打开官方demo我们开始进行移植,第一步复制我们可用的文件,操作如下: Projects\Virtual_COM_Port文件夹下,复制红线部分 图1 图2 我为了方便演示统放在usb/src文件夹下: 图3 现在复制USB的库文件,这些文件不需要我们修改: 图4 上图中的文件统一放在usb/lib文件夹下: 图5 好了现在所需要的文件我们以复制完
[单片机]
<font color='red'>STM32</font> USB虚拟串口
stm32中断优先级问题
STM32F10x参考手册里并没有关于中断STM32中断优先级的具体介绍,需要参考《STM32F10xxx Cortex-M3 Programming Manual》 一、STM32中中断优先级的概念: STM32(Cortex-M3)中有两个优先级概念 抢占式优先级和响应优先级,有人把响应优先级乘坐 亚优先级 或 副优先级 ,每个中断源都需要被指定这两个优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断
[单片机]
STM32之串口通信
实验目的: 实现利用串口1 不停的打印一个信息到电脑上,同时接收从串口发过来的数据,把发送过来的数据直接送回给电脑。 实验平台: 基于STM32F103C8T6的彩屏开发板 硬件接口: 注意:因为我的开发板上的串口和LED共用了PA9和PA10,所以在使用USART1时务必屏蔽LED,不然两者会互相影响而导致实现现象无法呈现。 相关寄存器: 1,串口时钟使能。串口作为STM32 的一个外设,其时钟由外设时钟使能寄存器控制,这 里我们使用的串口1 是在APB2ENR 寄存器的第14 位。 2,串口复位。串口1 的复位是通过配置APB2RSTR 寄存器的第14 位来实现的。。通
[单片机]
利用STM32定时器的PWM输出功能,直接获取PWM波形
本实验向大家展示如何输出占空比固定的PWM波形。 1.工程的建立: 2.主函数代码: 3.pwm_output.c代码: 4.output.h代码: 5.结果: 6.结果显示不出来的请看上几节的文章,已解决。
[单片机]
STM32 GPIO的8种工作模式及相关配置寄存器
GPIO八种工作模式 四种输入: GPIO_Mode_IPU(上拉输入) GPIO_Mode_IPD(下拉输入) 原理: 经过上拉开关和下拉开关的连接,再经过触发器转化为0,1的数字信号,存储到数据寄存器中,然后我们就可以通过配置寄存器CRL,CRH控制这两个开关。 用法: 若GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),取得的GPIO引脚数据为1,既高电平. 而下拉输入模式则是相反的,在默认状态下其引脚数据为0,低电平. GPIO_Mode_IN_FLOATING(浮空输入) 原理: 不接上拉和下拉开关,直接经由触发器输入. 用法: 若配置成这个模式可以用电表测量其引脚电压是1点几伏(不确定的值).由于输
[单片机]
浅谈使用PLC程序的广泛定时器逻辑
在流程工业中,我们处理许多流程,其中一些流程基于计时器运行。有些进程需要较少的运行时间,而其他进程则需要较长的时间。 时间较短的过程不会有问题,但需要较长时间的过程会出现问题,特别是对于西门子 PLC。默认的西门子PLC定时器能够计时的最大时间是2小时46分钟。 如果我们在复杂的过程控制逻辑中需要更多计时功能,那么我们必须创建一个自定义计时器块,该块将处理比默认系统提供的值更高的计时。 在本文中,我们将讨论使用 PLC 程序的广泛定时器逻辑。 让我们考虑一个需要连续运行四个小时的泵的示例。我们将使用两个输入和一个泵作为输出。 输入和输出 输入:1. 启动 (I0.0),2. 停止 (I0.1) 输出:1. 泵 (Q0.0)
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved