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.

[参考译文] RTOS:MSP432 RTC 漂移太大

Guru**** 2551110 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/590019/rtos-msp432-rtc-drift-too-much

工具/软件:TI-RTOS

您好!

我已设置 RTC 时间:

RTC_C_initCalendar (&MyTime、RTC_C_format_binary); 


为了进行测试、我每秒读取一次、并在控制台上打印一次。
一个小时后、我注意到时间漂移了大约6-10秒。
我假设 MSP432上的这种行为不正常。
 
我需要校准什么吗? 如果是、如何操作?

时间对我的项目至关重要。

感谢你的帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否正在使用 TI-RTOS? 如果是、版本是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在使用:

    Simpleling msp432 SDK 1_30_00_40

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    时钟源有什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    /**** RTC (*** /
    Hwi_handle myHwi;
    Hwi_Params HwiParams;

    /*设置 RTC */
    RTC_C_initCalendar (&MyTime、RTC_C_format_binary);

    /*设置 Hwi */
    Hwi_Params_init (hwiParams);
    myHwi = Hwi_create (INT_RTC_C、RTCHwiFxn、&hwiParams、NULL);

    if (myHwi = NULL){
    /*失败*/
    while (1);


    /*每分钟中断更改一次*/
    RTC_C_setCalendarEvent (RTC_C_CALENDAREVENT_INTOTECHANGE);
    RTC_C_enableInterrupt (RTC_C_TIME_EVENT_INTERRUPT);
    RTC_C_definePrescaleEvent (预分频选择、预分频 EventDivider)

    /*开始时钟*/
    RTC_C_startClock();



    /*初始化实时时钟*/
    Clock_settime (clock_realtime、&ts);

    /******** /

    这是我的代码。

    我每分钟在代码中也有一个唤醒。

    我想我没有设置时钟源? 我认为默认情况下是32K 晶体。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只需确保您具有32K 的晶体。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    32K 晶体位于 MSP432401R 上。

    这是设置 RTC 的正确方法吗? 我是否需要其他设置?

    是否设置了时钟源?

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

    我将堆叠以设置外部晶体。

    void setXT(){
    bool noerror=false;
    MAP_CS_setExternalClockSourceFrequency (32768、48000000);
    while (noerror=false){
    noerror = MAP_CS_startLFXT (CS_LFXT_DRIVE3);
    }
    MAP_CS_initClockSignal (CS_BCLK、CS_LFXTCLK_SELECT、CS_CLOCK_DELUGER_1);
    } 

    遗憾的是、CS_startLFXT 不会返回状态1。

    我的代码有什么问题吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否还为晶体配置了 IO?

    /*为外设/晶体使用配置引脚、为输出配置 LED */
    MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_PJ、
    GPIO_PIN0 | GPIO_PIN1、GPIO_PRIMARY_MODULE_FUNCTION);
    MAP_GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);

    /*设置外部时钟频率。 此 API 是可选的、但会是可选的
    *如果用户想使用 getMCLK/getACLK/etc、就来方便
    函数
    *
    cs_setExternalClockSourceFrequency (32000、48000000);

    /*在非旁路模式下启动 LFXT 而不超时。 *
    CS_startLFXT (CS_LFXT_DRIVE3);

    摘自: dev.ti.com/.../

    此致、
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经尝试了无 RTOS 版本、发现该程序在以下行挂起:

    /*在非旁路模式下启动 LFXT 而不超时。 *
    CS_startLFXT (CS_LFXT_DRIVE3);

    如果我注释掉这一行、程序将继续。

    我假设上面的示例有效。