【STM32+HAL库】---- 通用定时器实现外部脉冲计数

复制代码
硬件开发板:STM32G0B1RET6
软件平台:cubemax+keil+VScode

1 新建cubemax工程

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引用头文件和函数声明

c 复制代码
#include "stdio.h"

int fputc(int ch,FILE *f);

usart.c中重定向

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

2.2 main函数

c 复制代码
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 实验现象

用杜邦线连接PA0PA1引脚,观察串口输出结果

相关推荐
Zarek枫煜4 小时前
[特殊字符] C3语言:传承C之高效,突破C之局限
c语言·开发语言·c++·单片机·嵌入式硬件·物联网·算法
Lugas Luo4 小时前
SATA 硬盘识别延时:协议层与内核机制分析
linux·嵌入式硬件
somi74 小时前
ARM-10-I.MX6U ADC
arm开发·嵌入式硬件·adc·自用
nfsf5 小时前
【ZMCT103C电流互感器应用原理图 交流电流】
嵌入式硬件
进击的小头5 小时前
01_第一篇:到底什么是嵌入式芯片?与通用CPU_GPU_DSP的核心区别
单片机·嵌入式硬件
hoiii1876 小时前
STM32 RS232串口通讯实验
stm32·单片机·嵌入式硬件
可乐鸡翅好好吃7 小时前
Keil更改RAM地址
网络·单片机·嵌入式硬件
惶了个恐7 小时前
嵌入式硬件第七弹——ARM(4)
arm开发·stm32·单片机·嵌入式硬件·arm·硬件工程
Lugas Luo8 小时前
SATA 协商流程深度分析 (基于 libata 与 AHCI 控制器)
linux·嵌入式硬件
charlie1145141919 小时前
嵌入式C++教程实战之Linux下的单片机编程:从零搭建 STM32 开发工具链(3)WSL2 USB 透传,让 ST-Link 穿越虚拟化边界
c++·stm32·单片机·学习·嵌入式