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.

[参考译文] CCS/MSP-EXP430FR5994:使用片上内部振荡器的 UART 回声示例。

Guru**** 2589280 points
Other Parts Discussed in Thread: MSP430FR5994, MSP430FR5969

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/896383/ccs-msp-exp430fr5994-uart-echo-back-example-that-uses-the-on-chip-internal-oscillator

器件型号:MSP-EXP430FR5994
主题中讨论的其他器件:MSP430FR5994MSP430FR5969MSP430WARE

工具/软件:Code Composer Studio

您好!

这里的上一个问题相关

所连接的程序基于 TIREX 引脚 P2.0、P2.1上的 UART 回波示例。 (对于 msp430fr5969、因为 TIREX 目前没有一个用于 msp430fr5994)。

该程序在 msp430fr5994 launchpad 上运行良好、但在目前没有外部振荡器的生产板上不能正常工作(实际上、它还应该具有与 launchpad 上的振荡器相同的外部振荡器、但现在我们有一些问题) 因此、我们只需使用内部片上振荡器检查 UART。

是否有一个示例说明了如何与 UART 配合使用但使用片上内部振荡器?

使用驱动程序库。


在 TIREX 上找不到适用于 msp430fr5994的版本、而不是 适用于 MSP430fr5969的版本。

代码:

