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.

[参考译文] TM4C123GH6PGE:TM4C123GH6PGE 休眠模块

Guru**** 2445440 points
Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/631330/tm4c123gh6pge-tm4c123gh6pge-hibernate-module

器件型号:TM4C123GH6PGE
Thread 中讨论的其他器件:EK-TM4C1294XL

您好!

我从论坛上的前一个回答中获得了以下代码。现在、我想设置从今天开始的时间、如2017年10月11日、从现在开始的时间、如18:05:26、任何人都请告诉我如何在下面 的代码中设置上述值   

//此示例要使用的全局数据
//
//
time_t calender_write;
time_t calender_read;
struct tm TM1 ={50、59、23、5、6、2014-1900、5、0、0};//计算 epoch 之后的秒数
struct tm tm2 ={0};//回读日历
uint8_t buf_er[]="错误的初始化结构!\n";
uint8_t buf_Rz[48];

void UARTSend (uint8_t * pui8Buffer、uint32_t ui32Count);
//
//
//驱动程序库遇到错误时调用的错误例程。
//
//
#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)


#endif
//
//
//休眠处理程序
//
//
无效休眠处理程序(无效)

//复位中断标志
uint32_t ui32Status = HibernateIntStatus (1);
ROM_HibernateIntClear (ui32Status);
//
calender_read = HibernateRTCGet ();
ulocaltime (calender_read、&tm2);
//格式化 UART 的输出
strfttime (((char *) buf_Rz、32、"%c\r\n"、&tm2);
UARTSend (((uint8_t *) buf_Rz、32);
//保持中断触觉
HibernateRTCMatchSet (0、HibernateRTCGet ()+5);

//
//
//向 UART 发送字符串。
//
//
无效
UARTSend (uint8_t * pui8缓冲器、uint32_t ui32计数)

//
//循环,同时有更多字符要发送。
//
while (ui32Count---)

//
//将下一个字符写入 UART。
//
ROM_UARTCharPut (UART0_BASE、* pui8Buffer++);

int main (void){
//
//为中断处理程序启用怠惰堆栈。 这允许使用浮点
//在中断处理程序中使用的指令,但代价是
//额外的堆栈用法。
//
ROM_FPUEnable();
ROM_FPULazyStackingEnable();

//
//将时钟设置为直接从晶体运行。
//
ROM_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz);
//
//启用用于板载 LED 的 GPIO 端口。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

//
//为 LED 启用 GPIO 引脚(PF2)。
//
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2);

//
//启用此示例使用的外设。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

//
//启用处理器中断。
//
ROM_IntMasterEnable();

//
//将 GPIO A0和 A1设置为 UART 引脚。
//
ROM_GPIOPinConfigure (GPIO_PA0_U0RX);
ROM_GPIOPinConfigure (GPIO_PA1_U0TX);
ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

//
//将 UART 配置为115、200、8-N-1操作。
//
ROM_UARTConfigSetExpClk (UART0_BASE、ROM_SysCtlClockGet ()、115200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
//
//配置休眠模块
//
ROM_HibernateEnableExpClk (0);
ROM_HibernateRTCEnable();
HibernateClockConfig (HIBERNATE_OSC_HIGRHIVE);
//
HibernateIntRegister (HibernateHandler);
HibernateIntEnable (HIBERNATE_INT_RTC_MATH_0);
HibernateWakeSet (HIBERNATE_WAKE_RTC);

//为 RTC 设置计数器模式
休眠计数器模式(HIBERNATE_COUNTER_RTC);
//
//计算要写入的日历数据
//
calender_write = umktime (&TM1);
if (calender_write ==(uint32_t)(-1))){
UARTSend (((uint8_t *) buf_er、sizeof (buf_er));
while (1);

否则{
HibernateRTCSet (calender_write);
//在一秒后为 RTC 设置中断。
HibernateRTCMatchSet (0、HibernateRTCGet ()+5);

while (1){
//不做任何事情-安全

//返回0;

提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Srinu、
    有关使用 HibernateCalendarSet() API 来设置时间和日期的详细信息,请参阅 TivaWare 外设驱动程序库用户指南。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想将时间和日期设置为以下结构。请建议我如何写入2017年10月11:08:25和12日的时间值

    struct tm TM1 ={50、59、23、5、6、2014-1900、5、0、0};//计算 epoch 之后的秒数

    结构、如下所示

    结构 TM

    int tm_sec; /*分钟后的秒-[0、59]*/
    int TM_min; /*小时后的分钟 -[0、59]*/
    int tm_hour; /*午夜后的小时-[0、23]*/
    int tm_mday; /*月中某天 -[1、31]*/
    int tm_mon; /*自1月以来的月数 -[0、11]*/
    int tm_year; /*自1900年以来的年份 *
    int tm_wday; /*自星期日以来的天数 -[0、6]*/
    int tm_yday; /*自1月1日起的天数 -[0、365]*/
    int tm_isdst;/*夏令时标志 *
    #if _AEABI 可移植性检查
    int __extra _1、__extra _2; /* ABI 要求的额外字段*/
    #endif

    };

    请建议我


    提前感谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //
    //
    //此函数将请求的日期和时间写入
    //休眠模块的日历逻辑。
    ////
    *****************
    void
    DateTimeSet (void)
    {
    struct tm Sttime;
    
    //
    //获取最新日期和时间。 这是在这里完成的、因此没有改变
    //可以按原样回写部分日期和时间。
    //
    HibernateCalendarGet (&S);
    
    //
    //设置要更新的日期和时间值。
    //
    Stime.TM_hour = g_ui32HourIdx;
    Stime.TM_min = g_ui32MinIdx;
    Stime.TM_mon = g_ui32MonthIdx;
    Stime.TM_mday = g_ui32DayIdx;
    Stime.TM_year = 100 + g_ui32YearIdx;
    
    //
    //使用请求的数据更新休眠模块的日历逻辑。
    //
    HibernateCalendarSet (&Stime);
    }
    
    //*************
    //
    //此函数将时间设置为默认系统时间。
    ////
    *****************
    void
    DateTimeDefaultSet (void)
    {
    G_ui32MonthIdx = 7;
    G_ui32DayIdx = 29;
    G_ui32YearIdx = 13;
    G_ui32HourIdx = 8;
    G_ui32MinIdx = 30;
    
    } 

    您好!

     您为什么不参考下面的 TivaWare hibernate.c 示例 /examples/boards/ek-tm4c1294xl/hibernate.c? 下面是代码片段。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    出现片段(上面)-有些人会说...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 CB1、

    谢谢。 我没来。

    //
    //
    //此函数将请求的日期和时间写入
    //休眠模块的日历逻辑。
    ////
    *****************
    void
    DateTimeSet (void)
    {
    struct tm Sttime;
    
    //
    //获取最新日期和时间。 这是在这里完成的、因此没有改变
    //可以按原样回写部分日期和时间。
    //
    HibernateCalendarGet (&S);
    
    //
    //设置要更新的日期和时间值。
    //
    Stime.TM_hour = g_ui32HourIdx;
    Stime.TM_min = g_ui32MinIdx;
    Stime.TM_mon = g_ui32MonthIdx;
    Stime.TM_mday = g_ui32DayIdx;
    Stime.TM_year = 100 + g_ui32YearIdx;
    
    //
    //使用请求的数据更新休眠模块的日历逻辑。
    //
    HibernateCalendarSet (&Stime);
    }
    
    //*************
    //
    //此函数将时间设置为默认系统时间。
    ////
    *****************
    void
    DateTimeDefaultSet (void)
    {
    G_ui32MonthIdx = 7;
    G_ui32DayIdx = 29;
    G_ui32YearIdx = 13;
    G_ui32HourIdx = 8;
    G_ui32MinIdx = 30;
    
    } 

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