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.

[参考译文] CCS/MSP432P401R:两个引脚上的 PWM

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/567745/ccs-msp432p401r-pwm-on-two-pin

器件型号:MSP432P401R

工具/软件:Code Composer Studio

我想创建一个程序、在 引脚5.6和2.4上为我提供 PWM 信号、我尝试执行此操作、但没有成功、因为我的代码无法正常工作。
在引脚2.4和5.6时、是否有人可以帮助我提供 P.W.M.的程序示例?

我的代码是:

/* DriverLib 包括*/
#include "driverlib.h"

//标准包括*/
#include 

#include 

/* Timer_A PWM 配置参数*/
Timer_A_PWMConfig pwmConfig =
{
//uint_fast16_t 时钟源;
Timer_A_CLOCKSOURCE_SMCLK、
//uint_fast16_t 时钟源分频器;
Timer_A_CLOCKSOURCE_divider _1、
//uint_fast16_t timerPeriod;
1300、
//uint_fast16_t compareRegister;
Timer_A_CAPTURECOMPARE 寄存器_1、
//uint_fast16_t compareOutputMode;
Timer_A_OUTPUTMODE_RESET_SET、
//uint_fast16_t dutyCycle;
10
};

// Timer_A PWM 配置参数*/
Timer_A_PWMConfig pwmConfig2 =
{
//uint_fast16_t clockSource;
Timer_A_CLOCKSOURCE_SMCLK、
//uint_fast16_t 时钟源分频器;
Timer_A_CLOCKSOURCE_divider _1、
//uint_fast16_t timerPeriod;
1300、
//uint_fast16_t compareRegister;
Timer_A_CAPTURECOMPARE 寄存器_1、
//uint_fast16_t compareOutputMode;
Timer_A_OUTPUTMODE_RESET_SET、
//uint_fast16_t dutyCycle;
10
};

int main (void)
{
/*停止看门狗*/
MAP_WDT_A_HOLDTimer();

int a、b、c、directie、dir;

/*将 MCLK 设置为128Khz 的 REFO 以实现 LF 模式将 SMCLK 设置为64Khz */
MAP_CS_setReferenceOscillatorFrequency (CS_REFO_128KHZ);
MAP_CS_initClockSignal (CS_MCLK、CS_REFOCLK_SELECT、CS_CLOCK_DELUGER_1);
MAP_CS_initClockSignal (CS_SMCLK、CS_REFOCLK_SELECT、CS_CLOCK_DEVIDER_2);
MAP_PCM_setPowerState (PCM_AM_LF_VCORE0);

// PWM -引脚- 5.6 - TIMER_A2_BASE
// PWM -引脚- 2.4 - TIMER_A0_BASE
//将 GPIO2.4配置为 PWM 的外设输出
MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P5、GPIO_PIN6、GPIO_PRIMARY_MODULE_Function);
MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN4、GPIO_PRIMARY_MODULE_Function);

//将 Timer_A 配置为具有大约20ms 的周期
MAP_Timer_A_generatePWM (TIMER_A2_base、&pwmConfig);
MAP_Timer_A_generatePWM (TIMER_A2_base、&pwmConfig2);

b = 40;
C = 30;
directie = 0;
dir = 0;

