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.

[参考译文] EVM430-FR6043:无法在超级终端中获取 Tx 数据

Guru**** 2536510 points
Other Parts Discussed in Thread: EVM430-FR6043, MAX3232, MSP430FR6043

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1013355/evm430-fr6043-unable-to-get-tx-data-in-hyper-terminal

器件型号:EVM430-FR6043
主题中讨论的其他器件: MAX3232MSP430FR6043

我将在 EVM430-fr6043中测试 UART 协议。 我无法在超级终端中看到 UART 输出。

电路板:EVM430 FR6043

USB -调试接口:MSP - FET430UIF

板上没有串行端口、因此我使用了 TTL 到 RS-232转换器、使用了 max3232 IC、使用了 FT232RL 的 RS-232到 USB 转换器。 我在超级终端中检查输出、但未找到电路板的任何响应。 调试寄存器时、如下图所示。  

我不熟悉这个领域。 请帮助我解决此 问题、并提前感谢您。

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

    您好!

    您使用哪种代码?

    我想您可以使用我们的示例代码 :https://dev.ti.com/tirex/explore/node?node=AAA0cv-mSGNbvGcZLylxxw__IOGqZri__LATEST

    实际上、EVM 板包含 USB-TTL 电路、将 EEVM 连接到 PC 后、您将找到一个应用端口。

    谢谢!

    此致

    Johnson

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

    您好、先生、

    感谢您的回答。 连接到 evm430-fr6043板后、我找不到应用端口。 而是在器件管理器的其他器件中显示"MCU COMM HID 转串行桥接器"和"MSP 工具驱动程序"、如屏幕截图所示。  

    谢谢、

    Ashok。

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

    您好!

    我认为您没有正常安装驱动程序、您可以看到我的照片:

    您还可以在 J3中找到 USRT Connext。

    谢谢!

    此致

    Johnson

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

    您好、先生、

    在哪里可以下载驱动程序以查找 UART 应用端口?

    我在 J3中连接了 RXD 和 TXD。

    谢谢、

    Ashok。

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

    您好、先生、

    这是我在进行微小更改时使用的代码、即 DATA=1。

    #include
    #include "msp430fr6043.h"
    #include "stdint.h"

    uint8_t data=1;

    int main (空)

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

    //配置 GPIO
    P1SEL0 |=(BIT2 | BIT3);
    P1SEL1 &=~Ω(BIT2 | BIT3);// USCI_A1 UART 操作

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

    //最大 DCO 设置~8MHz 的启动时钟系统
    CSCTL0_H = CSKKEY_H;//解锁 CS 寄存器
    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_A3配置为 UART 模式
    UCA1CTLW0 = UCSWRST;//将 eUSCI 置于复位状态
    UCA1CTLW0 |= UCSSEL_SMCLK;// CLK = SMCLK
    //波特率计算
    // 800000000 /(16*9600)= 52.083
    //分数部分= 0.083
    //用户指南表24-4:UCBRSx = 0x04
    // UCBRFx = int ((52.083-52)*16)= 1.
    UCA1BRW = 52;// 8000000/16/9600
    UCA1MCTLW |= UCOS16 | UCBRF_1 | 0x4900;
    UCA1CTLW0 &=~UCSWRST;//初始化 eUSCI
    UCA1IE |= UCRXIE;//启用 USCI_A3 RX 中断

    while (!(UCA1IFG & UCTXIFG));
    UCA1TXBUF =数据;

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

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

    switch (__evo_in_range (UCA1IV、USCI_UART_UCTXCPTIFG))

    USCI_NONE 案例:中断;
    USCI_UART_UCRXIFG 案例:
    while (!(UCA1IFG & UCTXIFG));
    UCA1TXBUF = UCA1RXBUF;
    __no_operation();
    中断;
    案例 USCI_UART_UCTXIFG:中断;
    案例 USCI_UART_UCSTTIFG:中断;
    案例 USCI_UART_UCTXCPTIFG:中断;
    默认值:break;

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

    您好!  

    是否已正常安装驱动程序? 您可以微调 EVM430-FR6043用户指南中的链接。

    此代码应该能够传输接收到的数据、有什么问题吗?

    此致

    Johnson

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

    您好、先生、

    我安装了驱动程序  

    [引用 userid="404787" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1013355/evm430-fr6043-unable-to-get-tx-data-in-hyper-terminal/3749430 #3749430">您是否已正常安装驱动程序? 您可以微调 EVM430-FR6043用户指南中的链接。[/quot]

    我安装了驱动程序。 但是、在将 USB 电缆连接到 PC 后、我无法看到通信端口。

    [引用 userid="404787" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1013355/evm430-fr6043-unable-to-get-tx-data-in-hyper-terminal/3749430 #3749430"]此代码应该可以传输接收到的数据,有任何问题吗?

    代码正常。 但是、当运行代码时、我会在超级终端中获取垃圾数据。

    谢谢、

    Ashok。

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

    您好!

    波特是否与匹配?

    此代码中的段是9600。

    此致

    Johnson

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

    您好、先生、

    [引用 userid="404787" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1013355/evm430-fr6043-unable-to-get-tx-data-in-hyper-terminal/3749458 #3749458"]此代码中的段名为9600。

    波特率设置为9600、这与代码类似。

    谢谢、

    Ashok。

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

    您好、Ashok、

    您是否有对数分析、如果有、可能可以捕获波形并尝试找到一些东西。

    我将在我的一侧测试该代码、然后返回。

    谢谢!

    此致

    Johnson

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

    您好、先生、

    我没有逻辑分析仪、但我有示波器。 因此、我在 TxD 引脚处进行检查、但它不捕获准确的数据。 我不知道是示波器问题还是 TxD 引脚问题。  

    谢谢、

    Ashok。

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

    您好、Ashok、

    明白了、我将在我的一侧进行测试、并提供一个代码可以在以后正常运行。

    谢谢!

    此致

    Johnson

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

    您好、Ashok、

    更新 UART 示例代码、我测试的结果正常。

    #include <msp430.h>
    
    int main(void)
    {
        WDTCTL = WDTPW | WDTHOLD;               // Stop Watchdog
    
        // Configure GPIO
        P1SEL1 &= ~(BIT2 | BIT3);
        P1SEL0 |= BIT2 | BIT3;                  // USCI_A1 UART operation
    
        // Disable the GPIO power-on default high-impedance mode to activate
        // previously configured port settings
        PM5CTL0 &= ~LOCKLPM5;
    
        // Startup clock system with max DCO setting ~8MHz
        CSCTL0_H = CSKEY_H;                     // Unlock CS registers
        CSCTL1 = DCOFSEL_3 | DCORSEL;           // Set DCO to 8MHz
        CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;
        CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;   // Set all dividers
        CSCTL0_H = 0;                           // Lock CS registers
    
        // Configure USCI_A3 for UART mode
        UCA1CTLW0 = UCSWRST;                    // Put eUSCI in reset
        UCA1CTLW0 |= UCSSEL__SMCLK;             // CLK = SMCLK
        // Baud Rate calculation
        // 8000000/(16*9600) = 52.083
        // Fractional portion = 0.083
        // User's Guide Table 24-4: UCBRSx = 0x04
        // UCBRFx = int ( (52.083-52)*16) = 1
        UCA1BRW = 52;                           // 8000000/16/9600
        UCA1MCTLW |= UCOS16 | UCBRF_1 | 0x4900;
        UCA1CTLW0 &= ~UCSWRST;                  // Initialize eUSCI
        UCA1IE |= UCRXIE;                       // Enable USCI_A3 RX interrupt
    
        __bis_SR_register(LPM3_bits + GIE);     // Enter LPM3, interrupts enabled
        __no_operation();                       // For debugger
    }
    
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=EUSCI_A1_VECTOR
    __interrupt void USCI_A1_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(EUSCI_A1_VECTOR))) USCI_A1_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
        switch(__even_in_range(UCA1IV, USCI_UART_UCTXCPTIFG))
        {
            case USCI_NONE: break;
            case USCI_UART_UCRXIFG:
                while(!(UCA1IFG&UCTXIFG));
                UCA1TXBUF = UCA1RXBUF;
                __no_operation();
                break;
            case USCI_UART_UCTXIFG: break;
            case USCI_UART_UCSTTIFG: break;
            case USCI_UART_UCTXCPTIFG: break;
            default: break;
        }
    }
    

    谢谢!

    此致

    Johnson

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

    您好、先生、

    感谢您的建议。 我尝试了此示例代码、并在超级终端获取了所需的数据。 我尝试使用驱动程序库使用相同的数据回显 UART 示例、然后在超级终端中没有任何内容、同时检查两者是否以相同的速度运行(即9600)。

    #include "driverlib.h"
    
    uint16_t i;
    uint8_t RXData = 0, TXData = 'A';
    uint8_t check = 0;
    
    void main(void)
    {
        // stop watchdog
        WDT_A_hold(WDT_A_BASE);
    
    
    
        //Set DCO frequency to 8 MHz
        CS_setDCOFreq(CS_DCORSEL_0,CS_DCOFSEL_3);
    
        CS_initClockSignal(CS_ACLK,CS_VLOCLK_SELECT,CS_CLOCK_DIVIDER_1);
    
        //Set SMCLK = DCO with frequency divider of 1
        CS_initClockSignal(CS_SMCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);
    
        //Set MCLK = DCO with frequency divider of 1
        CS_initClockSignal(CS_MCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);
    
    
        GPIO_setAsPeripheralModuleFunctionInputPin(
        GPIO_PORT_P1,
        GPIO_PIN2 + GPIO_PIN3,
        GPIO_SECONDARY_MODULE_FUNCTION
        );
    
        /*
         * Disable the GPIO power-on default high-impedance mode to activate
         * previously configured port settings
         */
        PMM_unlockLPM5();
    
        // Configure UART
        EUSCI_A_UART_initParam param = {0};
        param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
        param.clockPrescalar = 52;
        param.firstModReg = 1;
        param.secondModReg = 0x49;
        param.parity = EUSCI_A_UART_NO_PARITY;
        param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
        param.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;
        param.uartMode = EUSCI_A_UART_MODE;
        param.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;
        
        if (STATUS_FAIL == EUSCI_A_UART_init(EUSCI_A1_BASE, &param)) {
            return;
        }
    
        EUSCI_A_UART_enable(EUSCI_A1_BASE);
    
        EUSCI_A_UART_clearInterrupt(EUSCI_A1_BASE,
          EUSCI_A_UART_RECEIVE_INTERRUPT);
    
        // Enable USCI_A0 RX interrupt
        EUSCI_A_UART_enableInterrupt(EUSCI_A1_BASE,
          EUSCI_A_UART_RECEIVE_INTERRUPT);                     // Enable interrupt
    
        __enable_interrupt();
        while (1)
        {
            //TXData = TXData+1;                      // Increment TX data
            // Load data onto buffer
            EUSCI_A_UART_transmitData(EUSCI_A1_BASE,
            				   TXData);
            while(check != 1);
            check = 0;
        }
    }
    //******************************************************************************
    //
    //This is the USCI_A0 interrupt vector service routine.
    //
    //******************************************************************************
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=USCI_A1_VECTOR
    __interrupt
    #elif defined(__GNUC__)
    __attribute__((interrupt(USCI_A1_VECTOR)))
    #endif
    void USCI_A1_ISR(void)
    {
      switch(__even_in_range(UCA1IV,USCI_UART_UCTXCPTIFG))
      {
        case USCI_NONE: break;
        case USCI_UART_UCRXIFG:
          RXData = EUSCI_A_UART_receiveData(EUSCI_A1_BASE);
          if(!(RXData == TXData))                   // Check value
          {
            while(1);
          }
          check =1;
          break;
        case USCI_UART_UCTXIFG: break;
        case USCI_UART_UCSTTIFG: break;
        case USCI_UART_UCTXCPTIFG: break;
      }
    }
    

    请指导我。

    谢谢、

    Ashok

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

    您好、Ashok、

    也许您可以调试这个代码并检查这个代码是否能够进入中断。

    谢谢!

    此致

    Johnson