STM32实现脉冲检测(HAL)

脉冲计数检测的目的:

将定时器对应对通道输入的低电平脉冲作为定时器的时钟,并通过串口输出脉冲的次数

配置步骤:

1、时基工作参数配置

counter_init();

TIM_HandleTypeDef tim_handle = {0};
SlaveConfigTypeDef slave_config = {0};
    
tim_handle.Instance = TIM2;
tim_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE ;
tim_handle.Init.CounterMode = TIM_COUNTERMODE_UP;
tim_handle.Init.Period = arr;
tim_handle.Init.Prescaler = psc;
HAL_TIM_IC_Init(&tim_handle);

这里的配置不多说了,之前的文章里有过介绍,可以去翻翻看

2、MSP初始化

初始化GPIO、NVIC、CLOCK

函数:HAL_TIM_IC_MspInit();

           __HAL_RCC_TIM2_CLK_ENABLE();

           __HAL_RCC_GPIOA_CLK_ENABLE();

GPIO_InitTypeDef gpio_initstruct;
__HAL_RCC_TIM2_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();

gpio_initstruct.Pin = GPIO_PIN_0;    
gpio_initstruct.Mode = GPIO_MODE_AF_PP;     
gpio_initstruct.Pull = GPIO_PULLUP;        
gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;  
HAL_GPIO_Init(GPIOA, &gpio_initstruct);

3、定时器从模式配置

配置外部始终模式1,触发选择,上升沿触发,不分频,不滤波

HAL_TIM_SlaveConfigSynchro();这个函数在初始化函数里配置

slave_config.InputTrigger = TIM_TS_TI2FP2;
slave_config.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
slave_config.TriggerFilter = 0;
slave_config.TriggerPolarity = TIM_TRIGGERPOLARITY_FALLING;
HAL_TIM_SlaveConfigSynchro(&tim_handle,&slave_config);

4、使能捕获,并启动计数器

HAL_TIM_IC_Start();

5、获取CNT的值

这里我们自己写一个获取值的函数

void count_get(void)
{
    new_counter = __HAL_TIM_GET_COUNTER(&tim_handle);
    if(old_counter != new_counter)
    {
        old_counter =new_counter;
        printf("CNT:%d 次\n",new_counter);
    }

}

6、实验效果

这个脉冲计数需要检测到65535个脉冲才能清零,代码成功显示了按键按下的脉冲次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值