- 脉冲计数配置步骤
1.硬件
2.软件
- 定时器HAL驱动层文件添加
- counter驱动文件添加
- GPIO常用函数
- main.c程序
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "counter.h"int main(void)
{HAL_Init(); stm32_clock_init(RCC_PLL_MUL9); led_init(); uart1_init(115200);printf("hello world!\r\n");counter_init(65536 - 1, 0);while(1){ count_get();
}
}
- **
counter_init(65536 - 1, 0);
**语句定时参考
#include "counter.h"
#include "stdio.h"TIM_HandleTypeDef counter_handle = {0};
uint16_t new_count = 0;
uint16_t old_count = 0;void counter_init(uint16_t arr, uint16_t psc)
{TIM_SlaveConfigTypeDef slave_config = {0};counter_handle.Instance = TIM2;counter_handle.Init.Prescaler = psc;counter_handle.Init.Period = arr;counter_handle.Init.CounterMode = TIM_COUNTERMODE_UP;HAL_TIM_IC_Init(&counter_handle);slave_config.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;slave_config.InputTrigger = TIM_TS_TI2FP2;slave_config.TriggerPolarity = TIM_TRIGGERPOLARITY_FALLING;slave_config.TriggerFilter = 0;HAL_TIM_SlaveConfigSynchro(&counter_handle, &slave_config);HAL_TIM_IC_Start(&counter_handle, TIM_CHANNEL_2);
}void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM2){GPIO_InitTypeDef gpio_initstruct;__HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_TIM2_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(GPIOB, &gpio_initstruct);}
}void count_get(void)
{new_count = __HAL_TIM_GET_COUNTER(&counter_handle);if(old_count != new_count){old_count = new_count;printf("CNT: %d\r\n", new_count);}
}
#ifndef __COUNTER_H__
#define __COUNTER_H__#include "sys.h"
void counter_init(uint16_t arr, uint16_t psc);
void count_get(void);#endif
3.实物效果
- 硬件模块接线
KEY一端—>PA0
KEY另一端—>GND
ST-Link下载方式
将定时器 2 通道 2 输入的低电平脉冲作为定时器 2 的时钟,并通过串口打印脉冲数
PSC=0,ARR=65535
外部时钟模式1、触发选择、上升沿触发、不分频、不滤波