You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32L151 CubeIDE下AFIO14复用PC13为TIM输入捕获引脚的实现

STM32L151 CubeIDE中利用AFIO14将PC13配置为TIM_IC2输入捕获引脚

一、CubeIDE图形化基础配置

  1. 新建STM32L151工程,完成时钟树配置,确保APB1总线时钟正常,TIM5挂载于APB1。
  2. 配置TIM5输入捕获基础参数:
    • 进入Timers -> TIM5,设置Clock Source为Internal Clock。
    • 切换到Input Capture标签页,启用CH2通道,根据需求设置捕获极性(如上升沿)、预分频器、滤波器等参数。
  3. 配置PC13引脚:
    • 进入GPIO配置页,将PC13设置为Alternate Function Mode,输入类型选Floating Input(或根据信号特性选上拉/下拉),设置对应速度等级。
    • 注意:CubeIDE图形界面无法直接选择AF14,需后续手动配置寄存器完成复用映射。

二、手动配置AFIO复用映射(关键步骤)

STM32L1中TIM5_CH2重映射到PC13需通过SYSCFG寄存器配置,需在初始化阶段添加以下代码:

// 使能SYSCFG时钟
__HAL_RCC_SYSCFG_CLK_ENABLE();
// 将TIM5_CH2重映射到PC13(对应AFIO14)
SYSCFG->CFGR1 |= SYSCFG_CFGR1_TIM5CH2_REMAP;

三、完整代码示例

1. TIM5初始化函数(CubeIDE生成后补充)

void MX_TIM5_Init(void)
{
  TIM_HandleTypeDef htim5;
  TIM_IC_InitTypeDef sConfigIC = {0};

  // TIM5核心配置
  htim5.Instance = TIM5;
  htim5.Init.Prescaler = 31; // 假设APB1时钟为32MHz,分频后计数频率1MHz
  htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim5.Init.Period = 0xFFFF; // 最大计数周期
  htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_IC_Init(&htim5) != HAL_OK)
  {
    Error_Handler();
  }

  // 输入捕获通道2配置
  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
  sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  sConfigIC.ICFilter = 0; // 无滤波,可按需调整
  if (HAL_TIM_IC_ConfigChannel(&htim5, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
  {
    Error_Handler();
  }

  // 使能TIM5捕获中断
  HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_2);
}

2. GPIO初始化补充(指定AF14)

void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  // 使能GPIOC时钟
  __HAL_RCC_GPIOC_CLK_ENABLE();

  // PC13复用功能配置
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.Alternate = GPIO_AF14_TIM5; // 手动指定AF14映射
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}

3. 捕获中断回调函数

uint32_t capture_value = 0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance == TIM5 && htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
  {
    // 读取捕获值
    capture_value = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
    // 此处添加自定义处理逻辑(如计算频率、脉宽)
    __HAL_TIM_SET_COUNTER(htim, 0); // 重置计数器,准备下一次捕获
  }
}

四、注意事项

  • 必须确保SYSCFG时钟已使能,否则寄存器配置无效。
  • PC13的AF14仅对应TIM5_CH2,需确认定时器通道与业务需求匹配。
  • 输入捕获的预分频器、滤波器等参数需根据实际信号特性调整。

内容的提问来源于stack exchange,提问作者Kuno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:53:28