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.

[参考译文] MSPM0G3107:如何从 UART 获取值

Guru**** 2399095 points
Other Parts Discussed in Thread: LP-MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1321262/mspm0g3107-how-to-get-value-from-uart

器件型号:MSPM0G3107
主题中讨论的其他器件:MSPM0G3507

嗨、大家好!

我在 使用 LP-MSPM0G3507评估板时遇到了一些 UART 问题。

为了简化操作、我使用 uart_echo_interrupts_standby 的示例代码来解释我的问题。

我将 uart_echo_interrupts_standby 修改了一点点、以回显接收到的值+1。 例如、用户输入"1"并通过 UART 接收"2"。 该部件运行良好。

问题是我不能在 main()函数中使用接收到的数据。

变量"volatile uint8_t gEchoData "存储通过 UART 接收的数据。  我使用新 变量 gEchoData2 只是为了显示问题。

在行14  gEchoData2 =gEchoData;

现在、我从 PC 端输入任何数据后、我可以看到回波、但 gEchoData2 和 gEchoData 都始终为零、没有改变。

奇怪的是,如果我在第14行设置一个断点,在重新启动后开始,程序总是按预期停止。

我禁用了 断点并从 PC 输入了一些内容、然后 再次启用断点、但 程序不会再停在这里。 此外、如上所述、  gEchoData2和 gEchoData 的变量保持为零。 同时回波仍在工作。 这意味着中断是好的,但无法返回 main ()。  

我试图降低优化级别、但没有帮助。

感谢您的任何评论。

莱奥

#include "ti_msp_dl_config.h"

volatile uint8_t gEchoData = 0;
uint8_t gEchoData2 = 0;
int main(void)
{
    SYSCFG_DL_init();

    NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);
    NVIC_EnableIRQ(UART_0_INST_INT_IRQN);
    DL_SYSCTL_enableSleepOnExit();

    while (1) {
        gEchoData2 =gEchoData;
        //__WFI();
    }
}

void UART_0_INST_IRQHandler(void)
{
    switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) {
        case DL_UART_MAIN_IIDX_RX:
            DL_GPIO_togglePins(GPIO_LEDS_PORT,
                GPIO_LEDS_USER_LED_1_PIN | GPIO_LEDS_USER_TEST_PIN);
            gEchoData = DL_UART_Main_receiveData(UART_0_INST);
            gEchoData++;
            DL_UART_Main_transmitData(UART_0_INST, gEchoData);
            break;
        default:
            break;
    }
}

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

    删除 DL_SYSCTL_enableSleepOnExit ();这会使芯片在离开中断时处于睡眠状态,因此 while 循环再也不会运行。

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

    谢谢,它工作!