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.

[参考译文] Resource Explorer 上的 MSP430FR2433:UART 示例01

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1395808/msp430fr2433-uart-example-01-on-resource-explorer

器件型号:MSP430FR2433
主题中讨论的其他器件: MSP430G2553

工具与软件:

工具:CCS 12.7.1

大家好!

有人在运行 此 Resource Explorer UART 示例时遇到此错误

此外、还会出现一些奇怪的字符、无需键入。

感谢您的任何帮助!

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

    尊敬的 Italo:

    我从未见过此错误。  您是否在 MSP430FR2433 LaunchPad 上运行此代码?

    您以前是否能够成功编程但现在看到了错误?

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

    如果程序的.data/.bss "太大"、并且看门狗在 C 初始化期间关闭、则可能会出现此症状。 TI 示例可能不会是这样的理想选择、因为它们都很小。

    FR2433 Launchpad (以及另一个、我想)产生了一个赝像:它是随使用 RTC、尤其是 RTCIE 的程序一起提供的。 第一次对其进行编程时、调试器复位不会重置 RTC、而在新代码中中断会关闭、进而进入故障 ISR。 我(模糊)回忆起不同的可见症状、但这也返回到 CCSv8中、同时可能有所变化。 对 Launchpad 进行下电上电(在加载新代码后)应清除此特定条件。

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

    尊敬的 Italo:

    您是否仍然看到此问题?

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

    您好!

    问题似乎是 以某种方式解决的。 可能有一些初始化错误。

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

    嗯、我重试了一次、现在出现了该错误:  

    MSP430:在读取长度为0x12的第0页上0xc51a 处的存储器块时出现问题:无法读取器件存储器

    此外、CCS 会滞后并且奇怪的字符仍然出现。 已尝试下电上电、但没有结果。

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

    尊敬的 Italo:

    您是否遇到 MSP430FR2433 LaunchPad 的此问题、或者这是您的定制 PCB 问题?  如果是定制 PCB、您使用的是什么编程器?

    无论在哪一种情况下、都要检查 VDD 是否为+3.3V 且在 MCU 上保持稳定。

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

    您好!

    我正在使用 LaunchPad、奇怪的是、在我没有中断进行编码前、它"起作用"。 这些字符在调试模式下正确出现、但在执行时却奇怪地出现。

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

    尊敬的 Italo:

    我在没有对代码进行任何修改的情况下尝试了示例代码、它可以在我的 LaunchPad 上运行。  注意:在调试模式下运行时、由于调试器的低带宽、响应将出现3-4秒的延迟。  如果用户复位器件并在正常运行模式下运行、则应该会看到在终端应用程序上键入的任何内容都被回送至终端。

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

    您好!

    我使用板载 LED 尝试了另一个片段来检查 TX 和 RX 之间的通信完整性。 我想我错了使用控制台来查看回波;即使是最简单的代码也不会在终端中返回任何内容。

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

    嗯,我尝试了另一种方法,复制什么 成功在 msp430g2553上工作,但没有 在它

    #include <msp430.h>
    
    void Software_Trim();                       // Software Trim to get the best DCOFTRIM value
    void ser_output(unsigned char*);
    #define MCLK_FREQ_MHZ 1                     // MCLK = 1MHz
    
    unsigned char TXData[] = "Test\n\r";
    
    int main(void)
    {
        WDTCTL = WDTPW | WDTHOLD;                 // Stop watchdog timer
    
        __bis_SR_register(SCG0);                // Disable FLL
        CSCTL3 = SELREF__REFOCLK;               // Set REFO as FLL reference source
        CSCTL1 = DCOFTRIMEN | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_0;// DCOFTRIM=3, DCO Range = 1MHz
        CSCTL2 = FLLD_0 + 30;                   // DCODIV = 1MHz
        __delay_cycles(3);
        __bic_SR_register(SCG0);                // Enable FLL
        Software_Trim();                        // Software Trim to get the best DCOFTRIM value
        CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK; // set default REFO(~32768Hz) as ACLK source, ACLK = 32768Hz
                                                   // default DCODIV as MCLK and SMCLK source
    
        PM5CTL0 &= ~LOCKLPM5;                     // Disable the GPIO power-on default high-impedance mode
                                                  // to activate previously configured port settings
        P1DIR |= BIT0;
        P1OUT &= ~(BIT0);                           // P1.0 out low
    
        // Configure UART pins
        P1SEL0 |= BIT4 | BIT5;                    // set 2-UART pin as second function
    
        // Configure UART
        UCA0CTLW0 |= UCSWRST;                     // Put eUSCI in reset
        UCA0CTLW0 |= UCSSEL__SMCLK;
    
        // Baud Rate calculation
        UCA0BR0 = 104;                              // 1000000/9600 = 104.16
        UCA0BR1 = 0;
        UCA0MCTLW = 0x2000 | UCOS16 | UCBRF_2;      // 1000000/9600 - INT(1000000/9600)=0.16
                                                    // UCBRFx = int (0.16*16) = 2; 16 bcz of UCOS16
                                                    // UCBRSx value = 0x20 (See UG table 22-5)
        UCA0CTLW0 &= ~UCSWRST;                    // Initialize eUSCI
    
        while (1)
        {
            P1OUT ^= BIT0;
            ser_output(TXData);
            __delay_cycles(1000000);
        }
    }
    
    void ser_output(unsigned char* str)
    {
        while(*str)
        {
            while(!(UCA0IFG&UCTXIFG));
            UCA0TXBUF = *str++;
        }
    }
    
    void Software_Trim()
    {
        unsigned int oldDcoTap = 0xffff;
        unsigned int newDcoTap = 0xffff;
        unsigned int newDcoDelta = 0xffff;
        unsigned int bestDcoDelta = 0xffff;
        unsigned int csCtl0Copy = 0;
        unsigned int csCtl1Copy = 0;
        unsigned int csCtl0Read = 0;
        unsigned int csCtl1Read = 0;
        unsigned int dcoFreqTrim = 3;
        unsigned char endLoop = 0;
    
        do
        {
            CSCTL0 = 0x100;                         // DCO Tap = 256
            do
            {
                CSCTL7 &= ~DCOFFG;                  // Clear DCO fault flag
            }while (CSCTL7 & DCOFFG);               // Test DCO fault flag
    
            __delay_cycles((unsigned int)3000 * MCLK_FREQ_MHZ);// Wait FLL lock status (FLLUNLOCK) to be stable
                                                               // Suggest to wait 24 cycles of divided FLL reference clock
            while((CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)) && ((CSCTL7 & DCOFFG) == 0));
    
            csCtl0Read = CSCTL0;                   // Read CSCTL0
            csCtl1Read = CSCTL1;                   // Read CSCTL1
    
            oldDcoTap = newDcoTap;                 // Record DCOTAP value of last time
            newDcoTap = csCtl0Read & 0x01ff;       // Get DCOTAP value of this time
            dcoFreqTrim = (csCtl1Read & 0x0070)>>4;// Get DCOFTRIM value
    
            if(newDcoTap < 256)                    // DCOTAP < 256
            {
                newDcoDelta = 256 - newDcoTap;     // Delta value between DCPTAP and 256
                if((oldDcoTap != 0xffff) && (oldDcoTap >= 256)) // DCOTAP cross 256
                    endLoop = 1;                   // Stop while loop
                else
                {
                    dcoFreqTrim--;
                    CSCTL1 = (csCtl1Read & (~DCOFTRIM0)) | (dcoFreqTrim<<4);
                }
            }
            else                                   // DCOTAP >= 256
            {
                newDcoDelta = newDcoTap - 256;     // Delta value between DCPTAP and 256
                if(oldDcoTap < 256)                // DCOTAP cross 256
                    endLoop = 1;                   // Stop while loop
                else
                {
                    dcoFreqTrim++;
                    CSCTL1 = (csCtl1Read & (~DCOFTRIM0)) | (dcoFreqTrim<<4);
                }
            }
    
            if(newDcoDelta < bestDcoDelta)         // Record DCOTAP closest to 256
            {
                csCtl0Copy = csCtl0Read;
                csCtl1Copy = csCtl1Read;
                bestDcoDelta = newDcoDelta;
            }
    
        }while(endLoop == 0);                      // Poll until endLoop == 1
    
        CSCTL0 = csCtl0Copy;                       // Reload locked DCOTAP
        CSCTL1 = csCtl1Copy;                       // Reload locked DCOFTRIM
        while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)); // Poll until FLL is locked
    }
    // End of file
    

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

    有意思。

    您是否有可以检查 TX 线并确认波特率为9600的示波器或逻辑探针?

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

    您好!

    将我的逻辑分析仪配置为具有9600波特率的异步串行、结果如下所示:

    上部显示的是 TX。 正确描述的十六进制数据对应于每个字符的 ASCII。 我想这可行。

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

    尊敬的 Italo:

    是的、看起来器件正在正确回传数据。  那么、既然如此、在哪里仍然存在问题?

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

    我的计算机终端中没有打印任何内容。

    现在我可以看到传输正在发生、这是正确的、我想知道电缆或任何其他配置有什么问题...

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

    如果在 FR2433 Launchpad 上运行该模块、则需要在 PC 上打开设备管理器、并确定将哪个 COM 端口分配给"MSP430 application UART"。  请务必为您的终端应用指定这一点、并且它还设置为在9600波特下工作。

    请查看 LaunchPad 用户指南中的第5部分常见问题解答