HAL库生成PWM波且占可比可调

这里我的任务即生成一个100HZ的PWM,且占空比可调,通过按键PC13 PIN。

外部输入8MHz的晶振,使用tim3的时钟,将其总线时钟设置成80MHz,即其时钟树配置成80MHz。时钟树配置自行百度,资料有很多。我使用的是官方核心板如图所示。

打开cubmx软件,选择tim3,相关配置如图所示。生成pwm频率Fre=tim总线时钟/预分配数*计数器数

 图  cubmx配置界面

 生成MDK文件。

 在main.c中该软件自动帮你生成定时器3初始化函数,下图为函数声明,初始化在main函数中

stm32l4xx_hal_tim.h库中找到相应的hal库函数来初始化pwm。

并编写按键检测程序,按键按下则占空比增加10%,初始占空比为0,满占空比为1000。__HAL_TIM_SET_COMPARE该函数也在stm32l4xx_hal_tim.h库中。 

下载到板卡上,对其进行测试并通过逻辑分析仪来观察其占空比变化。逻辑分析仪的使用方法链接:https://blog.csdn.net/qq_16519885/article/details/112463509

按一下按键,测得10%占空比 ;当再按了两下后,占空比为30%。频率都为100Hz。

 

 

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于使用STM32HAL库输出PWM波形,您可以按照以下步骤进行操作: 1. 首先,确保您已经正确配置了定时器和GPIO引脚用于PWM输出。 2. 在代码中包含所需的头文件,例如 "stm32f4xx_hal.h"。 3. 初始化定时器和GPIO引脚,设置PWM波形的频率和占空比。 ```c // 初始化定时器 TIM_HandleTypeDef htim; htim.Instance = TIMx; // 替换为所需的定时器号,如TIM1、TIM2等 htim.Init.Prescaler = 0; htim.Init.Period = 1000; // 设置频率,这里为1kHz // 初始化PWM通道 TIM_OC_InitTypeDef sConfig; sConfig.OCMode = TIM_OCMODE_PWM1; sConfig.Pulse = 500; // 设置占空比,这里为50% sConfig.OCPolarity = TIM_OCPOLARITY_HIGH; sConfig.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim, &sConfig, TIM_CHANNEL_x); // 替换为所需的通道号,如TIM_CHANNEL_1、TIM_CHANNEL_2等 // 启动PWM输出 HAL_TIM_PWM_Start(&htim, TIM_CHANNEL_x); // 同样替换为所需的通道号 ``` 4. 如果您需要改变PWM占空比,可以使用以下函数: ```c // 修改PWM占空比 HAL_TIM_PWM_Stop(&htim, TIM_CHANNEL_x); // 先停止PWM输出 sConfig.Pulse = new_pulse_value; // 设置新的占空比值 HAL_TIM_PWM_ConfigChannel(&htim, &sConfig, TIM_CHANNEL_x); // 更新通道配置 HAL_TIM_PWM_Start(&htim, TIM_CHANNEL_x); // 重新启动PWM输出 ``` 5. 最后,您需要在主循环中保持代码的运行以保持PWM波形的输出。 请注意,上述示例代码中的变量和宏需要根据您的具体情况进行适当修改。此外,具体的定时器和通道号取决于您使用的STM32系列和型号。 希望这些信息对您有所帮助!如有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值