历史上的今天
今天是:2025年01月04日(星期六)
2019年01月04日 | stm32 rtc 实时时钟
2019-01-04 来源:eefocus
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 待机模式
史海拾趣
|
工信部副部长奚国华6月底在北京举行“2010中国物联网大会”上表示,工业和信息 化部副部长奚国华在致辞时表示,对于物联网,工信部将加强规划指导和政策引导,加强指导协调,尽快研究解决物联网的内涵,产业界定和产业统计的问题。同时 将超 ...… 查看全部问答> |
|
我用的是PIC单片机,MC45(GSM)模块。 硬件电路MC45的50脚直接插到单片机的50脚插槽上,我用到的MC45脚包括TXD0,RXD0,IGT。 我并不知道MC45的这几个脚如何与单片机的RXD0,TXD0,IGT相连。 我的问题是可不可以软件上实现单片机的RXD0和MC45的TXD ...… 查看全部问答> |
|
Lm3S811 PLL 设置倍频到 50Mhz 之后,为什么实际只有37.5Mhz 呢? Lm3S811 PLL 设置倍频到 50Mhz 之后,为什么实际只有37.5Mhz 呢? SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |SYSCTL_XTAL_6MHZ);//UART 初始化SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);SysCtlPeripheral ...… 查看全部问答> |
|
之前有了解过pt1000的测量电路,就是很不准确,求各位高人指点! file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/372182098/QQ/WinTemp/GE/8C6B5CD2-B508-47B8-8B53-AEEBA13D57F7.jpg… 查看全部问答> |
|
BeagleBone Black设计:Qt程序编写和桌面图标添加! 24bit的7寸LCD屏和触摸屏调试通过之后,Qt程序的编写就要提上日程! 因为我用的是官方的SDK,所以其自带了Qt4.8的库!我需要做的只是按照官方说明编写自己的Qt程序,然后编译之后生成可执行文件,放入开发板当中去执行即可!! 具体搭建Qt编程环 ...… 查看全部问答> |
|
2015电子大赛题目已经出炉,分享一些资料给大家参考。祝各位取得好成绩!附件中所有电路均可以免费下载,具体可联系管理员:459888529,索要优惠码。 … 查看全部问答> |
|
【MicroPython】Micropython PM检测添加SD卡存储 继续添加功能,PM值检测出来了,同时RTC功能也有了,接下来添加一个SD卡模块,希望能够实时将检测到的数据保存下来,作为历史数据。 在Micropython的官方文档中有关于SD卡的例程和库文件,拿来分析一下,就可以根据例程修改为自己的代码使用。 本 ...… 查看全部问答> |




