stm32f103c8t6 PWM 输出
时间: 2025-01-24 19:06:27 浏览: 61
### STM32F103C8T6 PWM 输出配置及使用教程
#### 配置定时器用于PWM输出
STM32F103C8T6支持通过多个定时器实现PWM功能,常用的有TIM1, TIM2, TIM3等。为了使能特定定时器的时钟,在初始化阶段需调用`RCC_APB1PeriphClockCmd()` 或 `RCC_APB2PeriphClockCmd()` 函数来开启相应外设的时钟供应[^1]。
```c
// 开启TIM2时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
```
#### 设置自动重装载值与周期数
对于PWM信号而言,其占空比由比较寄存器中的数值决定;而频率则取决于ARR(Auto Reload Register)。设定合适的预分频系数PSC(Prescaler) 和 自动重载值 ARR 可以调整PWM波形的频率[^2]。
```c
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 999; // 周期= (ARR+1)*时钟周期
TIM_TimeBaseStructure.TIM_Prescaler = 7199;// PSC+1倍系统时钟得到期望频率
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
```
#### 启用通道并设置模式
接下来要指定哪个GPIO引脚作为PWM输出端口,并将其映射到对应的定时器通道上。之后再利用`TIM_OCInit()`函数定义该通道的工作方式——这里选择PWM1 Mode[^3]。
```c
GPIO_InitTypeDef GPIO_InitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
// PA1 连接到 TIM2 CH2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_Pulse = 499; // 占空比=(CCR/ARR)*100%
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
```
#### 启动PWM输出
完成上述配置后只需简单地启用所选定时器即可开始PWM输出操作。这一步骤可通过调用`TIM_Cmd()` 来达成目的[^4]。
```c
TIM_Cmd(TIM2, ENABLE);
```
阅读全文
相关推荐


















