stm32f103c8t6测量pwm频率hal库
时间: 2025-01-08 22:46:48 浏览: 45
### 使用 HAL 库在 STM32F103C8T6 上测量 PWM 频率
为了使用 HAL 库在 STM32F103C8T6 开发板上测量 PWM 信号的频率,可以采用输入捕获模式。这种方法能够精确捕捉到 PWM 波形的上升沿或下降沿的时间间隔,从而计算出其周期和频率。
#### 输入捕获配置
首先需要配置定时器进入输入捕获模式。这可以通过 CubeMX 工具完成基本设置:
- 打开CubeMX并创建新项目,选择目标芯片为STM32F103C8Tx。
- 添加TIMx外设用于捕获PWM波形,并将其通道配置成IC(Input Capture)模式。
- 设置时基单元参数以确保足够的分辨率来检测预期范围内的PWM频率。
- 启用HSE作为系统时钟源[^2],因为不启用可能会导致输出异常。
#### 编写代码实现测量功能
以下是基于上述硬件配置编写的简单示例程序片段,展示了如何读取PWM脉冲宽度进而求得频率值:
```c
#include "main.h"
// 定义全局变量存储捕获时间戳
uint32_t capture_value_prev = 0;
uint32_t capture_value_curr = 0;
void TIM2_IRQHandler(void){
/* 清除中断标志 */
__HAL_TIM_CLEAR_IT(&htim2, TIM_IT_CC1);
// 获取当前时刻计数值
capture_value_curr = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);
if (capture_value_prev != 0) {
uint32_t period_ticks = abs(capture_value_curr - capture_value_prev);
float freq_hz = SystemCoreClock / ((float)(period_ticks * htim2.Init.Prescaler + 1));
printf("Measured Frequency: %.2f Hz\n",freq_hz);
}
// 更新前一次捕获时间为本次
capture_value_prev = capture_value_curr;
}
int main(void){
...
}
```
此段代码实现了当接收到PWM边沿触发事件时调用`TIM2_IRQHandler()`函数处理逻辑,在其中获取两次相邻边缘之间经过了多少个时钟周期数(`period_ticks`),再结合系统的主频(SystemCoreClock),即可算出实际发生的PWM频率。
阅读全文
相关推荐


















