这是由于仿真器设置错误导致的。帆拍
请在debug里面态磨羡重新设置仿真器。如下图所示。
若使用ST-LINK,则选择对应的游烂ST-LINK即可。
你看看STM32固件库自带的例程,那里面是借用了一个BKP寄存器保存一个标志的。每次单片机并拦启动时都读取这个标志并判断是不是预先设定销者的值:如果不是就初始化RTC并设亏蔽薯置时间,再设置标志为预期值;如果是预期值就跳过初始化和时间设置,继续执行后面的程序。因此这样保证每次断电后再启动都是正常运行,你是不是没有这样处理?struct tm是直观意义上的时间表示方法:struct tm {
int tm_sec/* 秒–取值区间为[0,59] */
int tm_min/* 分 - 取值区间为[0,59] */
int tm_hour/* 时 - 取值区间为[0,23] */
int tm_mday/* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon/* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year/* 年份,其值从1900开始 */
int tm_wday/* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类前知推 */
int tm_yday/* 从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst/* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
long int tm_gmtoff/*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
const char *tm_zone/*当前时区的名字(与环境变量TZ有关)*/
}
程序举例#include <stdio.h>
#include <time.h>
int main(void)
{
struct tm *ptr
time_t lt
lt =time(NULL)
ptr=localtime(&lt)
printf("second:%d\n",ptr->tm_sec)
printf("minute:%d\n",ptr->tm_min)
printf("hour:%d\n",ptr->tm_hour)
printf("mday:%d\n",ptr->tm_mday)
printf("month:%d\n",ptr->野悔携tm_mon+1)
printf("year:%d\n",ptr->tm_year+1900)
return 0
}
tim 是一个时间计数,是从1900年0分0秒到现在的时间颂伏。所以转化从我们日常用的表示一般年要加上1900,月要加上1,而你这里for (i = 1day >= days_in_month(i)i++) 表示月的i是从1开始的,tm_mon不是从0开始,所以day也要+1. 因为日常表示中没有0月0号,只有1月1号
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)