问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32+HAL库实现外部脉冲计数

创作时间:
作者:
@小白创作中心

STM32+HAL库实现外部脉冲计数

引用
CSDN
1.
https://blog.csdn.net/weixin_66509332/article/details/141867081

本文将介绍如何使用STM32G0B1RET6开发板和HAL库实现外部脉冲计数功能。通过配置通用定时器TIM2,结合串口输出,可以实时监测外部脉冲信号的计数值。

硬件与软件环境

  • 硬件开发板:STM32G0B1RET6
  • 软件平台:Cubemx + Keil + VScode

1. 新建Cubemx工程

1.1 配置系统时钟RCC

1.2 配置定时器

选择通用定时器TIM2,时钟源选择ETR2(外部触发输入),对应的输入端口为PA0引脚。预分频系数设置为0,重装载值选择默认最大值以避免溢出。

1.3 配置信号输出端口

选择PA1引脚作为信号输出端口,设置为输出模式(GPIO_Output),自定义标签为OUT_SIGN,其他设置保持默认。

1.4 配置串口

配置串口用于输出计数结果。在Keil的魔术棒界面开启微库。

2. 代码实现

2.1 printf重定向

在usart.h中引用必要的头文件和函数声明:

#include "stdio.h"
int fputc(int ch,FILE *f);

在usart.c中实现printf重定向:

// 重定向printf
int fputc(int ch,FILE *f)
{
  uint8_t temp[1]={ch};
  HAL_UART_Transmit(&huart2,temp,1,2);
  return ch;
}

2.2 main函数

int main(void)
{
  /* USER CODE BEGIN 1 */
  uint32_t count;
  /* USER CODE END 1 */
  /* MCU Configuration--------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* USER CODE BEGIN Init */
  /* USER CODE END Init */
  /* Configure the system clock */
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start(&htim2);    /* 开启定时器2,用于外部计数 */
  printf("TIMER IS OK!\n");
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_GPIO_TogglePin(OUT_SIGN_GPIO_Port,OUT_SIGN_Pin);    /* 每隔500ms翻转一次LED */
    HAL_Delay(500);
    count=__HAL_TIM_GET_COUNTER(&htim2);    /* 读取计数值 */
    printf("计数值:%d\n",count);    /* 输出结果 */
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

3. 实验现象

使用杜邦线连接PA0和PA1引脚,观察串口输出结果。预期现象是串口会持续输出计数值,每当外部脉冲信号触发时,计数值会相应增加。

注意事项

  1. 确保外部脉冲信号正确连接到PA0引脚
  2. 串口输出需要在PC端使用串口助手软件进行监控
  3. 代码中未包含错误处理,实际应用中需要添加相应的异常处理机制

本文介绍了如何使用STM32G0B1RET6开发板和HAL库实现外部脉冲计数功能。通过配置通用定时器TIM2,结合串口输出,可以实时监测外部脉冲信号的计数值。希望对从事嵌入式开发的读者有所帮助。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号