This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好!
我是新手、但您能帮助我修改代码吗? 我正在尝试让麦克风打开和关闭 PWM 上的红色和蓝光颜色、如果按下按钮、但它不起作用、我不是 sre 为什么...下面是代码:
非常感谢你
#包含
#包含
#包含 //表示正弦波
#包含 //用于 sprintf()
#包含
#包含
#包含
#包含
#包含
#包含
#包含 //浮点支架
#包含
#包含
#包含
#include "CFAF128128B0145T/CFAF128B0145T.h"
//驱动程序库遇到错误时调用的错误例程。
#ifdef 调试
void __error__(char *pcFilename、uint32_t ui32Line)
{
}
#endif
#define PWM_FREQUENCY 100 //人眼 PWM 频率必须大于100Hz
#define APP_PI 3.1415926535897932384626433832795f
#定义步骤 256
int main (空)
{
bool buttonPressed = false; //用于跟踪按钮状态的变量
Volatile uint32_t ui32Load; // PWM 周期
Volatile uint32_t ui32RedLevel; //红色 LED 的 PWM 占空比
Volatile uint32_t ui32GreenLevel; //绿色 LED 的 PWM 占空比
Volatile uint32_t ui32BlueLevel; //蓝色 LED 的 PWM 占空比
Volatile uint32_t ui32PWMClock; // PWM 时钟频率
Volatile uint32_t ui32SysClock;
volatile uint32_t ui32Index; //迭代计数器
浮角;
// char strBuffer[30]; / for sprintf ()
//在120 MHz 处从 PLL 运行。
ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);
//显示,参数
CFAF128128B0145T_init (1、ui32SysClock、20000000);
//写入文本
CFAF128128B0145T_TEXT (30、60、"Hello World!"、CFAF128B0145T_COLOR_WHITE、CFAF128128B0145T_COLOR_BACK、 1、1);
//初始化硬件
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
SysCtlPeripheralEnable (SYSCTL_Periph_PWM0); //启用 PWM0
//设置 GPIO,将全部三个 RGB LED 引脚配置为 PWM
GPIOPinTypeGPIOInput (GPIO_PORTJ_BASE、GPIO_PIN_0);
GPIOPadConfigSet (GPIO_PORTJ_BASE、GPIO_PIN_0、GPIO_strength_2mA、GPIO_PIN_TYPE_STD_WPU);
GPIOPinTypePWM (GPIO_PORTG_BASE、GPIO_PIN_0);
GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_2 | GPIO_PIN_3);
GPIOPinConfigure (GPIO_PG0_M0PWM4);
GPIOPinConfigure (GPIO_PF2_M0PWM2);
GPIOPinConfigure (GPIO_PF3_M0PWM3);
//设置 PWM 时钟
PWMClockSet (PWM0_BASE、PWM_SYSCLK_DIV_64); // 120MHz / 64 = 1.875MHz
//计算 PWM 负载值
ui32PWMClock = ui32SysClock/64; // 120 MHz /64
ui32Load =(ui32PWMClock/PWM_frequency)-1; // 1875000/100 = 18750
// PWM 配置(红色 LED)
PWMGenConfigure (PWM0_BASE、PWM_GEN_1、PWM_GEN_MODE_DOWN);
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_1、ui32Load);
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_2、0); //加载值的启动器
PWMGenEnable (PWM0_BASE、PWM_GEN_1);
PWMOutputState (PWM0_BASE、PWM_OUT_2_bit、true);
// PWM 配置(蓝色 LED)
PWMGenConfigure (PWM0_BASE、PWM_GEN_2、PWM_GEN_MODE_DOWN);
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_2、ui32Load);
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_4、0); //加载值的启动器
PWMOutputState (PWM0_BASE、PWM_OUT_4_BIT、TRUE);//打开 PWM 输出4
PWMGenEnable (PWM0_BASE、PWM_GEN_2); //打开发生器2
ui32Index = 0; //迭代计数器
while (1)
{
if (GPIOPinRead (GPIO_PORTJ_BASE、GPIO_PIN_0)== 0)
{
buttonPressed = true;
}
否则{
//按钮被释放,重置 buttonPressed 标志
buttonPressed = false;
fAngle = ui32Index *(2.0f * APP_PI/STEP);
}
if (buttonPressed){
//红色 LED
PWMGenDisable (PWM0_BASE、PWM_GEN_2);
ui32RedLevel =(uint32_t)(9370.0f *(1 + sinf (fAngle))); // 18750/2 > 9370以保持负载值<最大值
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_2、ui32RedLevel +1);
}
否则{
//蓝色 LED
PWMGenDisable (PWM0_BASE、PWM_GEN_1);
ui32BlueLevel =(uint32_t)(9370.0f *(1 + sinf (fAngle+2*2.0f * APP_PI/3)));
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_4、ui32BlueLevel +1);
}
SysCtlDelay (ui32PWMClock / PWM_FREQUENCY);
}
}
您好!
Unknown 说:// PWM 配置(红色 LED)
PWMGenConfigure (PWM0_BASE、PWM_GEN_1、PWM_GEN_MODE_DOWN);
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_1、ui32Load);
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_2、0); //加载值的启动器
PWMGenEnable (PWM0_BASE、PWM_GEN_1);
PWMOutputState (PWM0_BASE、PWM_OUT_2_bit、true);
// PWM 配置(蓝色 LED)
PWMGenConfigure (PWM0_BASE、PWM_GEN_2、PWM_GEN_MODE_DOWN);
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_2、ui32Load);
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_4、0); //加载值的启动器
PWMOutputState (PWM0_BASE、PWM_OUT_4_BIT、TRUE);//打开 PWM 输出4
PWMGenEnable (PWM0_BASE、PWM_GEN_2); //打开发生器2 [/报价]在上面的代码中、根据您的注释、PWM_GEN_1用于红色 LED、PWM_GEN_2用于蓝色 LED。
但是、在下面的代码中、根据您的注释、红色 LED 在 PWM_GEN_2上、蓝色 LED 在 PWM_GEN_1上。 至少根据您的注释、这些注释似乎与您的 PWM 初始化不一致。 不管注释说什么、为什么要尝试如 PWMGenDisable (PWM0_BASE、PWM_GEN_2)和 PWMGenDisable (PWM0_BASE、PWM_GEN_1)中那样禁用 PWM? 首先禁用 PWM_GEN_2、然后更改 PWM 脉冲宽度。 当您禁用 PWM_GEN_2时、PWM 生成将停止。
[/quote]if (buttonPressed){
//红色 LED
PWMGenDisable (PWM0_BASE、PWM_GEN_2);
ui32RedLevel =(uint32_t)(9370.0f *(1 + sinf (fAngle))); // 18750/2 > 9370以保持负载值<最大值
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_2、ui32RedLevel +1);
}
否则{
//蓝色 LED
PWMGenDisable (PWM0_BASE、PWM_GEN_1);
ui32BlueLevel =(uint32_t)(9370.0f *(1 + sinf (fAngle+2*2.0f * APP_PI/3)));
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_4、ui32BlueLevel +1);
[/报价]