登录/注册

stm32 pwm初始化

更多

以下是 STM32 PWM 初始化的通用步骤(以标准库为例):


1. 开启时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx, ENABLE);  // 开启定时器时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE); // 开启GPIO时钟

2. 配置GPIO为复用推挽输出

GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_x;        // PWM输出引脚(如PA0)
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;  // 复用推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOx, &GPIO_InitStruct);

3. 初始化定时器时基

TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
TIM_TimeBaseStruct.TIM_Period = ARR;          // 自动重装载值 (决定PWM频率)
TIM_TimeBaseStruct.TIM_Prescaler = PSC;       // 预分频系数
TIM_TimeBaseStruct.TIM_ClockDivision = 0;
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数
TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStruct);

4. 配置PWM模式

TIM_OCInitTypeDef TIM_OCStruct;
TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1;     // PWM模式1
TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable; // 使能输出
TIM_OCStruct.TIM_Pulse = CCR;                  // 占空比 (CCR值)
TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性
TIM_OCxInit(TIMx, &TIM_OCStruct);              // x对应通道1/2/3/4

5. 启动PWM输出

TIM_Cmd(TIMx, ENABLE);        // 使能定时器
TIM_CtrlPWMOutputs(TIMx, ENABLE); // 高级定时器需要此句(如TIM1)

关键参数说明


示例代码(TIM3通道1,PA6输出)

// 初始化时钟和GPIO
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);

// 配置定时器
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
TIM_TimeBaseStruct.TIM_Period = 999;         // ARR = 999
TIM_TimeBaseStruct.TIM_Prescaler = 71;       // PSC = 71
TIM_TimeBaseStruct.TIM_ClockDivision = 0;
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct);

// 配置PWM通道1
TIM_OCInitTypeDef TIM_OCStruct;
TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCStruct.TIM_Pulse = 500;               // 占空比50%(500/1000)
TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCStruct);

// 启动定时器
TIM_Cmd(TIM3, ENABLE);

注意事项

  1. 使用高级定时器(如TIM1)需额外调用 TIM_CtrlPWMOutputs(TIMx, ENABLE)
  2. 修改占空比可通过 TIM_SetComparex(TIMx, CCR) 动态调整
  3. 使用HAL库时流程类似,需调用 HAL_TIM_PWM_Start() 等函数

GraniStudio:初始化例程

1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入初始化例程,点击导入按钮。 打开初始化例程所在路径,选中初始化

2025-08-22 16:45:41

STM32F407 MCU使用SD NAND 不断电初始化失效解决方案

STM32F407微控制器单元(MCU)与SD NAND的结合提供了强大的存储解决方案。然而,不断电初始化失效问题可能会导致系统稳定性和数据完整性受损。我们将

2024-12-11 10:51:58

STM32CubeMx入门教程(4):PWM应用

导语“使用STM32CubeMx配置定时器输出PWM波,生成初始化代码。”

2023-07-11 15:23:59

STM32CubeMX用于STM32配置和初始化C代码生成

电子发烧友网站提供《STM32CubeMX用于STM32配置和初始化C代码生成.pdf》资料免费下载

资料下载 jf_50251555 2025-02-26 17:32:14

DB2163_STM32配置和初始化C代码生成

DB2163_STM32配置和初始化C代码生成

资料下载 吴藩 2022-11-23 20:29:41

STM32执行代码初始化卡住,或者上电卡住,或者复位卡住,导致代码不执行

STM32的板子上电或者复位,接有显示屏或者LED指示灯的都会卡住解决:1、检查自己的代码是否有中断,有中断的话,其初始化放在其他硬件初始化之后

资料下载 佚名 2021-12-09 09:21:14

Armlinux内核移植及系统初始化过程分析

Armlinux内核移植及系统初始化过程分析说明。

资料下载 姚小熊27 2021-04-06 15:53:04

在51平台下初始化文件的引入导致全局变量无法初始化的问题如何解决

本文档的主要内容详细介绍的是在51平台下初始化文件的引入导致全局变量无法初始化的问题如何解决。

资料下载 鼠爱米 2019-08-20 17:31:00

使用STM32CubeMX生成初始化代码

我使用STM32CubeMX生成初始化代码,使用LL库,这里只介绍跟i2c相关的部分,其他必要的初始化需要自己完成。芯片使用

2023-03-22 15:26:14

RT-Thread自动初始化详解

我们知道,在写裸机程序时,当我们完成硬件初始化后,就需要在主函数中进行调用。当我们使用RT-Thread后,完全不需要这样做了,我们可以将硬件等自动初始化。 RT-Thread 自动

2022-06-25 21:38:01

RT-Thread自动初始化机制

  在分析之前首先查阅 RT-Thread 的官方文档 [RT-Thread 自动初始化机制](https://www.rt-thread.org/document/site

2022-06-17 08:52:11

stm32系统时钟初始化

stm32系统时钟初始化解析系统初始化函数系统初始化函数注:该

2021-08-10 07:37:29

C++之初始化列表学习的总结

类中可以使用初始化列表对成员进行初始化。

2020-12-24 17:39:54

stm32pwm和USART初始化影响和can单发ID的接收疑问

本帖最后由 lipeilipei 于 2019-12-10 17:06 编辑 1,main函数里,stm32的串口初始化和pwm

2019-12-10 15:12:18

霍尔无刷电机如何进行程序初始化

频率下的振荡周期的16倍2. 对PWM模块进行初始化,对PWM模块进行初始化

2019-10-15 17:29:50

7天热门专题 换一换
相关标签