定时器的外部脉冲计数功能

 

本节是介绍如何使用CubeMX配置STM32的通用定时器TIM2,实现外部脉冲计数功能。

 

开发环境:CubeMX+MDK5.27

芯片型号:STM32F103ZET6

时间:2020/07/13

 

简介:在上一节中,我们体验了基本定时器TIM6的定时功能,本节我们将配置通用定时器TIM2来实现外部脉冲计数的功能,上一节中我们使用TIM6进行定时,TIM6的时钟来源于APB1总线且不可以更改时钟源,而通用定时器2的时钟源则可以改变,我们可以选择它的时钟源为内部时钟(即APB1总线)或者外部时钟,而外部时钟则由外部触发引脚ETR引入的脉冲信号提供时钟。我们正是通过这个外部时钟来完成脉冲计数的功能。

 

实现步骤

第一步,在CubeMX中配置TIM2,具体配置如图

tim2.png

当我们配置了TIM时钟源为ETR2后,观察右方的Pinout View可以发现PA15引脚已经被配置为TIM2_ETR引脚,也就是说PA15作为外部时钟输入的引脚,因此我们配置相邻引脚PA14模拟脉冲输出,将这两个引脚通过杜邦线相连,方便观察实验现象。

 

第二步,配置PA14引脚作为脉冲输出引脚

pa14.png

 

第三步,按键及定时器6的配置沿用第三章的配置,如不清楚可点击3---CubeMX实战2——状态机思想实现按键判断

 

第四步,编写代码,在USER CODE BEGIN PV下添加如下代码

KEY_STATE KeyState = KEY_CHECK;
uint8_t   KeyFlag = 0;
uint8_t   Count = 0;//用于存放脉冲计数值

在USER CODE BEGIN 2下添加如下代码

HAL_TIM_Base_Start_IT(&htim6);//启动定时器6进行按键扫描
HAL_TIM_Base_Start(&htim2);//启动定时器2进行外部脉冲计数

在USER CODE BEGIN 3下添加如下代码

if(KeyFlag == 1)
{
    KeyFlag = 0;
    //模拟输出一个周期为2ms的脉冲
    HAL_GPIO_WritePin(Pulse_GPIO_Port,Pulse_Pin,GPIO_PIN_SET);
    HAL_Delay(1);
    HAL_GPIO_WritePin(Pulse_GPIO_Port,Pulse_Pin_GPIO_PIN_RESET);
    HAL_Delay(1);
    Count = __HAL_TIM_GET_COUNTER(&htim2);
    printf("Count is %d\n",Count);
}

 

实验结果

res.png

 
 
posted @ 2020-09-26 22:59  dreamrj  阅读(3418)  评论(0编辑  收藏  举报