登录/注册

stm32f103 4路pwm捕获

更多

在STM32F103上实现4路PWM输入捕获的步骤如下:

1. 定时器选择

2. GPIO配置

以TIM2为例(PA0-PA3):

GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 浮空输入
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);

3. 定时器基础配置

TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

TIM_TimeBaseStruct.TIM_Prescaler = 71; // 72MHz/(71+1)=1MHz计数频率
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStruct.TIM_Period = 0xFFFF; // 自动重装载值
TIM_TimeBaseStruct.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStruct);

4. 输入捕获通道配置

TIM_ICInitTypeDef TIM_ICInitStruct;

// 通道1配置(PA0)
TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;
TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising; // 上升沿触发
TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1; // 无分频
TIM_ICInitStruct.TIM_ICFilter = 0x0; // 无滤波
TIM_ICInit(TIM2, &TIM_ICInitStruct);

// 重复上述配置修改通道号,配置CH2/CH3/CH4(PA1-PA3)

5. 中断配置

// 使能捕获中断
TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE);

// NVIC配置
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);

6. 中断服务函数

void TIM2_IRQHandler(void) {
  if(TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) { // CH1捕获
    static uint16_t prev_val = 0;
    uint16_t curr_val = TIM_GetCapture1(TIM2);
    uint16_t pulse_width = curr_val - prev_val;
    prev_val = curr_val;
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
  }
  // 类似处理CH2/CH3/CH4...
}

7. 启动定时器

TIM_Cmd(TIM2, ENABLE);

关键点说明:

  1. 输入模式选择

    • PWM输入模式:每个定时器只能测量2路PWM(需占用2个通道)
    • 普通输入捕获:可独立测量4路,需软件计算周期和占空比
  2. 信号测量原理

    • 上升沿捕获周期
    • 下降沿捕获占空比
    • 需要配置双沿触发时,需切换捕获极性
  3. 高频信号处理

    • 适当减小预分频值(TIM_Prescaler)提高分辨率
    • 使用DMA传输捕获值(需配置TIM_DMA_CCx)
  4. 资源冲突注意

    • 检查TIM2_CH1-CH4是否与其他外设复用
    • 部分封装型号可能缺少某些引脚

实际应用时需根据具体硬件连接调整引脚配置,建议参考对应型号的《参考手册》和《数据手册》确认引脚复用功能。

ch32v103stm32f103的区别

ch32v103与stm32f103的区别  Ch32v103与STM32f103

2023-08-22 15:49:00

STM32F103 PWM介绍

一、STM32F103 PWM介绍STM32F1除了基本定时器TIM6和TIM7,其他定时器都可以产生

2022-01-19 07:13:06

如何用STM32F103输出一PWM波形

STM32的PWM和DAC练习目录一、用STM32F103输出一路

2022-01-07 07:16:42

STM32F103输入捕获--按键

STM32F103输入捕获–按键文章目录STM32F103输入捕获--按

资料下载 刘伟 2021-11-30 13:51:12

STM32f103adDMA传输 软件转换资料压缩包

STM32f103八路adDMA传输 软件转换资料压缩包

资料下载 泥黎531 2021-10-22 10:29:00

基于STM32f103的输入捕获测频率和占空比

基于STM32f103的输入捕获测频率和占空比

资料下载 shyshyshy 2021-08-02 10:10:24

基于STM32f103的FFT频率测试程序下载

基于STM32f103的FFT频率测试程序下载

资料下载 shyshyshy 2021-08-02 10:07:20

基于STM32f103使用的DAC正弦波

基于STM32f103使用的DAC正弦波

资料下载 shyshyshy 2021-08-02 10:05:00

如何利用STM32F103的输入捕获模式去测量PWM输出波形频率呢

输入捕获模式有何功能?如何利用STM32F103的输入捕获模式去测量PWM

2021-12-13 07:13:52

怎样用STM32F103去输出一PWM波形呢

怎样用STM32F103去输出一路PWM波形呢?怎样去观察STM32F103

2021-11-15 07:10:53

STM32F103输出一PWM波形

这里写目录标题一、用STM32F103输出一路PWM波形二、用STM32

2021-08-17 09:25:20

STM32F103输出PWM波形

STM32的PWM和DAC练习STM32F103输出一路

2021-08-17 09:01:27

STM32F103输出PWM波形

STM32的PWM和DAC练习一、 用STM32F103输出一路

2021-08-17 06:29:16

STM32F103输出一PWM波形

STM32中的PWM和DAC1. 用STM32F103输出一路

2021-08-09 09:02:43

stm32输入捕获pwm输出同时工作

stm32输入捕获和pwm输出同时工作,一、 用STM32F103输出一

2021-08-09 06:55:13
7天热门专题 换一换
相关标签