stm32f103c8t6pwm引脚
时间: 2025-01-05 15:33:43 浏览: 9
### STM32F103C8T6 PWM 引脚配置及用法
STM32F103C8T6 是一款基于 ARM Cortex-M3 内核的微控制器,支持多种外设功能,其中包括脉宽调制 (PWM) 功能。该芯片具有多个定时器可以用于生成 PWM 波形。
#### 定时器与对应引脚映射关系
对于 STM32F103C8T6 而言,不同定时器对应的 PWM 输出通道及其关联 GPIO 引脚如下表所示:
| 定时器 | 通道 | 默认复用功能引脚 |
| --- | --- | --- |
| TIM1_CH1 | PA8 | AF1 |
| TIM1_CH2 | PE9 | AF1 |
| TIM1_CH3 | PE11 | AF1 |
| TIM1_CH4 | PE13 | AF1 |
| TIM2_CH1 | PA0/ETR | AF1 |
| TIM2_CH2 | PA1/I2S3_CK | AF1 |
| TIM2_CH3 | PA2/TIM5_ETR | AF1 |
| TIM2_CH4 | PA3/SWDIO | AF1 |
| TIM3_CH1 | PB4 | AF2 |
| TIM3_CH2 | PB5 | AF2 |
| TIM3_CH3 | PB0 | AF2 |
| TIM3_CH4 | PB1 | AF2 |
请注意,默认情况下某些引脚可能被分配给其他外设,在实际应用中需通过重映射来改变这些默认设置[^1]。
#### 配置过程概述
为了使能并正确配置 PWM 功能,通常需要执行以下几个方面的操作:
- **初始化 RCC**:开启相应外设时钟。
- **GPIO 初始化**:设定要使用的 GPIO 引脚模式为复用推挽输出,并指定其作为特定定时器通道的功能输入。
- **TIMx 初始化结构体填充**:定义计数方向、周期值等参数;
- **CCMRx 寄存器配置**:确定比较方式以及极性选择;
- **启动 PWM 输出**:最后一步则是激活所选通道上的 PWM 输出信号。
下面给出一段简单的代码示例以展示如何利用 HAL 库实现上述流程中的部分环节:
```c
// 假定使用 TIM3 CH1(PB4),频率为72MHz,占空比初始为50%
__HAL_RCC_TIM3_CLK_ENABLE(); // 开启 TIM3 的时钟
__HAL_RCC_GPIOB_CLK_ENABLE(); // 开启 GPIOB 的时钟
GPIO_InitTypeDef GPIO_InitStruct = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
/* 配置PB4为AF2 */
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
htim3.Instance = TIM3;
htim3.Init.Prescaler = 71; /* 设置预分频系数 */
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 999; /* 设置自动装载寄存器ARR=999*/
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if(HAL_TIM_PWM_Init(&htim3)!= HAL_OK){
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if(HAL_TIM_PWM_ConfigChannel(&htim3,&sConfigOC,TIM_CHANNEL_1) != HAL_OK){
Error_Handler();
}
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
```
阅读全文