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.

[参考译文] MSP430F5529:UART 回波演示不工作

Guru**** 2589275 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1197865/msp430f5529-uart-echo-demo-not-working

器件型号:MSP430F5529

您好!

我正在使用 MSP430F5529LP 并尝试运行 UART 演示程序。 我有一个通过 mikroBUS 连接到 TI LaunchPad 的 RS485模块。 运行演示时、我看到 UCA0RXBUF 寄存器通过我的笔记本电脑通过 TeraTerm 发送的 RS485电缆接收正确的 ASCII 字符。 但是、我在 TeraTerm 中看不到回波。 可以帮助我找到问题吗? 问题可能在于我的跳线设置、我使用的是默认在 LaunchPad 上配置的跳线设置(RX、TX、5V、3.3V、GND、 SBWDIO、SBWTCK 短接)、但演示不建议如何配置这些。 我还在下面显示了我在 TeraTerm 中使用的设置。

注意:RS485咔嗒板模块使用引脚在 TX/Rx 模式之间切换。 该引脚位于端口2.1上(这是 mikroBUS 连接器的 PWM1)。

注意:在 TI 微控制器方面、我也是新手。

www.mikroe.com/rs485-5v-click

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

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

    1) 1)您将遇到的第一个问题是、ADM485实际上希望以5V 的电压运行。 Launchpad 确实具有+5V 电源、但将 RO 引脚(5V 时)连接到 MSP430 UART 引脚(最大3.6V)可能会损坏芯片。 DI 引脚在3.3V 时也可能没有响应(我在 ADM485数据表中看不到 VIH/VIL)。 点击板看起来有3.3V 型号:

    https://www.mikroe.com/rs485-33v-click

    2) 2) F5529 Echo 示例使用 UCA0、因此所需的引脚为 P3.3/P3.4 (TXD/RXD)、在 J1上彼此相邻。 [参考数据表(SLAS590P)表9-48]。

    3)/RE 在咔嗒板上有一个下拉菜单、因此如果您不执行任何操作、它始终处于接收模式(这可能是您看起来如此成功的原因)。 如果您将代码(ISR)更改为将 P2.1设置为输出并将其驱动为高电平(P2DIR.1=1、P2OUT.1=1)、则应允许您进行传输。  [另见上文(1)。] 在再次设置/RE 低电平之前、监视 UCA0STATW:UCBUSY 以确保字节已被发送。

    [编辑:更正了拼写错误。]

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

    哇哦、

    Bruce、您好、感谢您的快速回复和有用信息。 我一直在使用该代码、我所实现的功能如下所示。 我在中添加了切换端口2引脚1的更改、但没有结果。 我仍在将数据从 RS485芯片读取到微控制器中。 我还将波特率更改为9600、使其减速。 此外、我没有找到名为 UCA0STATW 的 SFR、但我确实找到了 UCA0STAT。

    注意:我很好奇为什么该器件具有一个用于 TX/RX 的中断矢量、头文件显示它们不是独立的。

    #include

    #define LED BIT0

    void InitializeUART();
    void SendChar (char c);

    int main (空)

       WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
       P1DIR |= LED;//将 P1.0设置为输出
       InitializeUART();//初始化 UART 模块
       __ENABLE_INTERRUPT ();//启用全局中断
       while (1)
       {
           //不执行任何操作
       }


    空初始化 UART()

       P3SEL |= BIT3 + BIT4;//将 P3.3和 P3.4设置为 UART TX 和 RX
       UCA0CTL1 |= UCSSEL_2;//使用 SMCLK 作为 UART 时钟源
       UCA0BR0 = 104;//将波特率设置为9600
       UCA0BR1=0;
       UCA0MCTL = UCBRS0;
       UCA0CTL1 &=~Ω UCSWRST;//从复位中释放 UART 模块
       UCA0IE |= UCRXIE; //启用 UART 接收中断

       在 RS485模块上//设置读取模式(通过 PWM1端口2.0)
       P2DIR |= 0xFF;//所有 P2.x 输出
       P2OUT &= 0x00;//所有 P2.x 复位(将 UART 设置为读取模式)


    空 SendChar (char c)

       while (!(UCA0IFG & UCTXIFG));//等待 UART TX 缓冲区为空
       UCA0TXBUF = c;//发送字符
       while (UCA0STAT 和 UCBUSY);


    #pragma vector=USCI_A0_Vector
    _interrupt void USCI_A0_ISR (void)

       开关(UCA0IV)
       {
           案例2:// UCRXIFG
               P1OUT ^= LED;//切换 LED
               char c = UCA0RXBUF;//读取接收到的字符
               P2OUT |= BIT1;//所有 P2.x 复位(将 UART 设置为读取模式)
               SendChar (c);//回显字符
               P2OUT &= 0x00;//所有 P2.x 复位(将 UART 设置为读取模式)
               中断;
           默认值:
               中断;
       }

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

    我看不到您的代码有任何明显的错误。

    您是否仍在使用5V 卡嗒板? 我在 ADM485数据表中没有找到 VIH、所以有可能在 DI 和/或/RE 上看不到(3.3V)转换。 (在 MSP430引脚上施加5V 电压也不是一个好主意、即使它看起来可以工作一段时间。)

    RS-485总线的另一端(PC 上)有什么? 信号线路上的示波器(单击时的 J4)可能很有用。

    根据我的经验、外设(RX+TX+杂项)具有单个 IRQ 并不是很常见。

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

    对、

    示波器是一个很好的下一步。 我下周有机会尝试一下。 是的、我仍在正确使用5V 咔嗒板及其从 Tera Term 笔记本电脑中读取的值。 我正在使用下面的 USB 转 RS485电缆(DTech USB 转 RS422 RS485)链接。 我是否应该使用流量控制、因为在微控制器和 V5 Click 之间使用了 RX/TX 使能?

    https://www.amazon.com/Serial-Converter-Adapter-Supports-Windows/dp/B076WVFXN8/ref=sr_1_4?crid=3ZN7Y81LLIL8&keywords=usb%2Brs485&qid=1676770312&sprefix=usb%2Brs485%2Caps%2C170&sr=8-4&th=1

    RS485适配器(和连接)

    V5点击(和连接)

    V5点击 Schematic

    ISR 中的中断(A 的 ASCII、在 Tera Term 中键入)

    Tera Term Settings

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

    我认为这里的流量控制并不相关、因为在任何情况下都不会对总线进行流量控制。

    我仍然怀疑问题是您尝试将5V 器件与3V MCU 配合使用。 总线上的示波器(可能还有 R/T)可能是唯一的发现方法。

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

    我一定会这样做、

    一旦我能够访问该器件(下周晚些时候才会访问)。 平均时间内、我将进行假设。 我明白您的意思是不需要流量控制、因为我们不是通过总线为此使用信号(半双工 TX/RX 通道仅使用2根导线)。 这里也有接地连接、这可能需要也可能不需要(对此有任何想法?)。 为什么您怀疑微控制器是3V 器件? 从 ADM485的数据表中、微控制器到器件的 DI 输入限值为-0.3V 至7.3V。

    将此设置为范围后、我将再次与您联系。

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

    MSP430是3.3V (或多或少)器件、而此 RS485驱动器是5V 器件。 当其 RXD 输入被驱动至高于 Vcc 时、这将给 MSP430带来问题。 正向偏置保护二极管。 (有关二极管电流限制、请参阅数据表。) 当然、除非您使用并联稳压器、否则可能会升高 Vcc。 (串联电阻可将这些故障电流限制在安全水平。)

    RS485是一个三线接口。 您必须有一些东西来参考差分电压。 (数据表中的这些共模电压限制。) 我始终建议您阅读 Circuit Cellar 杂志上题为" RS485的艺术和科学"的经典文章。 Google 通常会显示可读副本。