当前位置:首页 > 单片机 > 单片机
[导读]在使用stm32f103系列单片机的时候总是会碰到RTC计时的问题,103系列单片机的RTC使用的是秒计时在经过一段时间的研究,终于发现了一种比较简单而且易于理解的使用方法,就是结合系统文件time.h的使用首先要添加头文件

在使用stm32f103系列单片机的时候总是会碰到RTC计时的问题,103系列单片机的RTC使用的是秒计时

在经过一段时间的研究,终于发现了一种比较简单而且易于理解的使用方法,就是结合系统文件time.h的使用
首先要添加头文件
#include
RTC的初始化和普通方式无区别

u8RTC_Init(void){//检查是不是第一次配置时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);//使能PWR和BKP外设时钟PWR_BackupAccessCmd(ENABLE);//使能后备寄存器访问if(BKP_ReadBackupRegister(BKP_DR1)!=0x5AA5)//从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎{BKP_DeInit();//复位备份区域RCC_LSEConfig(RCC_LSE_ON);//设置外部低速晶振(LSE),使用外设低速晶振while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET)//检查指定的RCC标志位设置与否,等待低速晶振就绪{}RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//设置RTC时钟(RTCCLK),选择LSE作为RTC时钟RCC_RTCCLKCmd(ENABLE);//使能RTC时钟RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成RTC_WaitForSynchro();//等待RTC寄存器同步RTC_ITConfig(RTC_IT_SEC,ENABLE);//使能RTC秒中断RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成RTC_EnterConfigMode();//允许配置RTC_SetPrescaler(32767);//设置RTC预分频的值RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成Clock_SetTime(2015,1,14,17,42,55);//设置时间RTC_ExitConfigMode();//退出配置模式BKP_WriteBackupRegister(BKP_DR1,0x5AA5);//向指定的后备寄存器中写入用户程序数据}else//如果已配置过则不再进行配置{RTC_WaitForSynchro();//等待最近一次对RTC寄存器的写操作完成RTC_ITConfig(RTC_IT_SEC,ENABLE);//使能RTC秒中断RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成}RTC_NVIC_Config();//RCT中断分组设置Clock_Get();//更新时间return0;}1234567891011121314151617181920212223242526272829303132333435

设置时间和读取时间采用结构体的方式
首先需要定义一个时间结构体

typedefstruct{vu8hour;vu8min;vu8sec;vu16w_year;vu8w_month;vu8w_date;}_calendar_obj;_calendar_objcalendar;//时钟结构体123456789101112

在设置时间时

oidClock_SetTime(u16syear,u8smon,u8sday,u8hour,u8min,u8sec){time_ttime_t_Set_Time;//定义time_t类型的设置时间结构体structtmtm_Set_Time;//定义tm结构的设置时间结构体tm_Set_Time.tm_year=(u32)(syear-1900);//从2000年开始算起tm_Set_Time.tm_mon=(u32)(smon-1);//月tm_Set_Time.tm_mday=(u32)sday;//日tm_Set_Time.tm_hour=(u32)hour;//时tm_Set_Time.tm_min=(u32)min;//分tm_Set_Time.tm_sec=(u32)sec;//秒time_t_Set_Time=mktime(&tm_Set_Time);//得到计数初值if(time_t_Set_Time!=0xFFFFFFFF){RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);//使能PWR和BKP外设时钟PWR_BackupAccessCmd(ENABLE);//使能RTC和后备寄存器访问RTC_SetCounter(time_t_Set_Time);//设置RTC计数器的值RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成}}1234567891011121314151617181920212223

读取时间

voidClock_Get(void){structtm*local;time_tRTCTime;RTCTime=RTC_GetCounter();//获取当前RTC高字节local=localtime(&RTCTime);//把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地日历时间calendar.w_year=(u16)(local->tm_year+1900);//从1900年起calendar.w_month=(u16)(local->tm_mon+1);//月calendar.w_date=(u16)local->tm_mday;//日calendar.hour=(u16)local->tm_hour;//时calendar.min=(u16)local->tm_min;//分calendar.sec=(u16)local->tm_sec;//秒}123456789101112131415

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

8位单片机在嵌入式设计领域已经成为半个多世纪以来的主流选择。尽管嵌入式系统市场日益复杂,8位单片机依然不断发展,积极应对新的挑战和系统需求。如今,Microchip推出的8位PIC®和AVR®单片机系列,配备了先进的独立...

关键字: 单片机 嵌入式 CPU

在嵌入式系统开发中,程序烧录是连接软件设计与硬件实现的关键环节。当前主流的单片机烧录技术已形成ICP(在电路编程)、ISP(在系统编程)、IAP(在应用编程)三大技术体系,分别对应开发调试、量产烧录、远程升级等不同场景。...

关键字: 单片机 ISP ICP IAP 嵌入式系统开发

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是保障系统可靠性的核心组件,其初始化时机的选择直接影响系统抗干扰能力和稳定性。本文从硬件架构、软件流程、安全规范三个维度,系统分析看门狗初始化的最佳实践...

关键字: 单片机 看门狗 嵌入式系统

本文中,小编将对单片机予以介绍,如果你想对它的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: 单片机 开发板 Keil

随着单片机系统越来越广泛地应用于消费类电子、医疗、工业自动化、智能化仪器仪表、航空航天等各领域,单片机系统面临着电磁干扰(EMI)日益严重的威胁。电磁兼容性(EMC)包含系统的发射和敏感度两方面的问题。

关键字: 单片机 电磁兼容

以下内容中,小编将对单片机的相关内容进行着重介绍和阐述,希望本文能帮您增进对单片机的了解,和小编一起来看看吧。

关键字: 单片机 复位电路

在这篇文章中,小编将为大家带来单片机的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 单片机 异常复位

今天,小编将在这篇文章中为大家带来单片机的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 单片机 仿真器

单片机将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对它的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 单片机 中断 boot

一直以来,单片机都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来单片机的相关介绍,详细内容请看下文。

关键字: 单片机 数字信号 模拟信号
关闭