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.

[参考译文] MSP430I2041:电源重置

Guru**** 2614265 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/660353/msp430i2041-power-reset

部件号:MSP430I2041

您好,

我已经为设备编程了UART功能。 当我使用CCS调试窗口运行设备时,它工作正常,并且我能够在串行终端上看到正确的字符。 当设备断电后再次连接时,我遇到一些问题。

再次连接时,一些错误的字符被发送到串行终端。 重新编程时设备工作正常。 如何确保即使在电源重置后仍发送正确的字符?

此致,

Abhishek。

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

    您能否提供更多有关您在串行终端窗口中实际看到的内容的详细信息? 除了错误的字符外,您是否仍看到预期的字符?

    此致,
    Nathan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Abhishek,
    *从PCB到串行端子的连接是否包括Rx,Tx,GND的全部3个部分(有些人忘记了GND部分)?
    *您连接的是哪种类型的电源? 是否已过滤? 您能否在您的电源到PCB线路的V+上创建一个简单的C-L-C PI过滤器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    当我对主板进行编程时,一切都正常工作。 卸下电源时,串行终端上没有字符(这是正常的)。 连接电源时,有时会看到一个',',有时会看到空白。 我认为当我卸下并连接电源时,设备会重置。 此重置会影响UART配置。 如何确保即使在电源重置后,设备仍能按需要工作? 这可能与电源重置中断有关,但我无法将其纳入我的程序。

    此致,

    Abhishek。

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

    当您连接电源时,您是指USB电缆还是外部电源? 我假设您正在使用USB电缆与PC通信,那么在您卸下并重新连接电源时USB电缆是否已连接?

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

    您好,

      我要说的是拔下USB电缆。 我正在通过MSP430F5529LP上提供的ezFET lite对板进行编程。 USB用于电源,编程和UART通信。

    此致,

    Abhishek。

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

    设备重新启动不应影响UART配置。 您是否可以发布您的UART配置代码(以及时钟配置代码),以便我可以查看是否有任何突出问题。

    我认为您的UART命令发送速度可能太快。 当您在CCS中运行调试器时,您的设备已开机,因此这不是问题。 在发送UART命令之前,您是否可以尝试在main()中设置延迟,看看这是否有帮助?

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

    此问题是否已解决? 如果是,请将其标记为"已回答"。 如果很快没有响应,则此线程将由于不活动而关闭。

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

    您好,

    否,此问题尚未解决。  我观察到的是,每次通电后,UART都会向串行终端发送不正确的字符。 请查找我的项目中包含的附加main.c和low_leve_init.c文件。

    主要c

    #include "MSP4S.h"
    unsigned char I;
    void main(void){
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    P1SEL0 || BIT2 | BIT3; // WFP ESP/3 1.2 eUSCI_A函数
    P1SEL1 &=~(BIIT2 | BIT3);
    
    UCA0CTL1 |= UCSWRST; //在复位时按住eUSCI
    UCA0CTL1 || UCSSEL_2; // SMCLK
    UCA0BR0 = 0xAA; // 9600波特
    UCA0BR1 = 0x06;
    UCA0MCTLW = 0xD600; // 16.384MHz/9600 = 1706.6667 (参见UG)
    UCA0CTL1 &=~UCSWRST; //从重置中释放
    UCA0IE |= UCRXIE;//启用RX中断
    I='f';
    while (1)
    {
    	while (!(UCA0IFG&UCTXIFG));// USSCI_A0 TX缓冲器就绪?
    	UCA0TXBUF = I;
    }
    __bis_sr_register (LPM0_BITS | GIE); //输入LPM0
    __no_operation(); //用于调试器
    }
    

    low_lever_init

    包括"MSP4S.h"

    #ifdef __TI_Compiler_version__
    int _system_pre_init(void)
    #Elif __IAR_SYSTEMS _ICC__
    int __low_lever_init (void)
    #Elif __GNUC__
    extern int system_pre_init(void)__attribute_(构造函数));
    int system_pre_init(void)
    #否则
    错误编译器不受支持!
    #endif

       unsigned long *jtagPwd =(unsigned long *)JTAG_DIS_PWD1;

       /*为看门狗计时器供电*/
       WDTCTL = WDTPW | WDTCNTCL;

       /*检查JTAG密码位置,如果密码不匹配,则禁用JTAG。
        *否则,JTAG将在重置后的第64个周期中启用。
        */
       如果(*jtagPwd != 0x0万)&&(*jtagPwd != 0xFFFFFFFFFFFFFFF))
       {
           /*禁用JTAG */
           SYSJTAGDIS = JTAGDISKEY;
       }

       /*校准部分
        *检查IFG1中是否有BORIFG标志。 如果这是一个BorIFG,则执行校准。
        *否则跳过校准
        */
       IF (IFG1和BORIFG)
       {
           /*对62字节TLV数据执行2的补码校验和*/
           无符号int校验和=0;
           unsigned char *TLV_address_for _parse =(unsigned char *)TLV_start);
           unsigned int *TLV_address_for校验和=(unsigned int *) TLV_start + 1);

           做
           {
               checksum ^=* TLV_address_for校验和++;
           }同时(TLV_address_for校验和<=(unsigned int *)TLV_end);

           checksum ^= 0xFFFF;
           校验和++;

           /*如果校验和不正确,转到LPM4 */
           如果(*(unsigned int *)TLV_start)!=校验和)
           {
               /*如果校验和失败,则输入LPM4 */
               __bis_sr_register (LPM4_bits);
           }

           /*校验和已匹配,现在设置校准值*/

           /*校准参考*/
           REFCAL1 =*(TLV_ADDRESS_FOR_PARse + TLV_CAL_REFCAL1);
           REFCAL0 =*(TLV_address_for _parse + TLV_CAL_REFCAL0);

           /*校准DCO */
           CSIRFCAL =*(TLV_address_for _parse + TLV_CAL_CSIRFCAL);
           CSIRTCAL =*(TLV_ADDRESS_FOR_PARse + TLV_CAL_CSIRTCAL);
           CSERFCAL =*(TLV_ADDRESS_FOR_PARse + TLV_CAL_CSERFCAL);
           CSERTCAL =*(TLV_ADDRESS_FOR_PARse + TLV_CAL_CSERTCAL);

           /*校准SD24 */
           SD24TRIM =*(TLV_address_for _parse + TLV_CAL_SD24TRIM);

           /*清除BorIFG */
           IFG1 &=~(BORIFG);
       }

       /*为看门狗计时器供电*/
       WDTCTL = WDTPW | WDTCNTCL;

       /*返回值:
        * 1 -执行数据段初始化。
        *0- 跳过数据段初始化。
        */
       返回1;
    }

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

    您启用了Rx中断,但我看不到UART的ISR。 如果您没有ISR,则启用Rx中断可能会导致问题。 请尝试删除启用Rx中断的行,并查看您是否仍然看到此问题。

    此致,
    Nathan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我删除了Rx中断线路,但仍面临相同的问题。 问题是,从调试窗口运行程序时,程序工作正常,但一旦我终止调试会话并重启电路板(通过移除USB并重新连接),我就无法在TeraTerm串行终端上看到任何数据。

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

    请详细说明如何通过UART连接到终端窗口? 重新连接USB后,我相信TeraTerm将要求您重新连接到串行端口。 但是,只要MSP430通电,代码就会通过UART发送数据。 因此,这些字符将在终端窗口接收之前发送出去,因此您永远不会看到它们显示出来。

    要解决此问题,如果您使用带有用户按钮的板(如启动板),我建议您仅在按下按钮时通过UART发送数据, 这样,您就可以等到与终端程序正确连接后再发送数据。 或者,您也可以尝试使用逻辑分析器(如果有)验证这一点。

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

    您好,

    感谢您的上述回复。 正确的是,我们首先设置UART连接,然后传输字符。 我在回波模式下实施了UART例程,在这种模式下,控制器仅在收到PC的字符时才向PC发送数据。 这很好,解决了我的问题。

    此致,

    Abhishek。