while (1)
{
MAP_Timer_A_generatePWM (TIMER_A2_base、&pwmConfig);
MAP_Timer_A_generatePWM (TIMER_A2_base、&pwmConfig2);

//--------------------------------------------------------
如果(dir == 2)
{
C = c - 10;
pwmConfig2.dutyCycle = c;
if (c = 40){
Dir = 0;
}

for (a=620;a>0;a--);
}
其他
{
pwmConfig2.dutyCycle = c;
C = c + 10;
if (c = 100){
Dir = 2;
}

for (a=620;a>0;a--);
}
//--------------------------------------------------------
if (directie = 1)
{
b = b - 10;
pwmConfig.dutyCycle = b;
if (b = 40){
directtie = 0;
}

for (a=620;a>0;a--);
}
其他
{
pwmConfig.dutyCycle = b;
b = b + 10;
if (b = 170){
directtie = 1;
}

for (a=620;a>0;a--);
}
//----------------------------}

} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "不能正常工作"到底意味着什么?

    我尚未检查所有代码、但您将两个 PWM 配置都应用于 Timer_A2。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我解决了这个问题、我的代码是:

    /*********
    *
    * MSP432P401R
    * MSP432P401R
    * ------------
    * /|\| |
    * || |
    * -|RST P2.4 |-->底部的伺服电机输出 PWM
    * | P5.6 |-->顶部伺服电机的输出 PWM
    * | |
    *
    (小部分 /*
    DriverLib 包括*/
    #include "driverlib.h"
    
    /*标准包含*/
    #include 
    
    #include 
    
    /* Timer_A PWM 配置参数*/
    Timer_A_PWMConfig pwmConfig =
    {
    //uint_fast16_t 时钟源;
    Timer_A_CLOCKSOURCE_SMCLK、
    //uint_fast16_t 时钟源分频器;
    Timer_A_CLOCKSOURCE_divider _1、
    //uint_fast16_t timerPeriod;
    1300、
    //uint_fast16_t compareRegister;
    Timer_A_CAPTURECOMPARE 寄存器_1、
    //uint_fast16_t compareOutputMode;
    Timer_A_OUTPUTMODE_RESET_SET、
    //uint_fast16_t dutyCycle;
    10
    };
    
    // Timer_A PWM 配置参数*/
    Timer_A_PWMConfig pwmConfig2 =
    {
    //uint_fast16_t clockSource;
    Timer_A_CLOCKSOURCE_SMCLK、
    //uint_fast16_t 时钟源分频器;
    Timer_A_CLOCKSOURCE_divider _1、
    //uint_fast16_t timerPeriod;
    1300、
    //uint_fast16_t compareRegister;
    Timer_A_CAPTURECOMPARE 寄存器_1、
    //uint_fast16_t compareOutputMode;
    Timer_A_OUTPUTMODE_RESET_SET、
    //uint_fast16_t dutyCycle;
    10
    };
    int main (void)
    {
    /*停止看门狗*/
    MAP_WDT_A_HOLDTimer();
    
    int a、b、c、directie、dir;
    
    /*将 MCLK 设置为128Khz 的 REFO 以实现 LF 模式将 SMCLK 设置为64Khz */
    MAP_CS_setReferenceOscillatorFrequency (CS_REFO_128KHZ);
    MAP_CS_initClockSignal (CS_MCLK、CS_REFOCLK_SELECT、CS_CLOCK_DELUGER_1);
    MAP_CS_initClockSignal (CS_SMCLK、CS_REFOCLK_SELECT、CS_CLOCK_DEVIDER_2);
    MAP_PCM_setPowerState (PCM_AM_LF_VCORE0);
    
    // PWM -引脚- 5.6 - TIMER_A2_BASE
    // PWM -引脚- 2.4 - TIMER_A0_BASE
    //将 PIN 配置为 PWM 的外设输出
    MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN4、GPIO_PRIMARY_MODULE_Function);
    MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P5、GPIO_PIN6、GPIO_PRIMARY_MODULE_Function);
    
    b = 40;
    C = 30;
    directie = 0;
    dir = 0;
    
    while (1)
    {
    //将 Timer_A 配置为具有大约20ms 的周期
    MAP_Timer_A_generatePWM (TIMER_A2_base、&pwmConfig);
    MAP_Timer_A_generatePWM (TIMER_A0_BASE、&pwmConfig2);
    
    //\/--- 引脚-5.6---- ////
    
    如果(dir == 2)
    {
    C = c - 10;
    pwmConfig.dutyCycle = c;
    if (c = 30){
    Dir = 0;
    }
    
    for (a=620;a>0;a--);
    }
    其他
    {
    pwmConfig.dutyCycle = c;
    C = c + 10;
    if (c = 100){
    Dir = 2;
    }
    
    for (a=620;a>0;a--);
    }
    
    //\/--- 引脚-2.4----- ////
    
    if (directie = 1)
    {
    b = b - 40;
    pwmConfig2.dutyCycle = b;
    if (b = 40){
    directtie = 0;
    }
    
    for (a=620;a>0;a--);
    }
    其他
    {
    pwmConfig2.dutyCycle = b;
    b = b + 40;
    if (b = 160){
    directtie = 1;
    }
    
    for (a=620;a>0;a--);
    }
    
    //-------------------------------------------------------- //
    
    }
    }