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.

[参考译文] MSP430FR2475:UART 不工作

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/985041/msp430fr2475-uart-not-functioning

器件型号:MSP430FR2475

尊敬的先生:

我使用自己的电路板设计来设计 msp430fr2475。 电路板工作正常。 现在、我正在尝试从 TI Resource Explorer 中为您的示例代码使用 UART 代码。  

调试代码、 检查所有 UART 寄存器是否工作正常、TXBUF 也存储了正确的值。 但 TX bin 不发送数据(我将检查示波器和 PC)。 此处附上了我的示例代码。 请回复我。

我使用  的是32引脚 RHB 封装 IC (MSP430FR2475)

我的硬件连接是、

P2.5 - RXD

P2.6 - TXD

#include

void Init_GPIO();

int main (空)

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

//配置 GPIO
// Init_gpio();

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

//配置 UART 引脚
SYSCFG3|=USCIA0RMP;//设置重映射源
P2SEL0 |= BIT5 | BIT6;//将2个 UART 引脚设置为第二功能

//配置 UART
UCA1CTLW0 |= UCSWRST;
UCA1CTLW0 |= UCSSEL_1;//将 ACLK 设置为 BRCLK

//波特率计算。 请参阅 UG 17.3.10
//(1) N=32768/4800=6.827
//(2) OS16=0、UCBRx=INT (N)=6
//(4)分数部分= 0.827。 参考 UG 表17-4、UCBRSx=0xEE。
UCA1BR0 = 6;// INT (32768/4800)
UCA1BR1 = 0x00;
UCA1MCTLW = 0xEE00;

UCA1CTLW0 &=~UCSWRST;//初始化 eUSCI
UCA1IE |= 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:中断;
默认值:break;

谢谢!

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

    根据数据表(SLASEO7B)表6-24、P2.5/6为 UCA1、但 ISR 与 UCA0搭配使用。 所以在中

    #pragma vector=USCI_A0_vector
    >switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
    > while (!(UCA0IFG&UCTXIFG));
    >UCA0TXBUF = UCA0RXBUF;

    这些都应该是指 A1、而不是 A0