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.

[参考译文] TM4C1294NCPDT:PWM/按钮按下

Guru**** 2212860 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1289475/tm4c1294ncpdt-pwm-button-pressing

器件型号:TM4C1294NCPDT

大家好!

我是新手、但您能帮助我修改代码吗? 我正在尝试让麦克风打开和关闭 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 生成将停止。  

           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);
    [/报价]

    [/quote]