STM32F407 HAL库 PWM

PWM简介

脉冲宽度调制(PWM) 是一种数字信号,最常用于控制电路。该信号在预定义的时间和速度中设置为高(5v或3.3v)和低(0v)。通常,我们将PWM的高电平称为1,低电平为0。

T为一个PWM周期

T1为占空比

在这里插入图片描述

端口硬件配置

在这里插入图片描述

LED呼吸灯

在这里插入图片描述

PWM配置

Mode
Pulse (16 bits value) 占空比
Output compare preload 输出比较预加载

Fast Mode

CH Polarity 电平极性

在这里插入图片描述

测试代码

启动PWM

### STM32F407 使用 HAL 实现 PWM 功能 为了在 STM32F407 上使用 HAL 实现 PWM 输出,可以按照以下方式编写代码。此过程涉及初始化定时器并配置其通道以输出 PWM 波形。 #### 初始化 TIMx 定时器用于 PWM 输出 ```c #include "stm32f4xx_hal.h" TIM_HandleTypeDef htim3; void MX_TIM3_Init(void) { __HAL_RCC_TIM3_CLK_ENABLE(); // 配置定时器模式为向上计数 TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; htim3.Instance = TIM3; htim3.Init.Prescaler = 8399; // 设置预分频值 htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 999; // 自动重装载值 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 500; // 初始占空比设置 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } } ``` 上述代码展示了如何通过 `MX_TIM3_Init` 函数来初始化 TIM3 定时器,并将其配置成 PWM 模式[^1]。这里选择了 TIM3 的 Channel 1 来作为 PWM 输出端口。 #### 启动 PWM 输出 一旦完成了定时器的初始化工作,则可以通过调用下面的方法启动 PWM 输出: ```c if(HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1)!= HAL_OK){ Error_Handler(); } ``` 这段代码会激活 TIM3 的 CH1 进行 PWM 输出操作[^2]。 #### 修改 PWM 占空比 如果想要动态调整 PWM 的占空比,可利用如下函数来进行修改: ```c __weak void ChangePWMDutyCycle(uint32_t DutyCyclePercent) { uint32_t duty_cycle_value = ((DutyCyclePercent * htim3.Init.Period)/100); if(duty_cycle_value > htim3.Init.Period){ duty_cycle_value = htim3.Init.Period; }else if(duty_cycle_value < 0){ duty_cycle_value = 0; } __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, duty_cycle_value); } ``` 该方法接收一个百分比参数 (`DutyCyclePercent`) 并据此计算新的比较寄存器数值,从而改变实际输出波形中的高电平持续时间比例[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值