stm32f103c8t6定时器2 pwm
时间: 2025-01-16 17:10:38 浏览: 93
### 使用 STM32F103C8T6 定时器2配置 PWM 输出
#### 初始化定时器2
为了使能并初始化 TIM2,需先通过 `__HAL_RCC_TIM2_CLK_ENABLE()` 函数开启定时器2的时钟。接着创建一个 `TIM_HandleTypeDef` 类型的对象来保存定时器句柄。
```c
// 开启定时器2时钟
__HAL_RCC_TIM2_CLK_ENABLE();
// 创建定时器句柄结构体实例
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
// 调用 HAL 库中的初始化函数
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) {
// 错误处理代码...
}
```
#### 配置PWM通道
对于 TIM2 的 PWM 功能来说,可以选择不同的 GPIO 引脚作为输出端口。常见的选项包括 PA0、PA1 和 PA2 等引脚[^3]。这里假设选择 PA0 作为 PWM 输出引脚,则需要将其设置为复用推挽输出模式,并关联到 TIM2_CH1 上:
```c
GPIO_InitStruct.Pin = GPIO_PIN_0; /* 设置为PA0 */
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出 */
GPIO_InitStruct.Pull = GPIO_NOPULL; /* 不上拉不下拉 */
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/* 高速*/
HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); /* 初始化GPIO*/
/* 将PA0映射至TIM2 CH1 */
__HAL_AFIO_REMAP_TIM2_PARTIAL();
```
#### 设定PWM参数
设定好硬件资源之后就可以开始定义具体的PWM波形特性了。这一步骤涉及到对计数器周期(自动重装载值 ARR)以及比较匹配值 CCR 进行赋值。下面是一个简单的例子展示如何实现这一点:
```c
uint32_t periodValue = SystemCoreClock / 1000 - 1 ; // 计算ARR值,此处设定了载频约为1kHz
uint32_t pulseWidth = periodValue * dutyCycle / 100;// 根据期望占空比计算CCR值
// 构建PWM配置项
PWM_Config.Channel = TIM_CHANNEL_1;
PWM_Config.Pulse = pulseWidth ;
PWM_Config.Period = periodValue;
PWM_ConfigAlignedMode = TIM_OC_ALIGNMENT_EDGE;
PWM_Config.OCPolarity = TIM_OCPOLARITY_HIGH ;
// 启动PWM输出前加载预分频系数和自动重装载寄存器更新请求
__HAL_TIM_SET_AUTORELOAD(&htim2 ,periodValue);
__HAL_TIM_SET_COUNTER (&htim2 ,0);
// 更新定时器全局变量以反映新的PWM配置
if(HAL_TIM_PWM_ConfigChannel(&htim2,&PWM_Config,TIM_CHANNEL_1)!= HAL_OK){
// 错误处理代码...
}
// 最后启动PWM输出
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
```
以上就是利用STM32CubeMX配合HAL库完成基于STM32F103C8T6芯片上的TIM2外设生成PWM信号的主要流程[^1]。
阅读全文
相关推荐


