/*-版权所有-、BSD
*版权所有(c) 2017、德州仪器(TI)公司
*保留所有权利。
*
*
只要
符合以下条件*、允许以源代码和二进制形式重新分发和使用:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
***二进制形式的再发行必须在

*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
***未经

事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*、

不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
*贡献者都不对任何直接、间接、偶然、特殊、
*模范、 或相应的损害(包括但不限于
*采购替代产品或服务;丧失使用、数据或利润;
*或业务中断)、但出于任何责任理论
、*无论是在合同中、严格责任还是由于
使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
、*即使已获悉可能会发生此类损坏。
*--/版权--*//*********

//! 使用 EUSCI_A_UART_init API
的 EUSCI_A0外部环回测试//!
//! 说明:此演示将 TX 连接到 MSP430 UART 的 RX
//! 示例代码显示了寄存器//
!的正确初始化 以及用于接收和发送数据的中断。
//!
//! ACLK = BRCLK = 32.768kHz、MCLK = SMCLK = DCO =~1MHz
//!
//!
//! 在 MSP430FR5969中进行了测试
//! --------
//! RST -| P2.0/UCA0TXD|--|
//! | ||
//! | ||
//! | P2.1/UCA0RXD|--|
//! | |
//!
//! 此示例使用以下外设和 I/O 信号。 您必须
//! 查看这些内容并根据您自己的董事会需要进行更改:
//! - UART 外设
//! - GPIO 端口外设(用于 UART 引脚)
//! - UCA0TXD
//! - UCA0RXD
//!
//! 此示例使用以下中断处理程序。 要使用此示例
//! 在您自己的应用程序中、您必须将这些中断处理程序添加到
您的//! 矢量表。
//! - USCI_A0_Vector。
//
#include "driverlib.h"

uint16_t i;
uint8_t RXData = 0、TXData = 0;
uint8_t check = 0;

void main (void)
{
//停止看门狗
WDT_A_HOLD (WDT_A_base);

// LFXT 设置
//将 PJ.4和 PJ.5设置为主模块功能输入。
/*

*选择端口 J
*将引脚4、5设置为输入主模块功能 LFXT。
*
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_PJ、
GPIO_PIN4 + GPIO_PIN5、
GPIO_PRIMARY_MODULE_FUNCTION
);

//将 DCO 频率设置为1MHz
CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_0);
//将外部时钟频率设置为32.768KHz
cs_setExternalClockSource (32768、0);
//set ACLK=LFXT
CS_initClockSignal (CS_ACLK、CS_LFXTCLK_select、CS_Clock_divider);
//set SMCLK = DCO、分频器为1
CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_Clock_divider);
//set MCLK = DCO、分频器为1
CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider);
//Start XT1、无超时
CS_TurnOnLFXT (CS_LFXT_DRIVE_0);


//配置 UART 引脚
//将 P2.0和 P2.1设置为辅助模块功能输入。
/*

*选择端口2D
*将引脚0、1设置为输入次级模块功能(UCA0TXD/UCA0SIMO、UCA0RXD/UCA0SOMI)。
*
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P2、
GPIO_PIN0 + GPIO_PIN1、
GPIO_secondary 模块功能
);

/*
*禁用 GPIO 上电默认高阻抗模式以激活
*先前配置的端口设置
*
PMM_unlockLPM5 ();

//配置 UART
EUSCI_A_UART_initParam param ={0};
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_ACLK;
param.clockPrescalar = 3;
param.firstModReg = 0;
param.secondModReg = 92;
param.parity = EUSCI_A_UART_NO_parity;
param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
param.numerofStopBits = EUSCI_A_UART_Oe_STOP_BIT;
param.uartMode = EUSCI_A_UART_MODE;
param.oversaming= EUSCI_A_UART_LOW_FREQUENCY BAUDRATE_generation;

if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、&param)){
返回;
}

EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);

EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、
EUSCI_A_UART_receive_interrupt);

//启用 USCI_A0 RX 中断
EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、
EUSCI_A_UART_receive_interrupt); //启用中断

_enable_interrupt ();
while (1)
{
TXData = RXData; //增加 TX 数据
//将数据加载到缓冲区中
EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
TXData);
while (check!= 1);
Check = 0;
}
}
//*********
//
////这是 USCI_A0中断矢量处理例程。
////
*********
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
#pragma vector=USCI_A0_vector
__interrupt #elif
defined (__GNU__)
__attribute__(interrupt (USCI_A0_vector))#endif

void USCI_A0_ISR __interrupt #elt #elif defined (__GTIC_属性_(UCA_UCI_IN_IN_INTRIF_IN_IN_INTRIBUCI_IN_UCAINTRIEL

)(UCA0_INTRUCAINTR

USCI_NONE 案例:中断;
USCI_UART_UCRXIFG 案例:
RXData = EUSCI_A_UART_receiveData (EUSCI_A0_BASE);
支票=1;
中断;
案例 USCI_UART_UCTXIFG:中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:break;
}
} 

谢谢。

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

    尊敬的 Ron:

    我怀疑发生的情况是、如果没有 LFXT 32KHz 晶振、时钟故障检测会在加电时切换到 LFMODCLK。  LFMODCLK 是 MODOSC 时钟的1/128、该时钟以4.8MHz 为中心、可能会有很大的差异。 假设器件上的频率为4.8MHz、ACLK 将~ 37.5Khz、而不是32.768kHz。

    尽管有时钟频率、但您应该能够执行回路测试。  将 TXD 和 RXD 绑定在一起并向外发送一些字节。 由于发送时钟和接收时钟都来自相同的 ACLK 源、因此您应该能够无误地接收相同的时钟。

    如果要确认与外部器件的通信、则必须在 P2.0上输出 ACLK、并使用示波器或逻辑探头进行测量以确认频率。  然后、您可以调整波特率参数以生成目标波特率并匹配外部器件的波特率。

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

     尊敬的 Dennis:  

    感谢响应、但在第一步中、我只需要一个示例、说明如何与内部振荡器完全配合使用。

    如何将程序设置为与内部振荡器配合使用并通过 UART 发送一些数据? (任何常见波特率 (9600、19200、115200、...) 还可以  

    该示例可以与随附的代码一起使用、也可以与演示如何执行该操作的任何其他示例一起使用。

    谢谢

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

    哪种内部振荡器? 低速(30mumble kHz)还是高速(DCO = 1MHz)? 低速振荡器无法获得115200。 即使是9600也有点微不足道。 正如 Dennis 指出的、低速内部振荡器不是那么稳定。

    如果您只是在寻找 UART 链路来让您快速开始、我建议您通过设置为1MHz 的 EUSCI_A_UART_CLOCKSOURCE_SMCLK 使用 DCO。 对于19200bps、设置 ClockPrescalar =(1000000UL/19200UL)。

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

    我将以另一种方式进行介绍、假设我有一个仅包含 msp430fr5994芯片(和电源、但电路板上没有外部振荡器)的生产板。

    在这种情况下能否正确操作 UART? (任何已知的波特都将正常)  

    如果是、TIREX 中是否有这样的示例?

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

    我看不到将 UART 与 DCO (SMCLK)配合使用的 Driverlib 示例。  

    我相信、我建议的更改将会让您继续。

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

    我看不到任何使用 DCO 的 DriverLib 示例、即使没有 UART 也是如此(实际上 、msp430fr5994的 TIREX 在示例中非常缺乏。)

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

    您发布的代码使用 DCO 作为 MCLK/SMCLK、但它使用 ACLK 作为 UART。 我曾建议您将该程序更改为将 SMCLK 用于 UART。 或者可能我不理解您的观点。

    我同意 FR5994的 TIREX Driverllib 示例集非常精简。 如果您已经安装了 MSP430Ware、 那么 driverlib/examples 目录中会有更多(但没有更多)。

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

    谢谢。  

    我不确定如何更改将使用 SMCLK 而不是 DCO (MCLK/SMCLK)的代码。

    我尝试从这个(第121行)中更改:

    param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_ACLK; 

    为此:

    param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK; 

    并添加了常数发送(而不是以前的回波)

    其结果是、我将获得0xFF 到终端(对于每个发送周期)。 从终端发送到 MSP 似乎不会引起 MSP 上的任何中断。

    随附了整个代码。

    代码:

    /*-版权所有-、BSD
    *版权所有(c) 2017、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *--/版权--*//*********
    
    //! 使用 EUSCI_A_UART_init API
    的 EUSCI_A0外部环回测试//!
    //! 说明:此演示将 TX 连接到 MSP430 UART 的 RX
    //! 示例代码显示了寄存器//
    !的正确初始化 以及用于接收和发送数据的中断。
    //!
    //! ACLK = BRCLK = 32.768kHz、MCLK = SMCLK = DCO =~1MHz
    //!
    //!
    //! 在 MSP430FR5969中进行了测试
    //! --------
    //! RST -| P2.0/UCA0TXD|--|
    //! | ||
    //! | ||
    //! | P2.1/UCA0RXD|--|
    //! | |
    //!
    //! 此示例使用以下外设和 I/O 信号。 您必须
    //! 查看这些内容并根据您自己的董事会需要进行更改:
    //! - UART 外设
    //! - GPIO 端口外设(用于 UART 引脚)
    //! - UCA0TXD
    //! - UCA0RXD
    //!
    //! 此示例使用以下中断处理程序。 要使用此示例
    //! 在您自己的应用程序中、您必须将这些中断处理程序添加到
    您的//! 矢量表。
    //! - USCI_A0_Vector。
    //
    #include "driverlib.h"
    
    volatile uint32_t i;
    uint8_t RXData = 0、TXData = 0;
    void main (void)
    {
    //停止看门狗
    WDT_A_HOLD (WDT_A_base);
    
    // LFXT 设置
    //将 PJ.4和 PJ.5设置为主模块功能输入。
    /*
    
    *选择端口 J
    *将引脚4、5设置为输入主模块功能 LFXT。
    *
    GPIO_setPeripheralModuleFunctionInputPin (
    GPIO_PORT_PJ、
    GPIO_PIN4 + GPIO_PIN5、
    GPIO_PRIMARY_MODULE_FUNCTION
    );
    
    //将 DCO 频率设置为1MHz
    CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_0);
    //将外部时钟频率设置为32.768KHz
    cs_setExternalClockSource (32768、0);
    //set ACLK=LFXT
    CS_initClockSignal (CS_ACLK、CS_LFXTCLK_select、CS_Clock_divider);
    //set SMCLK = DCO、分频器为1
    CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_Clock_divider);
    //set MCLK = DCO、分频器为1
    CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider);
    //Start XT1、无超时
    CS_TurnOnLFXT (CS_LFXT_DRIVE_0);
    
    
    //配置 UART 引脚
    //将 P2.0和 P2.1设置为辅助模块功能输入。
    /*
    
    *选择端口2D
    *将引脚0、1设置为输入次级模块功能(UCA0TXD/UCA0SIMO、UCA0RXD/UCA0SOMI)。
    *
    GPIO_setPeripheralModuleFunctionInputPin (
    GPIO_PORT_P2、
    GPIO_PIN0 + GPIO_PIN1、
    GPIO_secondary 模块功能
    );
    
    /*
    *禁用 GPIO 上电默认高阻抗模式以激活
    *先前配置的端口设置
    *
    PMM_unlockLPM5 ();
    
    //配置 UART
    EUSCI_A_UART_initParam param ={0};
    //param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_ACLK;
    param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
    param.clockPrescalar = 3;
    param.firstModReg = 0;
    param.secondModReg = 92;
    param.parity = EUSCI_A_UART_NO_parity;
    param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
    param.numerofStopBits = EUSCI_A_UART_Oe_STOP_BIT;
    param.uartMode = EUSCI_A_UART_MODE;
    param.oversaming= EUSCI_A_UART_LOW_FREQUENCY BAUDRATE_generation;
    
    if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、&param)){
    返回;
    }
    
    EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);
    
    EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、
    EUSCI_A_UART_receive_interrupt);
    
    //启用 USCI_A0 RX 中断
    EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、
    EUSCI_A_UART_receive_interrupt); //启用中断
    
    _enable_interrupt ();
    while (1)
    {
    TXData = RXData; //增加 TX 数据
    //将数据加载到缓冲区中
    EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
    TXData);
    EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
    "T");
    EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
    'e');
    EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
    "S");
    EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
    "T");
    
    //延迟
    for (i=100000;i>0;i--);
    继续;
    }
    }
    //*********
    //
    ////这是 USCI_A0中断矢量处理例程。
    ////
    *********
    #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
    #pragma vector=USCI_A0_vector
    __interrupt #elif
    defined (__GNU__)
    __attribute__(interrupt (USCI_A0_vector))#endif
    
    void USCI_A0_ISR __interrupt #elt #elif defined (__GTIC_属性_(UCA_UCI_IN_IN_INTRIF_IN_IN_INTRIBUCI_IN_UCAINTRIEL
    
    )(UCA0_INTRUCAINTR
    
    USCI_NONE 案例:中断;
    USCI_UART_UCRXIFG 案例:
    RXData = EUSCI_A_UART_receiveData (EUSCI_A0_BASE);
    中断;
    案例 USCI_UART_UCTXIFG:中断;
    案例 USCI_UART_UCSTTIFG:中断;
    案例 USCI_UART_UCTXCPTIFG:break;
    }
    }
    

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

    您还需要将 ClockPrescalar =(1000000UL/19200UL)设置为19200bps。 1000000UL 为1MHz、19200为19200bps。

    设置 辅助调制器= 0可能也是一个好主意、但这可能会也可能不会妨碍。

    [编辑:略微澄清。]

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

    工作:)很好

    谢谢!

    为了使该线程完成、 附加了整个代码。  

    代码:  

    这适用于19200 8N1

    /*-版权所有-、BSD
    *版权所有(c) 2017、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *--/版权--*//*********
    
    //! 使用 EUSCI_A_UART_init API
    的 EUSCI_A0外部环回测试//!
    //! 说明:此演示将 TX 连接到 MSP430 UART 的 RX
    //! 示例代码显示了寄存器//
    !的正确初始化 以及用于接收和发送数据的中断。
    //!
    //! ACLK = BRCLK = 32.768kHz、MCLK = SMCLK = DCO =~1MHz
    //!
    //!
    //! 在 MSP430FR5969中进行了测试
    //! --------
    //! RST -| P2.0/UCA0TXD|--|
    //! | ||
    //! | ||
    //! | P2.1/UCA0RXD|--|
    //! | |
    //!
    //! 此示例使用以下外设和 I/O 信号。 您必须
    //! 查看这些内容并根据您自己的董事会需要进行更改:
    //! - UART 外设
    //! - GPIO 端口外设(用于 UART 引脚)
    //! - UCA0TXD
    //! - UCA0RXD
    //!
    //! 此示例使用以下中断处理程序。 要使用此示例
    //! 在您自己的应用程序中、您必须将这些中断处理程序添加到
    您的//! 矢量表。
    //! - USCI_A0_Vector。
    //
    #include "driverlib.h"
    
    volatile uint32_t i;
    uint8_t RXData = 0、TXData = 0;
    void main (void)
    {
    //停止看门狗
    WDT_A_HOLD (WDT_A_base);
    
    // LFXT 设置
    //将 PJ.4和 PJ.5设置为主模块功能输入。
    /*
    
    *选择端口 J
    *将引脚4、5设置为输入主模块功能 LFXT。
    *
    GPIO_setPeripheralModuleFunctionInputPin (
    GPIO_PORT_PJ、
    GPIO_PIN4 + GPIO_PIN5、
    GPIO_PRIMARY_MODULE_FUNCTION
    );
    
    //将 DCO 频率设置为1MHz
    CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_0);
    //将外部时钟频率设置为32.768KHz
    cs_setExternalClockSource (32768、0);
    //set ACLK=LFXT
    CS_initClockSignal (CS_ACLK、CS_LFXTCLK_select、CS_Clock_divider);
    //set SMCLK = DCO、分频器为1
    CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_Clock_divider);
    //set MCLK = DCO、分频器为1
    CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider);
    //Start XT1、无超时
    CS_TurnOnLFXT (CS_LFXT_DRIVE_0);
    
    
    //配置 UART 引脚
    //将 P2.0和 P2.1设置为辅助模块功能输入。
    /*
    
    *选择端口2D
    *将引脚0、1设置为输入次级模块功能(UCA0TXD/UCA0SIMO、UCA0RXD/UCA0SOMI)。
    *
    GPIO_setPeripheralModuleFunctionInputPin (
    GPIO_PORT_P2、
    GPIO_PIN0 + GPIO_PIN1、
    GPIO_secondary 模块功能
    );
    
    /*
    *禁用 GPIO 上电默认高阻抗模式以激活
    *先前配置的端口设置
    *
    PMM_unlockLPM5 ();
    
    //配置 UART
    EUSCI_A_UART_initParam param ={0};
    //param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_ACLK;
    param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
    // param.clockPrescalar = 3;
    param.clockPrescalar =(1000000UL/19200UL);
    param.firstModReg = 0;
    param.secondModReg = 92;
    param.parity = EUSCI_A_UART_NO_parity;
    param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
    param.numerofStopBits = EUSCI_A_UART_Oe_STOP_BIT;
    param.uartMode = EUSCI_A_UART_MODE;
    param.oversaming= EUSCI_A_UART_LOW_FREQUENCY BAUDRATE_generation;
    
    if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、&param)){
    返回;
    }
    
    EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);
    
    EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、
    EUSCI_A_UART_receive_interrupt);
    
    //启用 USCI_A0 RX 中断
    EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、
    EUSCI_A_UART_receive_interrupt); //启用中断
    
    _enable_interrupt ();
    while (1)
    {
    TXData = RXData; //增加 TX 数据
    //将数据加载到缓冲区中
    EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
    TXData);
    EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
    "T");
    EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
    'e');
    EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
    "S");
    EUSCI_A_UART_transmitData (EUSCI_A0_BASE、
    "T");
    
    //延迟
    for (i=100000;i>0;i--);
    继续;
    }
    }
    //*********
    //
    ////这是 USCI_A0中断矢量处理例程。
    ////
    *********
    #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
    #pragma vector=USCI_A0_vector
    __interrupt #elif
    defined (__GNU__)
    __attribute__(interrupt (USCI_A0_vector))#endif
    
    void USCI_A0_ISR __interrupt #elt #elif defined (__GTIC_属性_(UCA_UCI_IN_IN_INTRIF_IN_IN_INTRIBUCI_IN_UCAINTRIEL
    
    )(UCA0_INTRUCAINTR
    
    USCI_NONE 案例:中断;
    USCI_UART_UCRXIFG 案例:
    RXData = EUSCI_A_UART_receiveData (EUSCI_A0_BASE);
    中断;
    案例 USCI_UART_UCTXIFG:中断;
    案例 USCI_UART_UCSTTIFG:中断;
    案例 USCI_UART_UCTXCPTIFG:break;
    }
    }