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.

[参考译文] MSP430FR59941:UART 通信丢失字符问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1513361/msp430fr59941-uart-communication-issue-dropping-characters

器件型号:MSP430FR59941

工具/软件:

我尝试对 MSP430FR59941进行编程、以使用 ISR 通过 UART0发送和接收消息。 我将放弃等效于每一个其他字符、只接收一半的消息。  

我将波特率设置为9600。 我看了示波器上的通信、只有一点点噪音。 我不确定该如何进行调试。

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

    您能向我们展示您的 ISR 吗? 有时它所需要的是一个拼写错误。

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

    // UART RX ISR
    #if Defined (__TI_COMPILER_VERSION__)|| Defined (__IAR_SYSTEM_ICC__)
    pragma vector=EUSCI_A0_vector
    __中断无效 EUSCI_A0_ISR (void)
    #elif defined (__GNUC__)
    void _attribute__((interrupt (USCI_A0_vector)) USCI_A0_ISR (void)
    #else
    错误:不支持编译器!
    #endif

    switch (__even_in_RANGE (UCA0IV、USCI_UART_UCTXCPTIFG)){
    case USCI_NONE:中断;
    case USCI_UART_UCRXIFG:
    if (!message_ready){
    receivedChar = UCA0RXBUF;

    if (receivedChar ='\n'|| BUFFER_INDEX >= MAX_BUFFER_SIZE -1){
    Message_ready =1;
    uart_send_string (rx_buffer);
    Buffer_index = 0;

    }其他{
    RX_BUFFER[BUFFER_INDEX++]= receivedChar;
    //uart_send_string (rx_buffer);
    }
    }
    休息;
    默认值:中断;
    }
    }

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

    1) > uart_send_string (rx_buffer);

    看不见我怀疑这需要很长时间(几毫秒)、在此期间、所有 Rx 字节都会丢失(溢出)。 我建议您将其移至 main()。

    2)更一般地说、只要 MESSAGE_READY = 1、Rx 字节就会被丢弃(忽略)。 我建议 main()尽快检索 rx_buffer[]的内容并设置 message_ready=0。 它有1ms (9600bps)的时间来完成此操作、这实际上是一个并非不合理的时间量。

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

    我可以执行 ISR 中的写入操作。 我一次只发送一条消息。 当第一条消息就绪= 1时、在几秒钟后不应该有任何消息。  

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

    我认为(来自代码)响应是块中的数据缺失(例如、前半部分)、但我应该问:缺失字节是否有模式? 例如、每隔一个字节与长间隙。

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

    她似乎知道自己在做什么。 当我从 ISR 开始跳闸所有逻辑时、似乎不太频繁。  

    这就是 ISR 例程中的所有内容、似乎在 LaunchPad 上运行良好。  每隔一段时间我都会想念一个角色,但现在似乎更一致。  

    我将在应用中的微控制器上进行编程、以验证它现在是否正常工作。

    // UART RX ISR
    #if Defined (__TI_COMPILER_VERSION__)|| Defined (__IAR_SYSTEM_ICC__)
    pragma vector=EUSCI_A0_vector
    __中断无效 EUSCI_A0_ISR (void)
    #elif defined (__GNUC__)
    void _attribute__((interrupt (USCI_A0_vector)) USCI_A0_ISR (void)
    #else
    错误:不支持编译器!
    #endif

    switch (__even_in_RANGE (UCA0IV、USCI_UART_UCTXCPTIFG)){
    case USCI_NONE:中断;
    case USCI_UART_UCRXIFG:
    receivedChar = UCA0RXBUF;

    RX_BUFFER[BUFFER_INDEX++]= receivedChar;
    休息;
    默认值:中断;
    }
    }

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

    我想知道 MCLK 和位时钟之间的关系。 如果您将时钟系统保留为时钟系统上电默认、 MCLK 将为1MHz。 这似乎足够快,但有时它不是。 更改为8MHz 与设置 DIVM=0一样简单。

    除非您保护主例程中通过禁用中断来更改 BUFFER_INDEX 的代码、否则您的缓冲代码会出现问题。

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

    我当时使用的是1MHz。 将时钟更改为8MHz 的语法是什么? 我还清理了 ISR、似乎对我有很大帮助。 它在 LaunchPad 上的工作方式相当一致、但当我将其刻录到板载应用程序时、我尝试发送的15个字符中似乎缺失了2个字符。 在示波器上、传入的 UART 确实有一些噪声。 但我不确定是什么导致了损耗。   

    这是我的 ISR

    // UART RX ISR
    #if Defined (__TI_COMPILER_VERSION__)|| Defined (__IAR_SYSTEM_ICC__)
    pragma vector=EUSCI_A0_vector
    __中断无效 EUSCI_A0_ISR (void)
    #elif defined (__GNUC__)
    void _attribute__((interrupt (USCI_A0_vector)) USCI_A0_ISR (void)
    #else
    错误:不支持编译器!
    #endif

    switch (__even_in_RANGE (UCA0IV、USCI_UART_UCTXCPTIFG)){
    case USCI_NONE:中断;
    case USCI_UART_UCRXIFG:
    receivedChar = UCA0RXBUF;

    RX_BUFFER[BUFFER_INDEX++]= receivedChar;
    休息;
    默认值:中断;
    }
    }

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

    示例 msp430fr599x_cs_01.c 演示了将 S/MCLK 设置为8MHz。 您可能只需直接复制/粘贴代码即可。

    https://dev.ti.com/tirex/explore/node?node=A__ADtHzr9Ec707pVOoi2fkQw__msp430ware__IOGqZri__LATEST

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

    谢谢! 我还使用 FT234XD-x 将 UART 转换为 USB 以便与我的 PC 通信。 您知道吗?转换器和微控制器之间是否需要某种线路端接?

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

    我不熟悉 FT234、但我在使用 FT23x 设备时没有遇到问题;我希望您可以直接连接它。 (确保这是3.3V 版本。)