STM32F103C6T6(中等容量)所有定时器的引脚分配表

以下是 STM32F103C6T6(中等容量)所有定时器的引脚分配表,按定时器类型分类,并标注默认功能和复用选项:


📌 定时器引脚分配表(STM32F103C6T6)

1. 高级定时器 (TIM1)

通道 主引脚 默认功能 部分重映射 完全重映射
TIM1_CH1 PA8 PWM输出 - -
TIM1_CH2 PA9 PWM输出/USART1_TX - -
TIM1_CH3 PA10 PWM输出/USART1_RX - -
TIM1_CH4 PA11 PWM输出/USB_DM - -
TIM1_BKIN PB12 刹车输入 - -

⚠️ 注意:TIM1 的 PA9/PA10 默认与 USART1 复用,需避免冲突。


2. 通用定时器 (TIM2/TIM3/TIM4)

TIM2(32位定时器)
通道 主引脚 默认功能 部分重映射
TIM2_CH1 PA0 PWM输出/WKUP PA15 (需重映射)
TIM2_CH2 PA1 PWM输出/ADC1_IN1 -
TIM2_CH3 PA2 PWM输出/USART2_TX -
TIM2_CH4 PA3 PWM输出/USART2_RX -
TIM3
通道 主引脚 默认功能 部分重映射 完全重映射
TIM3_CH1 PA6 PWM输出 PB4 (需重映射) PC6 (仅大容量型号)
TIM3_CH2 PA7 PWM输出 PB5 PC7
TIM3_CH3 PB0 PWM输出 PB6 PC8
TIM3_CH4 PB1 PWM输出 PB7 PC9
TIM4
通道 主引脚 默认功能 部分重映射
TIM4_CH1 PB6 PWM输出 PD12 (仅大容量型号)
TIM4_CH2 PB7 PWM输出 PD13
TIM4_CH3 PB8 PWM输出 PD14
TIM4_CH4 PB9 PWM输出 PD15

🔍 重映射说明

  • 使用 GPIO_PinRemapConfig() 启用重映射(需先开启 AFIO 时钟)。
  • 部分重映射仅改变部分通道引脚,完全重映射需芯片支持(STM32F103C6T6不支持完全重映射)。

3. 基本定时器 (TIM6/TIM7)

  • TIM6/TIM7:无PWM输出功能,仅用于定时中断或触发DAC,无专用引脚

📌 关键注意事项

  1. 复用冲突

    • PA9/PA10(TIM1_CH2/CH3)默认与 USART1 复用,需避免同时启用。
    • PB3/PB4(TIM3_CH1/CH2重映射)默认是JTAG引脚,需禁用JTAG:
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);  // 禁用JTAG,保留SWD
      
  2. 时钟使能

    • 定时器时钟:
      • TIM1/2/3/4 → RCC_APB1PeriphClockCmd()(TIM1在APB2)
      • TIM6/7 → RCC_APB1PeriphClockCmd()
    • GPIO时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx | RCC_APB2Periph_AFIO, ENABLE)
  3. PWM频率计算
    [
    f_{PWM} = \frac{72MHz}{(PSC + 1) \times (ARR + 1)}
    ]


📝 示例代码(TIM3_CH1 PWM输出)

// 启用TIM3和GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

// 配置PA6为复用推挽输出
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);

// 配置TIM3 PWM(1kHz频率,50%占空比)
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
TIM_TimeBaseStruct.TIM_Period = 999;      // ARR = 999
TIM_TimeBaseStruct.TIM_Prescaler = 71;   // PSC = 71 (72MHz/72=1MHz)
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct);

TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse = 500;        // CCR1 = 500 (50%占空比)
TIM_OC1Init(TIM3, &TIM_OCInitStruct);

TIM_Cmd(TIM3, ENABLE);

🔧 验证方法

  1. 硬件连接:PA6 → LED → GND(串联220Ω电阻)。
  2. 示波器:测量PA6波形,确认是否为1kHz方波。
  3. 动态调光:修改 TIM3->CCR1 值(0~999)观察亮度变化。

🚨 常见问题

问题 原因 解决方案
无PWM输出 GPIO模式错误 检查是否为 GPIO_Mode_AF_PP
引脚无反应 未启用定时器时钟 调用 RCC_APB1PeriphClockCmd()
频率不正确 ARR/PSC计算错误 重新计算周期和分频值

🎯 总结

  • TIM1:高级功能(互补输出、刹车),引脚固定。
  • TIM2/3/4:灵活PWM输出,支持部分重映射。
  • TIM6/7:无引脚,仅用于定时。
  • 关键点:复用冲突、时钟使能、重映射配置。

按此配置可充分利用STM32F103C6T6的定时器资源! 🚀

posted @ 2025-08-17 08:05  xyx_3v  阅读(109)  评论(0)    收藏  举报