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.

[参考译文] MSP430FR2475:低温下的波特率不稳定

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1445685/msp430fr2475-baudrate-unstable-at-low-temperatures

器件型号:MSP430FR2475

工具与软件:

你(们)好  

我有一个产品,在低温下串行通信失败(<5摄氏度)。

我将使用 DCO (16MHz)来生成我的115200 Buadrate

我正在使用频率为32768Hz 的外部 XTAL。

这是我的初始化例程:

const uint16_t u16Ratio = 488U;

/* setup pins for XCLK */
P2SEL0 |= XOUT | XIN;

/* use XCLK as ACLK */
CSCTL6 &= ( uint16_t ) ~ ( ( uint16_t ) DIVA );
CSCTL4 &= ( uint16_t ) ~ ( ( uint16_t ) SELA );

/* set FRAM wait states to 1 */
/*lint -save -e960 */
FRCTL0 = FRCTLPW | NWAITS_1;
/*lint -restore */

/* set ACLK to X Inputs */
CSCTL3 &= ( uint16_t ) ~ ( ( uint16_t ) SELREF_3 );
CSCTL3 |= ( uint16_t ) REFOLP_1;

__bis_SR_register( SCG0 ); /* disable FLL */
/* Set DCO FLL reference = REFO */
CSCTL0 = 0U; /* clear DCO and MOD registers */

CSCTL1 &= ( uint16_t ) ~ ( ( uint16_t ) DCORSEL_7 ); /* Clear DCO frequency select bits first */
CSCTL1 |= ( uint16_t ) DCORSEL_5; /* Set DCO frequency range. DCO Range = 16MHz */
CSCTL2 = ( u16Ratio - 1U ); /* f(DCOCLKDIV) = 16MHz */
CSCTL0 = __data20_read_short( TLV_16MHz_ADDR ); /* load DCO TLV trim vale to DCO Tap */

__delay_cycles( 3U );
__bic_SR_register( SCG0 ); /* enable FLL */

CSCTL4 |= ( uint16_t ) SELMS__REFOCLK; /* set REFO(~32768Hz) as MCLK -- This delay may cause fake lock when DCOTAP=0 */
__delay_cycles( 10U ); /* delay 10 FLL reference clock cycles */

while( ( CSCTL7 & ( ( uint16_t ) FLLUNLOCK0 | ( uint16_t ) FLLUNLOCK1 ) ) > 0U )
{
/* Check if FLL locked */
}
/* set default REFO(~32768Hz) as ACLK source, ACLK = 32768Hz */
/* default DCOCLKDIV as MCLK and SMCLK source */
CSCTL4 &= ( uint16_t ) ~ ( ( uint16_t ) SELMS | ( uint16_t ) SELA );

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

    Henrik、您好、

    我对迟交的答复表示歉意。 您是否能够同时测量室温和低温下的 TXD 输出位周期?

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

    您好、Dennis。  

    我曾尝试冷却电路板、但未在数据线上看到任何变化。 但我没有看到这里的问题。 电路板在任何温度下都能按预期工作。

    我还没有新生产批次的任何电路板、因此可能与其他相关。

    但您能确认我的初始化似乎正确吗、您能确认2475应自动补偿、并保留带有外部 xtal 的 FLL。

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

    Henrik、您好、

    您已指示要使用外部32KHz xtal 作为 DCO 基准、但您的代码似乎使用的是内部 REFO、也是32KHz、但在整个温度范围内不如外部 xtal 稳定。

    此处是 MSP430FR2475时钟初始化代码的副本 、可在 TI Resource Explorer 中找到。  这应该能在整个温度范围内提供稳定的 DCO。

        P2SEL0 |= BIT0 | BIT1;                  // P2.0~P2.1: crystal pins
        do
        {
            CSCTL7 &= ~(XT1OFFG | DCOFFG);           // Clear XT1 and DCO fault flag
            SFRIFG1 &= ~OFIFG;
        } while (SFRIFG1 & OFIFG);                   // Test oscillator fault flag
    
        __bis_SR_register(SCG0);                     // disable FLL
        CSCTL3 |= SELREF__XT1CLK;                    // Set XT1 as FLL reference source
        CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_5;// DCOFTRIM=5, DCO Range = 16MHz
        CSCTL2 = FLLD_0 + 487;                       // DCOCLKDIV = 16MHz
        __delay_cycles(3);
        __bic_SR_register(SCG0);                     // enable FLL
        Software_Trim();                             // Software Trim to get the best DCOFTRIM value
    
        CSCTL4 = SELMS__DCOCLKDIV | SELA__XT1CLK;   // set XT1 (~32768Hz) as ACLK source, ACLK = 32768Hz
                                                     // default DCOCLKDIV as MCLK and SMCLK source
    
        P1DIR |= BIT0 | BIT7;                   // set SMCLK ACLK and LED pin as output
        P1SEL1 |= BIT7;                         // set SMCLK P1.7 pin as second function
        P2DIR |= BIT2;
        P2SEL1 |= BIT2;                         // set ACLK P2.2 pin as second function
    
        PM5CTL0 &= ~LOCKLPM5;                        // Disable the GPIO power-on default high-impedance mode
                                                     // to activate previously configured port settings