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(¶ms); params.dutyUnits = PWM_DUTY_US; params.dutyValue = 0; params.periodUnits = PWM_PERIOD_US; params.periodValue = pwmPeriod; // 初始化PWM1(对应第一个LED) pwm1 = PWM_open(CONFIG_PWM_0, ¶ms); if (pwm1 == NULL) { /* CONFIG_PWM_0 failed to open */ while (1); } PWM_start(pwm1); // 初始化PWM2(对应第二个LED) pwm2 = PWM_open(CONFIG_PWM_1, ¶ms); 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秒,循环往复
- 修正注释错误:原来的代码里pwm2打开失败的注释写错成了CONFIG_PWM_0,现在改成了CONFIG_PWM_1,避免混淆
- 保持PWM初始化逻辑:保留了原有的PWM初始化、打开和启动流程,确保硬件配置正确
这样修改后,你的黄、绿LED就会按照需求循环闪烁:第一秒PWM1(假设对应黄灯)亮90%、PWM2(绿灯)亮10%,第二秒PWM1熄灭、PWM2亮90%,一直重复下去。
内容的提问来源于stack exchange,提问作者FireMonkey
相关产品推荐
相关产品推荐

