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.

[参考译文] MSP432P401R:按下复位按钮后、代码未运行。

Guru**** 2589275 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/628126/msp432p401r-code-is-not-running-after-reset-button-in-pressed

器件型号:MSP432P401R

您好!

我正在使用 MSP432P401R 构建障碍物检测机器人。

我已经连接了3个红外传感器来检测机器人周围的障碍物。我正在 while 环路中读取传感器的值以进行连续监控。 我的问题是、当我刷写我自己的代码时、它第一次运行正常。 但是、如果我按下复位按钮、代码将不会再次运行。 为了使其运行、我必须再次刷写代码。

但我使用了一个示例代码、该代码 在每次按下开关时都会改变 PWM 信号的占空比、即使按下复位按钮、它也能正常工作。

我不确定是什么问题。 我没有在代码中使用任何中断服务例程。 我认为复位按钮有自己的 ISR。

请告诉我如何解决此问题。

谢谢、

Sushrut

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

    请将您的项目发送给我吗? 您还使用哪个编译器/IDE 和 SDK 版本?

    谢谢、

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

    尊敬的 David:

    我使用的是"simplelink_msp432_sdk_1_30_00_40"。 编译器版本为 TI v16.9.1.LTS。 我已将"TIMER_A_PWM_MODE"示例作为基础项目进行更改。 我使用  "CCSv7 Service Release Windows 7.1.0.00016"作为我的 IDE。

    请在 attachment.e2e.ti.com/.../PWM_5F00_MSP_5F00_EXP432P401R_5F00_nortos_5F00_ccs.rar 中找到我的项目

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

    尊敬的 David:

    今天、我对代码进行了一些更改。 我注意到、每当我尝试在 while 环路中更改 PWM 占空比时、代码在按下 RESET 按钮之前工作正常。 但是、当我按下"Reset"时、代码将无法正常工作。 我怀疑计时器可能需要一些延迟时间来更改 PWM。

    因此、我尝试在 while 循环之外更改占空比、但没有使用。我已附加项目。 您能不能再仔细研究一下吗?

    主文件名为 test.c

    在该文件中、按下 RESET 后、占空比不会随中断而变化、但它将始终为100%。

    谢谢、

    Sushrute2e.ti.com/.../8176.PWM_5F00_MSP_5F00_EXP432P401R_5F00_nortos_5F00_ccs.rar

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

    您好、Sushrut、

     我将代码更改为:

    while (1)
    {
    // printf ("在\n"\n 时输入");
    pwmConfigA0.dutyCycle --;
    pwmConfigA1.dutyCycle = pwmConfigA0.dutyCycle;
    
    if (pwmConfigA0.dutyCycle = 0)
    {
    pwmConfigA0.dutyCycle = 32000;
    }
    
    // pwmConfigA0.dutyCycle = pwmConfigA1.dutyCycle = 32000;
    
    MAP_Timer_A_setCompareValue (TIMER_A0_BASE、
    Timer_A_CAPTURECOMPARE 寄存器_1、
    pwmConfigA0.dutyCycle);
    
    MAP_Timer_A_setCompareValue (TIMER_A1_BASE、
    Timer_A_CAPTURECOMPARE 寄存器_1、
    pwmConfigA1.dutyCycle);
    // MAP_Timer_A_generatePWM (TIMER_A0_BASE、&pwmConfigA0);
    // MAP_Timer_A_generatePWM (timer_A1_base、&pwmConfigA1);
    } 

    问题是 MAP_Timer_A_generatePWM 将重新配置 计时器、并且由于它位于循环内部、它将连续启动/停止计时器。 printf 会增加足够的延迟、以使该配置生效。

     希望这对您有所帮助。

        David  

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

    尊敬的 David:

    我在 while 环路中编写了一个简单的代码、如下所示。 但它不起作用。

    while (1)

    printf ("在\n"\n 时输入");
    pin3_7_status = GPIO_getInputPinValue (GPIO_PORT_P3、GPIO_PIN7);
    if (pin3_7_status = GPIO_INPUT_PIN_LOW)

    printf ("前面传感器中的障碍物\n");

    pwmConfigA0.dutyCycle = pwmConfigA1.dutyCycle = 0;

    MAP_Timer_A_setCompareValue (TIMER_A0_BASE、
    Timer_A_CAPTURECOMPARE 寄存器_1、
    pwmConfigA0.dutyCycle);
    MAP_Timer_A_setCompareValue (TIMER_A0_BASE、
    Timer_A_CAPTURECOMPARE 寄存器_1、
    pwmConfigA1.dutyCycle);

    其他

    printf ("前面传感器中没有障碍物\n");
    pwmConfigA0.dutyCycle = pwmConfigA1.dutyCycle = 32000;

    MAP_Timer_A_setCompareValue (TIMER_A0_BASE、
    Timer_A_CAPTURECOMPARE 寄存器_1、
    pwmConfigA0.dutyCycle);
    MAP_Timer_A_setCompareValue (TIMER_A0_BASE、
    Timer_A_CAPTURECOMPARE 寄存器_1、
    pwmConfigA1.dutyCycle);

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

    您好、Sushrut、

    您期望的行为是什么? 对于 pwmConfigA1.dutyCycle、我认为您应该 使用 timer_A1_base

    MAP_Timer_A_setCompareValue (TIMER_A1_base、
    TIMER_A_CAPTURECOMPARE 寄存器_1、
    pwmConfigA1.dutyCycle); 

    您是否能够 运行 我发布的代码?

     此致、

       David