STM32 RTC设置

发布者:楼高峰最新更新时间:2016-10-08 来源: eefocus关键字:STM32  RTC设置 手机看文章 扫描二维码
随时随地手机看文章
RTC配置:

1.打开电源管理和备份寄存器时钟。这个在RCC配置中打开。

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

2.使能RTC和备份寄存器的访问(复位默认关闭)。

 PWR_BackupAccessCmd(ENABLE);

3.检查电池是否断电过(是否RTC初始化过),通过的话直接跳到第4步。

 if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)

{

  A.  BKP_DeInit();//BKP寄存器全部设为缺省值

  B.  RCC_LSEConfig(RCC_LSE_ON);  //RCC打开了LSE时钟
  C.  while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);//等待LSE就绪,如果谐振不对,就会死在这里.

  D.  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//RTC使用时钟源LSE
  E.  RCC_RTCCLKCmd(ENABLE);//RTC的时钟开启

  F.  RTC_WaitForSynchro();//RTC等待同步

  G.  RTC_WaitForLastTask();//等待就绪

  H.  RTC_ITConfig(RTC_IT_SEC, ENABLE); // 使能RTC秒中断

  I.  RTC_SetPrescaler(32767);//RTC预分频,32768HZ

  J.  RTC_WaitForLastTask();

  K.  BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);//往备份域寄存器中写一个特殊的字符

  L.  SetDateTime((TagDateTime *)&DefaultSystime);  //设置一个初始时间

     PWR_BackupAccessCmd(DISABLE);//禁止RTC后备寄存器的写 ??? 

  M.  RCC_ClearFlag();  //清除RCC重启标志

}

else

{

4.RTC_WaitForSynchro();//RTC等待同步

5.AdjustRtcTime();//配置系统时间,主要是考虑到断电重启如何恢复系统时间

6.RTC_ITConfig(RTC_IT_SEC, ENABLE); // 使能RTC秒中断

7.RTC_WaitForLastTask();

PWR_BackupAccessCmd(DISABLE);//禁止RTC后备寄存器的写 ??? 

8.RCC_ClearFlag();  //清除RCC重启标志

}

 

对了前提还必须对RTC中断进行配置:

 
  NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
 

注意:
1. 上电后要检查备份电池有没有断过电。如何检查? 恩,RTC的示例代码中已经明示:
   往备份域寄存器中写一个特殊的字符(0xA5A5),备份域寄存器是和RTC一起在断电下能保存数据的。
   上电后检查下这个特殊字符是否还存在,如果存在,ok,RTC的数据应该也没丢,不需要重新配置它
   如果那个特殊字符丢了,那RTC的定时器数据一定也丢了,那我们要重新来配置RTC了
   这个过程包括时钟使能、RTC时钟源切换、设置分频系数等等,这个可以参考FWLib\example\RTC\Calendar的代码
   在我的这个实例里,检查备份域掉电在Init.c的RTC_Conig()中,函数内若检测到BKP掉电,则会调用RTC_Configuration()

2. 因为RTC的一些设置是保存在后备域中的,so,操作RTC的设置寄存器前,要打开后备域模块中的写保护功能。
3. RTC设定值写入前后都要检查命令有没有完成,调用RTC_WaitForLastTask();

关键字:STM32  RTC设置 引用地址:STM32 RTC设置

上一篇:STM32库函数配置
下一篇:关于STM32 PB3 PB4 如何设置成普通GPIO的配置

推荐阅读最新更新时间:2024-03-16 15:14

