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.

[参考译文] SIMPLELINK-MSP432-SDK:MSP432:MAP_Timer_A_generatePWM 函数调用仅生成一个脉冲波、而不是真正的 PWM 波

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/586198/simplelink-msp432-sdk-msp432-map_timer_a_generatepwm-function-call-generates-only-one-pulse-wave-instead-of-true-pwm-wave

器件型号:SIMPLELINK-MSP432-SDK

您好!

我将 Launchpad MSP432P401与 BoosterPack MK-II 搭配使用

我想使用 MAP_Timer_A_generatePWM 生成 PWM 波。 我尝试了来自 simplelink_msp432_sdk_1_30_00_40 SDK (TIMER_A_PWM_MODE_MSP_EXP432P401R、nortos)和 msp432_driverlib_3_21_00_05 SDK (TIMER_A_PWM_MODE)的不同样片。 我还尝试使用以下 e2e 线程"e2e.ti.com/.../1531341" 和https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/427197"中的示例

不幸的是,我的问题总是一样的:我只得到一个脉冲,而不是一个完整的 PWM 波。 我使用了以下设置:

Timer_A_PWMConfig pwmConfig =
{
Timer_A_CLOCKSOURCE_SMCLK、
Timer_A_CLOCKSOURCE_divider _1、
32000、
Timer_A_CAPTURECOMPARE 寄存器_1、
Timer_A_OUTPUTMODE_RESET_SET、
3200
}; 

请注意、在同一 GPIO 的计数器模式下使用 Timer_A、我得到了一个很好的 PWM。

您有什么想法来解决我的问题吗?

非常感谢您的支持、

此致、

Yann Garcia

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

    Clemmens、您好!

    我很抱歉。 下面是我尝试运行的最简单的示例:

    /* DriverLib 包括*/
    #include 
    
    /*标准包括*/
    #include 
    
    #include 
    
    /* Timer_A PWM 配置参数*/
    Timer_A_PWMConfig pwmConfig =
    {
    Timer_A_CLOCKSOURCE_SMCLK、
    Timer_A_CLOCKSOURCE_divider _1、
    32000、
    Timer_A_CAPTURECOMPARE 寄存器_1、
    Timer_A_OUTPUTMODE_RESET_SET、
    3200
    };
    
    int main (void)
    {
    /*停止看门狗*/
    MAP_WDT_A_HOLDTimer();
    
    对于 LF 模式、//将 MCLK 设置为 REFO 为128Khz
    *将 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);
    
    /*将 GPIO2.5配置为 PWM 的外设输出、将 P6.7配置为按钮的外设输出
    *中断*/
    MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN5、
    GPIO_PRIMARY_MODULE_FUNCTION);
    MAP_GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P5、GPIO_PIN1);
    MAP_GPIO_clearInterruptFlag (GPIO_PORT_P5、GPIO_PIN1);
    MAP_GPIO_enableInterrupt (GPIO_PORT_P5、GPIO_PIN1);
    
    /*将 Timer_A 配置为具有大约500ms 的周期和
    *初始占空比为其10%(3200个节拍)*/
    MAP_Timer_A_generatePWM (TIMER_A0_BASE、&pwmConfig);
    
    /*启用中断并启动看门狗计时器*/
    MAP_Interrupt_enableInterrupt (INT_PORT5);
    MAP_Interrupt_enableSlepOnIsrExit();
    MAP_Interrupt_enableMaster();
    
    /*不使用时睡眠*/
    while (1)
    {
    MAP_PCM_gotoLPM0 ();
    }
    }/*
    
    Port1 ISR -
    此 ISR 将在按下按钮
    时逐步升高 PWM 的占空比*/
    void PORT5_IRQHandler (void)
    {
    uint32_t status = MAP_GPIO_getEnabledInterruptStatus (GPIO_PORT_P5);
    MAP_GPIO_clearInterruptFlag (GPIO_PORT_P5、状态);
    
    IF (STATUS & GPIO_PIN1)
    {
    if (pwmConfig.dutyCycle = 28800)
    pwmConfig.dutyCycle = 3200;
    其他
    pwmConfig.dutyCycle += 3200;
    
    MAP_Timer_A_generatePWM (TIMER_A0_BASE、&pwmConfig);
    }
    }
    

    非常感谢您的支持、

    此致、

    Yann Garcia

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是示例程序、更改了按钮输入引脚。

    原始示例是否起作用? (但在理论上、按钮不应改变任何东西。)

    您如何执行它? 还是让它运行呢?

    "计数器模式"是什么意思? 计时器始终计数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,你是对的,这就是我想解释的:我发现的所有基于 MAP_Timer_A_generatePWM ()的示例都不起作用:我只是得到了一个唯一的脉冲。
    另一方面、在向上/向下计数模式下使用 Timer_A 的示例(并使用我在代码中使用的相同 GPIO)会生成 PWM 波、而不会出现任何问题。
    似乎只有 MAP_Timer_A_generatePWM()函数会引起一些问题。

    此致、

    Yann Garcia