通用定时器 输入捕获 +hal实现检测pwm周期和频率

一,通用定时器输入捕获

功能:捕获输入通道上信号的上升沿或下降沿

多用于测量PWM周期/频率,只要测量出连续的两个上升沿或连续的两个下降沿的时间间隔 也可以测量占空比,只要测量出连续的一个上升沿和一个下降沿的时间间隔 ,然后除以周期即可

二,hal配置

软件:vscode keil stm32cubemx

1.选择对应的芯片

2.配置时钟模式


3.配置串口输出 ,打印效果

4.配置通用定时器tim5

配置TIM4

PB6和pb12都是tim4的复用引脚线 我们可以在修改PB6为tim4如下 要查看对应的原理图


修改中断优先级

导出项目工程

配置烧录自动复位重启


添加支持的c语言库文件

三,编写代码

1、重新fput.c 在uart.c里面书写

c 复制代码
#include <stdio.h> // 导入c库文件
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
  return ch;
}

2.在stm32f1xx_it.c 里面重新回调中断函数

c 复制代码
uint16_t cycle = 0;
uint8_t intCount = 0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance == TIM4 && htim->Channel == TIM_CHANNEL_1)
  {
    intCount++;
    if(intCount == 1)
    {
      // 第一个捕获值(上升沿),清零计数器
      __HAL_TIM_SetCounter(&htim4,0);
    }
    else if(intCount == 2)
    {
      // 第二个捕获值(上升沿),读取CCR的值,交给cycle
      cycle = __HAL_TIM_GetCompare(&htim4, TIM_CHANNEL_1);
      intCount = 0;
    }
  }
}

// 计算PWM周期(单位:ms)
double TIM4_GetPWMCycle(void)
{
  return cycle / 1000.0;
}
// 计算PWM频率(单位:Hz)
double TIM4_GetpwmFreq(void)
{
  return 1000000.0 / cycle;
}

在main里面添加内容

c 复制代码
 HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_2);
  HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_1);


  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    printf("PWM周期:%f ms\n", TIM4_GetPWMCycle());
    printf("PWM频率:%f Hz\n", TIM4_GetpwmFreq());

    HAL_Delay(1000);

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
相关推荐
LCG元11 小时前
STM32项目实战:基于STM32F103的智能农业监控系统
stm32·单片机·嵌入式硬件
Truffle7电子13 小时前
STM32CubeIDE/Programmer/Touch GFX 应用
stm32·单片机·嵌入式硬件
constant_LDX14 小时前
步进电机开发(一、硬件设计)
单片机·嵌入式硬件
richxu2025100114 小时前
嵌入式学习之路->stm32篇->(14)通用定时器(上)
stm32·单片机·嵌入式硬件·学习
Deitymoon14 小时前
STM32——串口通信(USART)
单片机·嵌入式硬件
iCxhust14 小时前
微机原理实践教程(C语言篇)---A002流水灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·课程设计·微机原理
Deitymoon16 小时前
STM32——外部中断按键控制led
stm32·单片机·嵌入式硬件
czwxkn16 小时前
7STM32(stdl)flash内部闪存
stm32·单片机·嵌入式硬件
咕噜咕噜啦啦16 小时前
STlink下载程序
stm32·单片机
Deitymoon18 小时前
STM32——串口中断接收
stm32·单片机·嵌入式硬件