通用定时器 输入捕获 +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 */
}
相关推荐
清风6666661 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
azwsm2 小时前
电路元器件和GPIO控制器
单片机·嵌入式硬件
kebidaixu5 小时前
FreeRTOS 移植到 STM32F407VETX 记录(一)
stm32·单片机·嵌入式硬件
半条-咸鱼6 小时前
【INACCESSIBLE_BOOT_DEVICE】安装 Config Tool 后 Windows 蓝屏,最终通过 VMware 虚拟机解决
windows·stm32·vmware·芯片
点灯小铭6 小时前
基于单片机的数码管定时插座设计与定时开关功能实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
数智工坊8 小时前
机器人四大主控板系统分层选型指南:树莓派、ESP32、STM32与Arduino的能力边界与实战定位
stm32·嵌入式硬件·机器人
某林2129 小时前
跨越底层与AI的鸿沟:ROS2+多模态大模型(Qwen-VL)机器人全链路排障实录
人工智能·stm32·机器人·人机交互·ros2·技术复盘
点灯小铭9 小时前
基于单片机的多模式智能洗衣机设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
项目題供诗9 小时前
STM32-AD单通道&AD多通道(十九)
stm32·单片机·嵌入式硬件
南岸的水10 小时前
BMS国标充电解析
单片机·嵌入式硬件·mcu