文档章节

stm32 RTC

kangxin1234
 kangxin1234
发布于 2015/09/10 15:27
字数 438
阅读 46
收藏 1

    stm32 的RTC是一个32位的计数器,他能在电源断电的情况下利用,锂电池继续工作供电。具有秒中断。

    使用RTC主要是3个操作:

    1、初始化。

    2、写RTCCounter的值。

    3、读RTCCoutner的值。

    然后就是软件的工作了,可以利用unix时间戳处理时间,time.h中有对应的处理函数,lacoaltime等。

#include "rtc.h"

//void NVIC_Configuration(void)
//{
//	NVIC_InitTypeDef NVIC_InitStructure;
//	
//	/* Configure one bit for preemption priority */
//	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
//	
//	/* Enable the RTC Interrupt */
//	NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
//	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
//	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//	NVIC_Init(&NVIC_InitStructure);
//}
void RTC_Configuration(void)
{
	/* Enable PWR and BKP clocks */
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
	
	/* Allow access to BKP Domain */
	PWR_BackupAccessCmd(ENABLE);
	
	/* Reset Backup Domain */
	BKP_DeInit();
	
	/* Enable LSE */
	RCC_LSEConfig(RCC_LSE_ON);
	/* Wait till LSE is ready */
	while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
	{}
	
	/* Select LSE as RTC Clock Source */
	RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
	
	/* Enable RTC Clock */
	RCC_RTCCLKCmd(ENABLE);
	
	/* Wait for RTC registers synchronization */
	RTC_WaitForSynchro();
	
	/* Wait until last write operation on RTC registers has finished */
	RTC_WaitForLastTask();
	
	/* Enable the RTC Second */
	//RTC_ITConfig(RTC_IT_SEC, ENABLE);
	
	/* Wait until last write operation on RTC registers has finished */
	RTC_WaitForLastTask();
	
	/* Set RTC prescaler: set RTC period to 1sec */
	RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
	
	/* Wait until last write operation on RTC registers has finished */
	RTC_WaitForLastTask();
}
void Set_RTC_Cnt(uint32_t counter)
{
	/* Wait until last write operation on RTC registers has finished */
	RTC_WaitForLastTask();
	/* Change the current time */
	RTC_SetCounter(counter);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
	PWR_BackupAccessCmd(ENABLE); //必须开启,不然无法写入
	/* Wait until last write operation on RTC registers has finished */
	RTC_WaitForLastTask();
}

struct tm* Get_Now_Time(void)    //unix时间戳相关处理,可以看一下time.h 
{
	uint32_t temp = RTC_GetCounter();
	struct tm * t = localtime(&temp);
	t->tm_year+=1900; 
	t->tm_mon +=1;
	return t;
}

秒中断想使用的话可以开一下不用的话,不用开。

值的注意的一点事,当写RTCCounter寄存器时,必须开启备份寄存器相关,

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

PWR_BackupAccessCmd(ENABLE); 

如果不加入这两句话程序会死在RTC_WaitForLastTask();这个地方,因为写寄存器无法完成所以会一直等待其完成。

具体可以看一下这个帖子:

http://bbs.21ic.com/icview-774636-1-1.html


© 著作权归作者所有

上一篇: stm32 DAC
下一篇: stm32 读写Flash
kangxin1234

kangxin1234

粉丝 38
博文 51
码字总数 35417
作品 0
程序员
私信 提问
STM32开发 -- 低功耗模式详解(2)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/qq29350001/article/details/98631012 如需转载请注明出处:https:/...

聚优致成
08/06
0
0
STM32开发 -- UTC、UNIX时间戳、北京时间之间的转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29350001/article/details/87637350 我碰到的问题,GPS上UTC时间转北京时间和STM32上UNIX时间戳转北京时间...

聚优致成
02/18
0
0
stm32 内部RC校准

STM32 系统时钟用的HSI ,RTC用的外部晶振,但是现在系统的HSI不准 需要用RTC对HSI(内部RC)校准,希望大神门帮帮忙,谢谢(求操作方式)。

月光色
2016/07/06
384
0
STM32 之 备份域(备份寄存器、备份SRAM)详解及数据丢失问题处理

版权声明:进步始于交流,收获源于分享!转载请保留原文出处,谢谢! https://blog.csdn.net/ZCShouCSDN/article/details/82896924 某些STM32芯片提供了备份SRAM,例如STM32F系列芯片有4K的备...

ZCShouCSDN
2018/09/29
0
0
将32位无符号整数表示的时间信号转化为习惯的形式

STM32 的RTC模块中有需要将无符号的32位整形数字转化为包含年,月,日,时,分,秒的结构体或者其余表达形式的信号,在纠结了好久之后,勉强第一次实现了功能,现在贴上代码 PS: 因为KEIL调试...

卜霞森
2013/03/20
997
2

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部