《使用stm32的定时器进行输入脉冲的计数》由会员分享,可在线阅读,更多相关《使用stm32的定时器进行输入脉冲的计数(5页珍藏版)》请在金锄头文库上搜索。
1、使用 STM32 的定时器进行输入脉冲的计数STM32 的定时器具有计数功能,在实际应用中可以用来对引脚上的输入信号进行统计。其输入信号作为计数时钟,输入引脚为 ETR 引脚。本例程使用 Timer 2,其 ETR 输入引脚为 PA1,初始化是设置该引脚工作模式为输入模式,Timer2 的工作模式为从模式。为了方便测试,另外使用 PC6 模式输出一个时钟信号。测试时将 PC6 与 PA1 短接。(用户也可另外连接一个时钟信号到 PA1 引脚上。)代码如下:int main(void)unsigned char i_Loop;unsigned char n_Counter;#ifdef DEBU
2、Gdebug();#endifRCC_Configuration(); / System Clocks ConfigurationNVIC_Configuration(); / NVIC configurationGPIO_Configuration(); / Configure the GPIO portsTIM_TimeBaseStructure.TIM_Period = 0xFFFF;TIM_TimeBaseStructure.TIM_Prescaler = 0x00;TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;TIM_TimeBaseSt
3、ructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, /Time base configurationTIM_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);GP
4、IO_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 时钟作为计数时
5、钟需要设置为外部时钟模式 2,故调用该函数,在设置时1、关闭预分频:TIM_ExtTRGPSC_OFF。可选项:TIM_ExtTRGPSC_OFF 0x0000TIM_ExtTRGPSC_DIV2 0x1000TIM_ExtTRGPSC_DIV4 0x2000TIM_ExtTRGPSC_DIV8 0x30002、外部触发极性 ETR 不反相,高电平或上升沿有效:TIM_ExtTRGPolarity_NonInverted。可选项:TIM_ExtTRGPolarity_Inverted 和TIM_ExtTRGPolarity_NonInverted。3、外部触发无滤波器:0000。可选项:0:无
6、滤波器,以 fDTS 采样1:采样频率 fSAMPLING=fCK_INT,N=22:采样频率 fSAMPLING=fCK_INT,N=43:采样频率 fSAMPLING=fCK_INT,N=84:采样频率 fSAMPLING=fDTS/2,N=65:采样频率 fSAMPLING=fDTS/2,N=86:采样频率 fSAMPLING=fDTS/4,N=67:采样频率 fSAMPLING=fDTS/4,N=88:采样频率 fSAMPLING=fDTS/8,N=69:采样频率 fSAMPLING=fDTS/8,N=810:采样频率 fSAMPLING=fDTS/16,N=511:采样频率 fSAMPLING=fDTS/16,N=612:采样频率 fSAMPLING=fDTS/16,N=813:采样频率 fSAMPLING=fDTS/32,N=514:采样频率 fSAMPLING=fDTS/32,N=615:采样频率 fSAMPLING=fDTS/32,N=8TIM_SetCounter(TIM2, 0);初始化 Timer 的计数器初始值为 0;TIM_Cmd(TIM2, ENABLE);启动 Timer2代码下载: http:/