You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CC32xx开发板PWM占空比设置与LED闪烁代码修改求助

CC32xx 实现黄/绿LED交替PWM闪烁的代码修改方案

嘿,我看了你的代码和需求,其实很简单——你只需要调整循环里的逻辑,让它交替切换两种PWM占空比状态就行。现有代码里的duty和dutyInc是用来实现渐变亮度的逻辑,对你要的固定切换场景完全没用,我们可以直接去掉这些冗余部分,改成明确的状态切换逻辑。

修改后的完整代码

/*
 *  ======== pwmled2.c ========
 */
/* For usleep() */
#include <unistd.h>
#include <stddef.h>

/* Driver Header files */
#include <ti/drivers/PWM.h>

/* Driver configuration */
#include "ti_drivers_config.h"

/*
 *  ======== mainThread ========
 *  Task periodically toggles between two PWM duty cycle states for on-board LEDs.
 */
void *mainThread(void *arg0)
{
    /* Period and duty in microseconds */
    uint16_t   pwmPeriod = 3000;
    /* Sleep time in microseconds (1 second) */
    uint32_t   time = 1000000;
    PWM_Handle pwm1 = NULL;
    PWM_Handle pwm2 = NULL;
    PWM_Params params;

    /* Call driver init functions. */
    PWM_init();

    PWM_Params_init(&params);
    params.dutyUnits = PWM_DUTY_US;
    params.dutyValue = 0;
    params.periodUnits = PWM_PERIOD_US;
    params.periodValue = pwmPeriod;
    
    // 初始化PWM1(对应第一个LED)
    pwm1 = PWM_open(CONFIG_PWM_0, &params);
    if (pwm1 == NULL) {
        /* CONFIG_PWM_0 failed to open */
        while (1);
    }
    PWM_start(pwm1);

    // 初始化PWM2(对应第二个LED)
    pwm2 = PWM_open(CONFIG_PWM_1, &params);
    if (pwm2 == NULL) {
        /* CONFIG_PWM_1 failed to open */
        while (1);
    }
    PWM_start(pwm2);

    /* Loop forever, toggling between two PWM states */
    while (1) {
        // 状态1:PWM1 90%占空比,PWM2 10%占空比
        PWM_setDuty(pwm1, 2700); // 90% of 3000us = 2700us
        PWM_setDuty(pwm2, 300);  // 10% of 3000us = 300us
        usleep(time); // 休眠1秒

        // 状态2:PWM1 0%占空比,PWM2 90%占空比
        PWM_setDuty(pwm1, 0);    // 0%占空比(LED熄灭)
        PWM_setDuty(pwm2, 2700); // 90%占空比
        usleep(time); // 休眠1秒
    }
}

关键修改说明

  • 移除冗余变量:删掉了duty和dutyInc,因为你不需要渐变LED亮度,只需要固定切换两种状态
  • 明确状态切换逻辑:在无限循环里分两步执行:
    1. 先设置你要的第一组占空比,休眠1秒
    2. 再设置第二组占空比,再休眠1秒,循环往复
  • 修正注释错误:原来的代码里pwm2打开失败的注释写错成了CONFIG_PWM_0,现在改成了CONFIG_PWM_1,避免混淆
  • 保持PWM初始化逻辑:保留了原有的PWM初始化、打开和启动流程,确保硬件配置正确

这样修改后,你的黄、绿LED就会按照需求循环闪烁:第一秒PWM1(假设对应黄灯)亮90%、PWM2(绿灯)亮10%,第二秒PWM1熄灭、PWM2亮90%,一直重复下去。

内容的提问来源于stack exchange,提问作者FireMonkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:15:37