14.3 高级定时器项目:PWM互补输出实验
# 14.3 高级定时器项目:PWM互补输出实验
本实验通过STM32的高级定时器TIM1生成带死区时间的互补PWM信号,结合示波器验证波形参数,并通过OLED实时显示中断计数。
核心功能:
- 互补PWM输出:TIM1_CH1(PA8)与TIM1_CH1N(PB13)输出互补信号。
- 死区时间控制:避免上下桥臂直通,确保电路安全。
- 频率与占空比调节:PWM频率150kHz,占空比可调。
# 14.3.1 STM32CubeMX配置
# 1. 基础配置
- 工程设置:芯片型号
STM32F103C8T6
,主频72MHz,调试接口SWD。 - TIM1配置:
- 模式:PWM Generation CH1 + CH1N(互补输出)。
- 引脚:PA8(TIM1_CH1)、PB13(TIM1_CH1N)。

# 2. 定时器参数
- 预分频器(PSC):0 → 时钟频率72MHz。
- 自动重装载值(ARR):480 → PWM频率150kHz。
- 占空比(Pulse):200(约41.67%)。
- 死区时间(Dead Time):43 → 0.597μs。

# 3. 死区时间管理
- 刹车功能:禁用。
- 输出状态:OSSR/OSSI禁用,确保通道禁用时输出低电平。
- 锁定配置:关闭写保护。

# 14.3.2 软件设计
# 1. TIM1初始化(代码清单14‑2)
static void MX_TIM1_Init(void) {
htim1.Instance = TIM1;
htim1.Init.Prescaler = 0; // 预分频0,时钟72MHz
htim1.Init.Period = 480; // PWM周期480,频率150kHz
htim1.Init.CounterMode = TIM_COUNTERMODE_UP; // 向上计数
TIM_OC_InitTypeDef sConfigOC = {
.OCMode = TIM_OCMODE_PWM1, // PWM模式1
.Pulse = 200, // 初始占空比200(41.67%)
.OCPolarity = TIM_OCPOLARITY_HIGH // 高电平有效
};
// 配置死区时间
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {
.DeadTime = 43, // 死区时间43个时钟周期
.BreakState = TIM_BREAK_DISABLE // 禁用刹车功能
};
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 2. 主函数(代码清单14‑3)
int main(void) {
HAL_Init();
MX_GPIO_Init();
MX_TIM1_Init();
MX_I2C1_Init();
OLED_Init();
// 启动PWM及互补输出
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
while (1) {
OLED_NewFrame();
OLED_PrintString(1, 1, "PWM Complementary", &font16x16, OLED_COLOR_NORMAL);
OLED_ShowFrame();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 3. 中断回调函数(代码清单14‑4)
long int counter = 0;
char message[20];
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim == &htim1) {
counter++;
if (counter == 150000) { // 约1秒
counter = 0;
sprintf(message, "Count: %d", i++);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 14.3.3 下载验证
# 现象与步骤
- 烧录程序:通过ST-LINK下载代码至开发板。
- 示波器观测:
- PA8(TIM1_CH1):PWM波形,频率149.7kHz,占空比41.67%。
- PB13(TIM1_CH1N):互补PWM波形,死区时间约600ns。
- OLED显示:每秒更新中断计数(如
Count: 5
)。

关键说明:
- 频率计算:
- 死区时间:43个时钟周期对应约0.597μs(72MHz时钟)。
- 应用场景:适用于电机驱动、半桥/全桥电路等需避免直通的场景。