stm32f103c8t6的PWM输出代码
时间: 2025-05-21 18:29:57 浏览: 9
### STM32F103C8T6 PWM 输出示例代码
STM32F103C8T6 微控制器支持通过定时器外设生成脉宽调制 (PWM) 信号。以下是一个基于 HAL 库的示例代码,展示如何配置 TIM2 定时器以生成 PWM 波形。
#### 配置步骤概述
为了成功生成 PWM 信号,需要完成以下几个关键部分的设置:
1. **启用时钟**
在初始化过程中,必须打开与所选定时器相关的 APB 总线时钟[^5]。
2. **GPIO 引脚配置**
将要使用的 GPIO 引脚配置为复用推挽输出模式(`ALTERNATE FUNCTION PUSH-PULL`),以便它可以承载来自定时器通道的 PWM 信号[^6]。
3. **定时器参数设定**
设置预分频系数、自动重载寄存器值以及其他必要的计数器工作模式选项;这些都将直接影响最终输出波形频率及占空比特性[^7]。
4. **启动 PWM 模式**
最后一步就是激活对应定时器通道上的 PWM 功能,并确保其处于正常运行状态之下持续发送周期性的高低电平变化序列给连接的目标负载端子上去驱动它动作起来达到预期效果为止[^8]。
下面是具体的 C 语言实现例子:
```c
#include "stm32f1xx_hal.h"
TIM_HandleTypeDef htim2;
void MX_TIM2_PWM_Init(void){
__HAL_RCC_GPIOA_CLK_ENABLE(); // Enable clock for Port A
GPIO_InitTypeDef gpioInitStruct;
gpioInitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2;
gpioInitStruct.Mode = GPIO_MODE_AF_PP;
gpioInitStruct.Pull = GPIO_NOPULL;
gpioInitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &gpioInitStruct);
__HAL_RCC_TIM2_CLK_ENABLE();
htim2.Instance = TIM2;
htim2.Init.Prescaler = 8399; // Set prescaler to get desired frequency.
// Assuming system core clock is 72MHz,
// this will result in approximately 1kHz signal.
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999; // Define period as number of ticks per cycle minus one.
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.RepetitionCounter = 0;
if(HAL_TIM_PWM_Init(&htim2)!= HAL_OK){
Error_Handler();
}
TIM_OC_InitTypeDef sConfigOC ;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 500; // Initial duty cycle set at half-period mark i.e., ~50% DC initially.
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if(HAL_TIM_PWM_ConfigChannel(&htim2,&sConfigOC,TIM_CHANNEL_1|TIM_CHANNEL_2 )!= HAL_OK ){
Error_Handler();
}
}
int main(){
HAL_Init();
SystemClock_Config();
MX_TIM2_PWM_Init();
/* Start PWM signals generation */
if(HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1)!= HAL_OK ||
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2)!= HAL_OK ){
Error_Handler();
}
while(1){
// Main loop can be used for other tasks or remain empty depending on application needs.
}
}
```
上述代码实现了两个独立但同步工作的 PWM 信道分别位于 PA1 和 PA2 上,默认情况下它们都将以大约 1 kHz 的频率运作并且初始占空比被固定成接近百分之五十的位置处开始运转直至程序结束之前都不会再改变除非再次修改相关数值重新加载进去才行[^9].
---
阅读全文
相关推荐


















