这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32WBA55PWM控制LED灯亮度任务1

共1条 1/1 1 跳转至

STM32WBA55PWM控制LED灯亮度任务1

助工
2025-01-19 13:44:14     打赏
#include "main.h"  // 确保包含了所有必要的头文件
 
TIM_HandleTypeDef htim2;
uint16_t dt;  // 定义用于设置占空比的变量
 
// 初始化TIM2的PWM功能
static void MX_TIM2_Init(void)
{
    TIM_MasterConfigTypeDef sMasterConfig = {0};
    TIM_OC_InitTypeDef sConfigOC = {0};
 
    htim2.Instance = TIM2;
    htim2.Init.Prescaler = 16 - 1;  // 预分频器设置
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;  // 向上计数模式
    htim2.Init.Period = 999;  // PWM周期
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
    {
        Error_Handler();  // 初始化失败处理
    }
 
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
    {
        Error_Handler();  // 同步配置失败处理
    }
 
    sConfigOC.OCMode = TIM_OCMODE_PWM1;  // PWM模式1
    sConfigOC.Pulse = 500;  // 初始占空比
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;  // 高电平有效
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
    {
        Error_Handler();  // PWM通道配置失败处理
    }
 
    HAL_TIM_MspPostInit(&htim2);  // 调用MspPostInit函数
}
 
// 主函数
int main(void)
{
    HAL_Init();  // 初始化HAL库
    SystemClock_Config();  // 配置系统时钟(该函数应在其他地方定义)
    MX_GPIO_Init();  // 初始化GPIO(该函数应在其他地方定义)
    MX_TIM2_Init();  // 初始化TIM2
 
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);  // 启动PWM输出
 
    while (1)
    {
        // 增加占空比
        for (dt = 1; dt < 500; dt++)
        {
            __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, dt);  // 设置占空比
            HAL_Delay(1);  // 延时1毫秒(注意:这里使用了HAL_Delay而不是delay_ms)
        }
 
        // 减少占空比
        for (dt = 499; dt > 0; dt--)
        {
            __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, dt);  // 设置占空比
            HAL_Delay(1);  // 延时1毫秒
        }
 
        // 可以在这里添加其他用户代码
        MX_APPE_Process();  // 假设这是你的应用处理函数
    }
}
 
// 错误处理函数(应在其他地方定义)
void Error_Handler(void)
{
    // 用户可以在这里添加自己的错误处理代码
    while (1)
    {
        // 停止在这里
    }
}
// 其他必要的初始化函数(如SystemClock_Config和MX_GPIO_Init)应在其他地方定义

新建NUCLEO-WBA55MX工程,并设置好定时器的PWM输出功能:

1737265306684.jpg

设置好后,点击生成KEIL工程与版本目录:

5W)62LKL]~I~H[}$(TSEQ}K.png

配置PWM2通道4

LZ$83S91GZ5{$4`P_$@(SEH.png

GPIO口为PA6

image.png

PA6引脚连接图:


image.png

KEIL定时器2通道4使能:

image.png



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]