主题中讨论的其他器件: TRS3232E、TRS3232
工具/软件:
大家好。
我需要有关 Msp430FR5994 UART 通信端口的帮助。
我尝试使用 msp430FR5994 (64引脚)通过 RS232与另一台设备通信。 我使用了 TRS3232E 来允许 MCU 和器件之间进行通信。 我已经初始化
USCI_A2、用于端口 P5.4 (TX 引脚53)和 P5.5 (RX 引脚54)、112500波特率。 一切都适用于 RX、不适用于 TX。 我认为这是一个硬件问题(引脚,连接, TRS3232, MCU ):没有。
我也更换了 PCB 板、但发现了同样的问题。 使用 CCS 分步调试我发现 TX 寄存器和标志似乎正常工作、
但似乎端口 P5.4未打开。 我尝试使用 TI 的两个示例代码针对我的产品进行修改、并查看 TX 端口是否正常工作:
PC 和 MCU 之间的回波,以及与 TX 和 Rx 端口的回波短接。不幸的是,我发现同样的问题。
您将在下面看到我的代码。 有人可以帮我吗?
我花了几天的时间没有找到解决方案。 "你怎么来了?" 我错过了什么? 提前感谢
//Echo PC MCU
#include
内部 main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗
PM5CTL0且=~LOCKLPM5;
//最大 DCO 设置~8MHz 的启动时钟系统
CSCTL0_H = CSKEY >> 8;//解锁时钟寄存器
CSCTL1 = DCOFSEL | DCORSEL;//将 DCO 设置为8MHz
CSCTL2 = SELA_VLOCLK | SELS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVS__1 | DIVM_1;//设置所有分频器
CSCTL0_H = 0;//锁定 CS 寄存器
UCA2CTLW0 |=UCSWRST;//将 eUSCI 置于复位状态
UCA2CTLW0 || UCSSEL_SMCLK;// CLK = SMCLK
UCA2BR0 = 4;//prima 52;
UCA2MCTLW|= UCOS16| UCBRF_5;
UCA2MCTLW|= 0x5500;
//**为每个 UART 配置 P5端口
P5SEL1 |=(BIT4 | BIT5);// USCI_A2 UART 操作
P5SEL0且=~(BIT4 | BIT5);
UCA2CTLW0 &=~UCSWRST;
UCA2IE |= UCRXIE;
__ bis_sr_register( GIE );
while (1)
{
_NOP ();
}
}
pragma vector=USCI_A2_vector
__interrupt void USCI_A2_ISR (void)
{
switch (__even_in_RANGE (UCA2IV、USCI_UART_UCTXCPTIFG))
{
case USCI_NONE:中断;
case USCI_UART_UCRXIFG:
while (!(UCA2IFG 和 UCTXIFG));
UCA2TXBUF = UCA2RXBUF;
_NOP ();
休息;
用例 USCI_UART_UCTXIFG:
休息;
用于 USCI_UART_UCSTTIFG:BREAK;
case USCI_UART_UCTXCPTIFG:break;
}
}
//************************************************************************************
//***Tx-Rx 端口短路时回波
#include
Volatile 无符号字符 RXData = 0;
Volatile unsigned char TXData = 1;
内部 main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗
//**为每个 UART 配置 P5端口
P5SEL1 |=(BIT4 | BIT5);// USCI_A2 UART 操作
P5SEL0且=~(BIT4 | BIT5);
PM5CTL0且=~LOCKLPM5;
//最大 DCO 设置~8MHz 的启动时钟系统
CSCTL0_H = CSKEY >> 8;//解锁时钟寄存器
CSCTL1 = DCOFSEL | DCORSEL;//将 DCO 设置为8MHz
CSCTL2 = SELA_VLOCLK | SELS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVS__1 | DIVM_1;//设置所有分频器
CSCTL0_H = 0;//锁定 CS 寄存器
UCA2CTLW0 |=UCSWRST;//将 eUSCI 置于复位状态
UCA2CTL1 |= UCSSEL_SMCLK;//prima UCA2CTLW0 |= UCSSEL_SMCLK;
UCA2BR0 = 4;
UCA2MCTLW|= UCOS16| UCBRF_5;
UCA2MCTLW|= 0x5500;
UCA2CTLW0 &=~UCSWRST;//初始化 eUSCI
UCA2IE |= UCRXIE;//启用 USCI_A2 RX 中断
while (1)
{
while (!(UCA2IFG & UCTXIFG));
UCA2TXBUF = TXData;//将数据加载到缓冲区中
__bis_SR_register (LPM0_bits | GIE);//进入 LPM0、启用中断
}
}
pragma vector=USCI_A2_vector
__interrupt void USCI_A2_ISR (void)
{
switch (__even_in_RANGE (UCA2IV、USCI_UART_UCTXCPTIFG))
{
case USCI_NONE:中断;
case USCI_UART_UCRXIFG:
RXData = UCA0RXBUF;//读取缓冲区
__BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//在 RECT 上退出 LPM0
休息;
case USCI_UART_UCTXIFG:break;
用于 USCI_UART_UCSTTIFG:BREAK;
case USCI_UART_UCTXCPTIFG:break;
}
}