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.

[参考译文] UART 的 MSP-EXP430问题

Guru**** 2587365 points
Other Parts Discussed in Thread: MSP-EXP430FR5969, MSP430FR5969

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1047851/msp-exp430-problem-with-uart

主题中讨论的其他器件:MSP-EXP430FR5969MSP430FR5969

大家好、我正在尝试在 MSP430FR5969 Launchpad (MSP-EXP430FR5969)上配置 UART 配置。 我使用的是其中一个 TI 示例、特别是名为 msp430fr59xx_euscia0_UART_01.c 的示例、该程序应回显写入终端的用户字符。 但是、当我运行此程序时、我无法在串行 COM 端口中键入任何内容。 值得注意的是、我已经更改了 GPIO 引脚的配置(b/c 示例中为 RXD/TXD 使用了 P2.0和 P2.1、但这些是 launchpad 上的 P2.5/P2.6)。 除此之外、我不确定我的进度进度如何、是否有人会有解决此问题的策略? 下面显示了我正在使用的完整代码。 感谢您的任何帮助!

//配置 GPIO
  P2SEL1 = 01100000;           // USCI_A0 UART 操作
  P2SEL0 = 00000000;

  //禁用 GPIO 上电默认高阻抗模式以激活
  //先前配置的端口设置
  PM5CTL0 &=~LOCKLPM5;

  //最大 DCO 设置~8MHz 的启动时钟系统
  CSCTL0_H = CSKEY >> 8;           //解锁时钟寄存器
  CSCTL1 = DCOFSEL_3 | DCORSEL;       //将 DCO 设置为8MHz
  CSCTL2 = SELA_VLOCLK | SELESS__DCOCLK | SELM_DCOCLK;
  CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;  //设置所有分频器
  CSCTL0_H = 0;               //锁定 CS 寄存器

  //将 USCI_A0配置为 UART 模式
  UCA0CTLW0 = UCSWRST;            //将 eUSCI 置于复位状态
  UCA0CTLW0 |= UCSSEL_SMCLK;        // CLK = SMCLK
  //波特率计算
  // 800000000 /(16*9600)= 52.083
  //分数部分= 0.083
  //用户指南表21-4:UCBRSx = 0x04
  // UCBRFx = int ((52.083-52)*16)= 1.
  UCA0BR0 = 52;               // 800000000 / 16/9600
  UCA0BR1 = 0x00;
  UCA0MCTLW |= UCOS16 | UCBRF_1;
  UCA0CTLW0 &=~UCSWRST;           //初始化 eUSCI
  UCA0IE |= UCRXIE;             //启用 USCI_A0 RX 中断

  _bis_SR_register (LPM3_bits | GIE);   //输入 LPM3、中断被启用
  __no_operation();             //用于调试器


#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A0_Vector
_interrupt void USCI_A0_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(USCI_A0_Vector)) USCI_A0_ISR (void)
其他
错误编译器不受支持!
#endif

 switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
 {
  USCI_NONE 案例:中断;
  USCI_UART_UCRXIFG 案例:
   while (!(UCA0IFG&UCTXIFG));
   UCA0TXBUF = UCA0RXBUF;
   __no_operation();
   中断;
  案例 USCI_UART_UCTXIFG:中断;
  案例 USCI_UART_UCSTTIFG:中断;
  案例 USCI_UART_UCTXCPTIFG:中断;
 }

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

    除了引脚选择之外、我没有什么可以跳出的。 在我的 Launchpad 上、我使用2.0和2.1、它们通过 USB 端口连接到反向通道 UART。 是否将其他一些串行硬件连接到您选择的引脚?

    如果没有其他功能、则抛弃回声、只传输连续的字符流。 您应该会在终端上看到、或者至少能够使用逻辑探头或某些这样的探头来查看数据。

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

    David、您好、感谢您的回复。

    我尝试使用 launchpad 上的反向通道引脚2.0和2.1执行此操作、但仍然不幸运。 我没有连接任何串行硬件、但这些引脚是否需要在电路板上进行物理连接?

    此外、我如何传输连续字符流? 这是否会在中断中实现?

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

    我认为有跳线(J13)、但默认情况下是通过串行。 检查文档以确保正确。 您还需要检查并确保计算机端工作正常。 我使用 minicom (在 Linux 下)。 当我插入 Launchpad 时、我看到出现了两个串行端口。 一个用于编程、另一个用于串行。 ("minicom -D /dev/ttyACM1)

    您不需要中断即可发送连续数据。 只是一个等待 TXIFG 并在 TXBUF 置1时将字符分流到 TXBUF 中的循环。 重复。

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

    >> GPIO 引脚(b/c 示例中为 RXD/TXD 使用了 P2.0和 P2.1,但这些是 launchpad 上的 P2.5/P2.6)

    很抱歉,如果我在这里遗漏了一些东西,但这些是2个单独的串行端口(并且可以在数据表中进行验证: https://www.ti.com/lit/gpn/msp430fr5969 )

    您不会意外地将它们混合在一起、您是不是?

    (在使用示波器进行验证之前、我经常会使寄存器中的 pinmux 变得混乱)。