【stm32】定时器输出PWM波形(hal库)
- 开源代码
- 2025-09-10 12:54:02

一. PWM基本原理
PWM是一种通过调节信号的占空比(Duty Cycle)来控制输出平均电压的技术。占空比是指高电平时间与整个周期时间的比值。例如: - 占空比为50%时,输出平均电压为电源电压的一半。 - 占空比为100%时,输出始终为高电平。
二、STM32定时器生成PWM的原理STM32的定时器可以通过以下步骤生成PWM信号: 1. 计数器:定时器内部有一个计数器,根据时钟源进行递增或递减计数。 2. 自动重装载寄存器(ARR):定义PWM信号的周期(频率)。 3. 比较寄存器(CCR):定义PWM信号的占空比。 4. 输出模式:定时器可以配置为在计数器值等于比较寄存器值时切换输出电平。
三、 PWM生成步骤以下是配置STM32定时器生成PWM的基本步骤: 1. 使能定时器时钟:通过RCC寄存器使能定时器的时钟。 2. 配置定时器模式: - 设置计数模式(向上、向下或中心对齐)。 - 配置预分频器(Prescaler)以调整计数器时钟频率。 - 设置自动重装载寄存器(ARR)以定义PWM周期。 3. 配置PWM模式: - 选择PWM模式(PWM模式1或PWM模式2)。 - 设置比较寄存器(CCR)以定义占空比。 4. 配置GPIO: - 将定时器的输出通道映射到特定的GPIO引脚。 - 配置GPIO为复用功能(Alternate Function)。 5. 启动定时器:使能定时器开始生成PWM信号。
四、 关键参数PWM频率:由定时器时钟频率、预分频器和自动重装载寄存器(ARR)决定 PWM频率 = 定时器时钟频率 / (预分频器 + 1) / (ARR + 1) 占空比:由比较寄存器(CCR)决定。 占空比 = (CCR + 1) / (ARR + 1)
五、代码 #include "PWM.h" TIM_HandleTypeDef PWM_InitStructure; TIM_OC_InitTypeDef PWM_InitStruct; void PWM_Init(void) { PWM_InitStructure.Instance = TIM1; PWM_InitStructure.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; PWM_InitStructure.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;//分频因子 PWM_InitStructure.Init.CounterMode = TIM_COUNTERMODE_UP;//计数模式:向上计数 PWM_InitStructure.Init.Period = 500 - 1;//自动重装载值ARR PWM_InitStructure.Init.Prescaler = 84 - 1;//分频系数PSC PWM_InitStructure.Init.RepetitionCounter = 0;//重复计数器 HAL_TIM_PWM_Init(&PWM_InitStructure); PWM_InitStruct.OCMode = TIM_OCMODE_PWM1; PWM_InitStruct.Pulse = (500 - 1)/2; PWM_InitStruct.OCPolarity = TIM_OCPOLARITY_HIGH; HAL_TIM_PWM_ConfigChannel(&PWM_InitStructure,&PWM_InitStruct,TIM_CHANNEL_1); HAL_TIM_PWM_Start(&PWM_InitStructure,TIM_CHANNEL_1); } void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM1) { __HAL_RCC_TIM1_CLK_ENABLE();//开启定时器1的时钟 __HAL_RCC_GPIOE_CLK_ENABLE();//开启GPIOE的时钟 TIM1_CH1---->PE9 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; //复用推挽输出 GPIO_InitStructure.Pin = GPIO_PIN_9; //引脚9 GPIO_InitStructure.Pull = GPIO_PULLUP; //上拉 GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; //超高速 GPIO_InitStructure.Alternate = GPIO_AF1_TIM1; //复用功能 HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); } } void TIM1_SetCompare(uint32_t compare) { TIM1->CCR1 = compare; }【stm32】定时器输出PWM波形(hal库)由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【stm32】定时器输出PWM波形(hal库)”