通用定时器 输入捕获 +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 */
}
相关推荐
企鹅的蚂蚁5 小时前
Zephyr RTOS 常用 API 详解:从 GPIO、线程到 CAN FD(附 STM32/FreeRTOS 对照)
stm32·单片机·嵌入式硬件·rtos·zephyr
2501_922639581 天前
率能半导体 SS6285L直流双向马达驱动芯片:18V/5A,覆盖电子锁、按摩仪、电动玩具、机器人四大应用场景
单片机·嵌入式硬件·硬件工程
铅笔小新z1 天前
【stm32】输入捕获-超声波测距
stm32·单片机·嵌入式硬件
Zw-awa1 天前
PID 的花样:先看懂模糊 PID 和单神经元自适应 PID
stm32
菩提树下的凡夫1 天前
机器视觉LED光源控制器
单片机·嵌入式硬件
铅笔小新z1 天前
【stm32】全彩led灯(PWM)
stm32·单片机·嵌入式硬件
小鸡脚来咯1 天前
【无标题】
单片机·嵌入式硬件
澄纸气1 天前
STM32 外部中断实战:对射式计数器和编码器计数器,两个实验跑通 EXTI
stm32·单片机·嵌入式硬件
2501_922639581 天前
率能半导体 SS6286L直流双向马达驱动芯片:18V/7A,覆盖电子锁、玩具、无线充电、机器人四大应用场景
stm32·单片机·嵌入式硬件·硬件工程
搁浅小泽1 天前
IGBT 与散热片间未加绝缘垫片导致桥臂直通原理分析
单片机·嵌入式硬件·设计规范