STM32进入STOP模式并唤醒实验总结
项目需求,需要实现设备低功耗功能,实现过程中遇到几个问题,以此记录总结。(stm32f103ret6) 问题一:执行PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);后,程序继续执行,看到的现象像是没有进入休眠。 调试步骤: 1.关闭自己的时钟配置,调用启动函数中默认的SystemInit() 2.关闭相关外设初始化,只开启串口一以追踪程序运行流程和一个IO中断以唤醒 现象:能进入终端并且正常唤醒 3.换为调用自己的时钟,休眠不了,一步步打开相关时钟配置没问题直到开启了 SysTick_Config(SystemCoreClock /
[单片机]
<font color='red'>STM32</font>进入STOP模式并唤醒实验总结
STM32栈和堆使用不同RAM的实现方法
最近在调试将开源数据压缩算法zlib移植到STM32的工程中. 由于zlib要占用大量的动态内存(缺省设置下需要至少280kB左右的内存), STM32内部的48kB 的SRAM远远不够用, 因此必须将动态内存分配使用的内存堆(HEAP)设置在外部的扩展RAM中去. 我在使用的STM32中用了一个别人写的已经烧好的IAP Bootloader, Bootloader中会检查用户程序的向量表首地址(即__initial_sp), 如果发现这个地址的值不在内部ram中, 就认定没有合法的用户程序, 而进入死循环状态拒绝跳转. 另外, 从抗干扰性和稳定性角度出发, 我也的确希望栈放在内部ram中. 这就要求: 将stack分配到内部
[单片机]
<font color='red'>STM32</font>栈和堆使用不同RAM的实现方法
STM32笔记--ADC(DMA方式)
在上一次的博客中重新学习了DMA,这次我们便学以致用了,ADC的概念想必大家都是十分清楚了,模拟转数字,可以用在测信号,测电压,在我们的生活中有着十分巨大的作用,这次我们就来看看ADC又有哪些操作吧! ADC流程,首先ADC采集一个信号(信号范围大都为0-3.3V,ps:3.3V可通过更改Vref寄存器修改),每隔相同时间菜一次数值发送到一个可变16位数中,下面是我们的数组定义: __IO uint16_t ADC_ConvertedValue; //定义该16位数用来传输数据,原因是我们使用的12位AD,由于寄存器的定义方便,因此使用16位数 下面是ADC的初始化和配置代码: void ADC1_Init(void
[单片机]
如何基于Keil、STM32用C++编写流水灯程序?
通常来说,在单片机上编程,要么汇编,要么C语言,而用C++进行开发的很少,那么究竟能不能用C++开发单片机呢? 答案肯定是可以的,下面讲讲基于Keil、STM32,用C++编写流水灯程序的一些内容。 1 为什么很少用C++开发单片机 不知道大家对面向过程和面向对象的理解有多少? C语言是面向过程的语言,C++是面向对象的编程语言。结合本文来说,面向过程相比面向对象的编程,生成代码量(bin文件)更小,运行效率更高。 所以,C语言相比C++具有更小代码量(bin文件)、更快的运行速度。 当然,这里是C相对C++而言。其实,汇编相对C而言,具有更小代码量和更快的运行速度。可以参看文章:用 汇编 和 C语言 写流水灯程序有什么不
[单片机]
STM32 IAP实现流程
1. 概念 IAP:In-Application Programming”,中文解释为“在程序中编程”。ICP(In-Circuit Programming)技术即通过在线仿真器对单片机进行程序烧写,而ISP技术则是通过单片机内置的bootloader程序引导的烧写技术。 2. 框架设计 简要说明: 将STM32 的Flash 512Kb 分为两个部分,一个256Kb 用来存放最小系统,一个256Kb用来存放APP代码。具体最小系统与APP的Flash大小可根据实际情况调整。 难点解析: 最小系统与APP的存放地址 要找到最小系统与APP的存放地址,那么就需要了解STM32的Flash存储空间,如下: 最小系统与APP的
[单片机]
STM32cube学习笔记(1)
1、偶然的机会接触到了STM32cubemx与STM32cubeFX、详细了解相关的资料之后感觉相当实用。 2、进程创建 osThreadDef(defaultTask, StartDefaultTask,osPriorityNormal, 0, 128);//定义一个结构体 defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);//实用这个结构体,调用free rtos去实现创建一个进程,其实创建的是一个任务 3、任务优先级实验 osThreadDef(defaultTask, StartDefaultTask,os
[单片机]
msp430和stm32 lcd屏驱动程序
最近使用了一块MSP430F5529单片机做课设,自带的拓展板上有一块12864的COG的LCD屏,记录下使用的驱动程序。 硬件原理图: COG_CS为片选信号,每次数据或指令通信完毕,需要拉低拉高一次。COG_RST为上电复位引脚,正常工作后不控制。 COG_A0是数据命令选择端,低电平表示传输的是数据,高电平表示传输的时命令。 COG_SCLK是时钟信号,上升沿有效。 COG_SDA为数据线,只能写不能读,无法读取COG内部的显存数据。COG_BKLED为背光控制IO,低电平背光点亮,高电平背光熄灭。 驱动程序: 头文件: #ifndef LCD_H_ #define LCD_H_ #define LCD_
[单片机]
msp430和<font color='red'>stm32</font> lcd屏驱动程序
什么是中断 stm32中断服务函数
中断概念: 中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。 中断作用: 计算机与外设之间的联系一般通过两种方法:一是通过CPU控制来进行数据的传送;二是在专门的芯片控制下进行数据的传送。我们所说的DMA,就是不用CPU控制,外设同内存之间相互传送数据的通道,在这种方式下,外设利用DMA通道直接将数据写入存储器或将数据从存储器中读出,而不用CPU参与,系统的速度会大大增加。 你打开stm32的启动文件,例如startup_stm32f10x_hd.s 里面有很多中断跳转的
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved