主题中讨论的其他器件:MSP430FR5994、 MSP430FR5969、 MSP430WARE
工具/软件: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、¶m)){ 返回; } 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; } }
谢谢。