资源简介
STM32的RTC闹钟实验,采用库函数实现,使用方便,简单
代码片段和文件信息
#include “includes.h“
#include “rtc.h“
//第一次配置的时候更改这个值,并且断开电池和电源一段时间,保证电容电量也放完,或者短接vbat和GND
/*
其实,在32.768K的晶振引脚上并个上1M(>1m也可以)的电阻就没事了,哪有那么多问题啊。
主要是STM32的LSE反馈电阻有点大,并个电阻,就能减小反馈电阻,提高启振系数。相应的,LSE的功耗就会大一点。
不过,没关系,STM32在使用外部电源时,内部软开关会把LSE的电源切换到外部电源的。
1个40mAH的小电池,用3年应该没问题。
3年,你这个产品还会不会还在使用都是个问题了。说不定早升级了。
*/
#define data_change 0x4456
#define RTCAlarm_Way 0 //0中断线方案,1 原子方案
_calendar_obj calendar;//时钟结构体
static void RTC_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn; //RTC全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能该通道中断
NVIC_Init(&NVIC_InitStructure);
#if (RTCAlarm_Way==0)
NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn; //闹钟中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //比RTC全局中断的优先级高
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
#endif
}
#if (RTCAlarm_Way==0)
static void RTC_Alarm_EXIT(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
#endif
//实时时钟配置
//初始化RTC时钟同时检测时钟是否工作正常
//BKP->DR1用于保存是否第一次配置的设置
//返回0:正常
//其他:错误代码
u8 RTC_Init(void)
{
//检查是不是第一次配置时钟
u8 temp=0;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP ENABLE); //使能PWR和BKP外设时钟
RCC_RTCCLKCmd(ENABLE);
PWR_BackupAccessCmd(ENABLE); //使能后备寄存器访问
if (BKP_ReadBackupRegister(BKP_DR1) != data_change) //从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎
{
BKP_DeInit(); //复位备份区域
RCC_LSEConfig(RCC_LSE_ON); //设置外部低速晶振(LSE)使用外设低速晶振
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET&&temp<250) //检查指定的RCC标志位设置与否等待低速晶振就绪
{
temp++;
delay_ms(10);
}
if(temp>=250)
{
printf(“jingzhen-error\r\n“);
return 1;//初始化时钟失败晶振有问题
}
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //设置RTC时钟(RTCCLK)选择LSE作为RTC时钟
RCC_RTCCLKCmd(ENABLE); //使能RTC时钟
RTC_WaitForSynchro(); //等待RTC寄存器(RTC_CNTRTC_ALR和RTC_PRL)与RTC APB时钟同步
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
RTC_ITConfig(RTC_IT_SEC ENABLE); //使能RTC秒中断
RTC_ITConfig(RTC_IT_ALR ENABLE); //使能RTC闹钟秒中断
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
RTC_EnterConfigMode(); // 允许配置
RTC_SetPrescaler(32767); //设置RTC预分频的值
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
RTC_ExitConfigMode(); //退出配置模式
BKP_WriteBackupRegister(BKP_DR1 data_change); //向指定的后备寄存器中写入用户程序数据
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10571 2018-07-23 14:56 stm32的RTC闹钟实验\app\rtc.c
文件 1109 2017-05-23 12:24 stm32的RTC闹钟实验\app\rtc.h
文件 136014 2018-10-25 09:29 stm32的RTC闹钟实验\moban.map
....... 71966 2018-11-15 16:51 stm32的RTC闹钟实验\moban.uvguix.Administrator
....... 71924 2018-11-15 16:50 stm32的RTC闹钟实验\moban.uvguix_Administrator.bak
....... 23555 2018-10-25 09:32 stm32的RTC闹钟实验\moban.uvoptx
....... 22480 2018-10-25 09:29 stm32的RTC闹钟实验\moban.uvprojx
文件 64039 2018-10-25 09:29 stm32的RTC闹钟实验\moban_moban.dep
....... 23555 2018-10-25 09:29 stm32的RTC闹钟实验\moban_uvoptx.bak
....... 21184 2018-07-23 14:49 stm32的RTC闹钟实验\moban_uvprojx.bak
文件 3662 2018-10-25 09:29 stm32的RTC闹钟实验\output\core_cm3.crf
文件 118 2018-10-25 09:29 stm32的RTC闹钟实验\output\core_cm3.d
文件 10852 2018-10-25 09:29 stm32的RTC闹钟实验\output\core_cm3.o
文件 347858 2018-10-25 09:29 stm32的RTC闹钟实验\output\delay.crf
文件 1745 2018-10-25 09:29 stm32的RTC闹钟实验\output\delay.d
文件 383200 2018-10-25 09:29 stm32的RTC闹钟实验\output\delay.o
文件 354479 2018-10-25 09:29 stm32的RTC闹钟实验\output\includes.crf
文件 2024 2018-10-25 09:29 stm32的RTC闹钟实验\output\includes.d
文件 385692 2018-10-25 09:29 stm32的RTC闹钟实验\output\includes.o
文件 354556 2018-10-25 09:29 stm32的RTC闹钟实验\output\main.crf
文件 1876 2018-10-25 09:29 stm32的RTC闹钟实验\output\main.d
文件 386664 2018-10-25 09:29 stm32的RTC闹钟实验\output\main.o
文件 346981 2018-10-25 09:29 stm32的RTC闹钟实验\output\misc.crf
文件 1706 2018-10-25 09:29 stm32的RTC闹钟实验\output\misc.d
文件 382728 2018-10-25 09:29 stm32的RTC闹钟实验\output\misc.o
文件 344664 2018-10-25 09:29 stm32的RTC闹钟实验\output\moban.axf
文件 205 2018-11-15 16:51 stm32的RTC闹钟实验\output\moban.build_log.htm
文件 15441 2018-10-25 09:29 stm32的RTC闹钟实验\output\moban.hex
文件 59678 2018-10-25 09:29 stm32的RTC闹钟实验\output\moban.htm
文件 1182 2018-10-25 09:29 stm32的RTC闹钟实验\output\moban.lnp
............此处省略163个文件信息
相关资源
- STM32F103触摸按键测试
- Getting Started with UVM
- 基于STM32的帆板控制
- HMC5983 STM32F407 代码
- unity语音插件
- Artificial intelligence 人工智能的全面介
- STM32_USART_向PC机发送数据
- 步进电机梯形加速 stm32程序
- stm32-cryp-lib(STM32 芯片加密库)
- echarts 中国各省市 echarts地图数据,含
- STM32驱动蜂鸣器播放语音
- VHDL语言实现DDS的完整程序 Quartus仿真
- 《物联网操作系统+LiteOS开发实战指南
- bootstrap-fileinput+strtus2实现多文件上传
- MPU6050MS5611HMC5883三传感器数据读取
- STM32F407+ov5640摄像头在TFTLCD实时显示图
- stm32的小车红外寻迹加超声波避障
- PDFPortable Document Format
- e-PDF To Word Converter V2.5汉化破解版
- 基于stm32f4的舵机控制
- stm32_usb_HID例程及上位机
- DMR 标准 part1-part4
- 红外测距stm32
- STM32F1-ILI9341 -SPI
- STM32采集雨量
- Qt属性表控件-QtPropertyBrowser
- RTthread 3.0 编程指南
- TortoiseGit中文使用手册
- stm32f407+DCDC降压+pid算法
- stm32f103精准超声波测距程序_HC-SR04模块
评论
共有 条评论