stm32 rtc 实时时钟
STM32的实时时钟是一个独立的定时器
通常会在后备区域供电端加一个纽扣电池,当主电源没有电的时,RTC不会停止工作
若VDD电源有效,RTC可以触发秒中断、溢出中断和闹钟中断
备份寄存器BKP
备份寄存器是42个16位的寄存器,他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒或系统复位或电源复位时,他们也不会被复位
RTC配置步骤
1.使能电源时钟和后备区域时钟
2.取消后备区域的写保护,DBP
3.复位备份区域
4.外部低速振荡器使能,LSE
5.RTC时钟源选择,LSE
6.RTC时钟使能7.进入配置模式
8.设置RTC预分频装载值
9.设置RTC计数器值
10.退出配置模式11.初始化NVIC外设,设置RTC中断优先级
12.编写RTC中断处理函数
举例
typedef struct
{
u32 hour;
u32 min;
u32 sec;
}time_t;
time_t g_time;
void RTC_get()
{
u32 counter;
counter = RTC_GetCounter(); //读取计数器值
g_time.hour = counter / 3600;
g_time.min = (counter % 3600) / 60 ;
g_time.sec = counter % 60 ;
}
void RTC_IRQHandler()
{
if(RTC_GetFlagStatus(RTC_FLAG_SEC) == SET)
{
RTC_get();
printf("time %02d:%02d:%02d\n", g_time.hour, g_time.min, g_time.sec);
}
RTC_ClearFlag(RTC_FLAG_SEC);
}
void RTC_init()
{
u16 bkp_data = 0xa5a5;
u16 prescaler = 32768 - 1;
NVIC_InitTypeDef nvic =
{
RTC_IRQn,
2,
2,
ENABLE
};
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能电源时钟和后备区域时钟
PWR_BackupAccessCmd(ENABLE); //取消后备区域的写保护
if(BKP_ReadBackupRegister(BKP_DR1) != bkp_data) //读备份数据
{
BKP_DeInit(); //复位备份区域
RCC_LSEConfig(RCC_LSE_ON); //外部低速振荡器使能
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) != SET)
{
delay_ms(10);
}
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //LSE振荡器作为RTC时钟
RCC_RTCCLKCmd(ENABLE); //RTC时钟开启
RTC_WaitForLastTask(); //RTC操作关闭(上一次对RTC寄存器的写操作已经完成)
RTC_WaitForSynchro(); //寄存器同步标志(寄存器已经被同步)
RTC_ITConfig(RTC_IT_SEC, ENABLE); //屏蔽中断请求(允许秒中断)
RTC_WaitForLastTask();
RTC_EnterConfigMode(); //配置标志(进入配置模式)
RTC_SetPrescaler(prescaler); //预分频装载值
RTC_WaitForLastTask();
RTC_SetCounter(0xf73f); //设置计数器值(17:34:55)
RTC_WaitForLastTask();
RTC_ExitConfigMode(); //退出配置模式(开始更新RTC寄存器)
BKP_WriteBackupRegister(BKP_DR1, bkp_data); //写备份数据
}
else
{
RTC_WaitForSynchro();
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
}
NVIC_Init(&nvic);
RTC_get();
}
stm32 rtc 实时时钟的更多相关文章
- stm32——RTC实时时钟
stm32——RTC实时时钟 一.关于时间 2038年问题 在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作.所有使用UNIX时间表示时间的程序都将将受其影响,因为它们以自19 ...
- 第43章 RTC—实时时钟
第43章 RTC—实时时钟 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fireg ...
- 教你在树莓派使用上RTC实时时钟,不用再担心断电后时间归零的问题,开机后自动同步RTC时钟!!!
准备工作:1.系统建议使用官方最新的镜像文件 2.RTC时钟模块板(I2C接口)建议使用DS1307时钟模块,或者RTC时钟模块RTC时钟模块: 大家知道arduino的电平是5V,树莓派是3.3V, ...
- 第43章 RTC—实时时钟—零死角玩转STM32-F429系列
第43章 RTC—实时时钟 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fireg ...
- RTC实时时钟驱动
RTC(Real-Time Clock)实时时钟为操作系统提供了一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去. RTC通过STRB/LDRB这两个ARM指令向CP ...
- RTC实时时钟
作者:宋老师,华清远见嵌入式学院讲师. 1.1 RTC介绍 在 一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备 ...
- RTC实时时钟-备份区域BKP--原理讲解
RTC(Real Time Clock):实时时钟 BCD码:用4位2进制来表示10以内的十进制的形式. RTC的时钟源:LSE(32.768KHZ).HSE_RTC.LSI.经过一个精密校准(RTC ...
- 【iCore3 双核心板】例程十:RTC实时时钟实验——显示日期和时间
实验指导书及代码包下载: http://pan.baidu.com/s/1jHuZcnc iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 【iCore4 双核心板_ARM】例程十:RTC实时时钟实验——显示时间和日期
实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ RTC_TimeTypeDef sTime; RTC_DateTypeDef sDate; ; ...
随机推荐
- LeetCode_118. Pascal's Triangle
118. Pascal's Triangle Easy Given a non-negative integer numRows, generate the first numRows of Pasc ...
- shuffle 打乱一维数组
<?php $arr = range(,); print_r($arr); echo '<br />'; shuffle($arr); print_r($arr); ?> Ar ...
- WPF引入OCX控件
(方法一) https://www.cnblogs.com/guaniu/archive/2013/04/07/3006445.html (方法二) 1.先注册OCX控件:(有的把OCX 控件封装到E ...
- Mac 裁剪mp3
系统自带的QuickTime Player
- react如何在网页上编辑并运行代码?
最近想做个能在网站,能在网页上运行代码,并且保存这个组件,看了一下element-react的组件和官方的实例,发现都是可以编辑运行的,因为之前没有这方面的经验,所以看下各位大佬能不能给点意见
- 【数据库开发】C++测试redis中的publish/subscribe
运用 http://blog.csdn.net/xumaojun/article/details/51558237 中的redis_publisher.hredis_publisher.cpp red ...
- [转帖]Oracle数据安全--校验Oracle安装软件的 SHA码 防范注入风险
Oracle数据安全--校验Oracle安装软件的 SHA码 防范注入风险 https://www.toutiao.com/i6723512458482303499/ certutil md5sums ...
- SecureCRT 配色方案
整体效果: 一:Options -- Global Options 1.Normal colors 2.Bold colors 二 :Options -- Session Options 1. ...
- ThreadLocal的坑--ThreadLocal跨线程传递问题
1.父子线程间的传递问题 ThreadLocal的子类InheritableThreadLocal其实已经帮我们处理好了,通过这个组件可以实现父子线程之间的数据传递,在子线程中能够父线程中的Threa ...
- Netty框架原理
用这张图表示的就是一个基本的Netty框架 通过创建两个线程池,一个负责接入, 一个负责处理 public class Start { public static void main(String[] ...