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.

[参考译文] LP-MSPM0G3507:UART 数据不匹配

Guru**** 2489685 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1554372/lp-mspm0g3507-uart-data-mismatch

器件型号:LP-MSPM0G3507
主题:SysConfig 中讨论的其他器件

工具/软件:

您好 TI 专家、

我正在使用 G3507 板 并使用 UART 外设 指定 中断模式(仅 RX) 。 当我从串行监视器发送数据时、我会收到预期数据、但也会收到一些数据 附加垃圾字符

您能帮助我确定原因吗? 我附上了 UART 代码和配置详细信息 下面供您参考。

#include "ti_msp_dl_config.h"

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

    NVIC_ClearPendingIRQ(UART_1_INST_INT_IRQN);
    NVIC_EnableIRQ(UART_1_INST_INT_IRQN);
    DL_SYSCTL_enableSleepOnExit();

    while (1) {
        __WFI();
    }
}

void UART_1_INST_IRQHandler(void)
{
    switch (DL_UART_Main_getPendingInterrupt(UART_1_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_1_INST);
            DL_UART_Main_transmitData(UART_1_INST, gEchoData);
            break;
        default:
            break;
    }
}

谢谢你
Amara Rakesh。

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

    事实上总是有 4 个额外的字节表明某种东西正在过读 FIFO、但我在您发布的代码中看不到这一点。 您是否更改了 SysConfig 中原始示例的任何内容(看起来像“uart_echo_interrupts_standby")“)?

    电线的另一端是什么? 您提到了“串行显示器“;这是 (PC) 终端仿真器吗?

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

    您显示的数据似乎是从发送端输出的。 那么、另一端接收到的数据是否错误且坏数据回显、或者在回显时是否正确接收并出现乱码? 没有办法从这一点上说出来。

    有很多方法可以解决这个问题。

    您可以将信号从发送侧环回以验证是否按预期工作。

    您可以将 MSPM0 代码更改为仅传输字符串。

    接收字符串。 设置断点并检查缓冲区。

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

    是的、我更改了 UART、示例带有 UART0、但我更改了 UART1。 我解决了这个问题,我在代码中评论下面的行
    //_ WFI ();
    因此、我的代码按预期正常运行。

    还可以吗?

    有时“重置“按钮按预期工作、有什么想法吗?

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

    您好 Amara、

    我认为这是因为您将 BUSCLK 用于 UART。 但是、一旦您有__WFI (();为了使 MCU 进入低功耗状态、BUSCLK 就会停止。 这就是无法正确接收最后~2 字节的原因。

    此致、

    Zoey

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

    Hai Zoey,  

         是的、这就是为什么重置按钮有时无法正常工作的原因。

    此致、

    Amara