STM32F030 RTC内部晶振/外部晶振/闹钟
【一】RTC初始化函数,用宏定义设置内部/外部晶振,使用主频晶振8MHz,外部RTC晶振32.768KHz。
/****************************************************************************/
/*Function Name : RTC Config */
/*Author : Paul */
/*Data : 2021-1-20 09:56:59 */
/*Timer : none */
/*Input Parameters : none. */
/*Return type : none */
/*Output Parameters : none */
/****************************************************************************/
#define RTC_CLOCK_SOURCE_LSE // 32.768KHz
//#define RTC_CLOCK_SOURCE_LSI // 40KHz
//#define RTC_CLOCK_SOURCE_HSE // 8MHz/32=250KHzvoid RTC_Config(void)
{RTC_InitTypeDef RTC_InitStructure;u32 timerOut;RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* Enable the PWR clock */PWR_BackupAccessCmd(ENABLE); /* Allow access to RTC */if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0xA5A5)RTC_Set_DateTime(21,RTC_Month_January,RTC_Weekday_Friday,1,9,0,0); // 2021.1.1 09:00:00#if defined (RTC_CLOCK_SOURCE_LSI)RCC_LSICmd(ENABLE);while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) /* Wait till LSI is ready */ {}
#elif defined (RTC_CLOCK_SOURCE_LSE)RCC_LSEConfig(RCC_LSE_ON);timerOut=0;while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) /* Wait till LSI is ready */ {timerOut++;if(timerOut>0xf000)break;}
#endif#if defined (RTC_CLOCK_SOURCE_LSI) /* Select the RTC Clock Source */RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
#elif defined (RTC_CLOCK_SOURCE_LSE)RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
#elif defined (RTC_CLOCK_SOURCE_HSE)RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div32); //直接8Mhz/32=250KHz
#endifRCC_RTCCLKCmd(ENABLE);/* Enable the RTC Clock */RTC_WaitForSynchro();/* Wait for RTC APB registers synchronisation */#if defined (RTC_CLOCK_SOURCE_LSI)/* Calendar Configuration *//*RTC_LSI 为40kHz RTC_LSI = SynchPrediv * AsynchPrediv*/RTC_InitStructure.RTC_AsynchPrediv = 0x01; // 1->40KHzRTC_InitStructure.RTC_SynchPrediv = 0x4E1F; // 19999->40KHzRTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;RTC_Init(&RTC_InitStructure);
#elif defined (RTC_CLOCK_SOURCE_LSE)/* Calendar Configuration *//*RTC_LSE 为32.768kHz RTC_LSI = SynchPrediv * AsynchPrediv*/RTC_InitStructure.RTC_AsynchPrediv = 0x7F; //127->32.768KHzRTC_InitStructure.RTC_SynchPrediv = 0xFF; // 255->32.768KHzRTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;RTC_Init(&RTC_InitStructure);
#elif defined (RTC_CLOCK_SOURCE_HSE)/* Calendar Configuration *//*RTC_LSE 为250.000kHz RTC_LSI = SynchPrediv * AsynchPrediv*/RTC_InitStructure.RTC_AsynchPrediv = 0x09; //99->250KHzRTC_InitStructure.RTC_SynchPrediv = 0xC35; // 2499->250KHzRTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;RTC_Init(&RTC_InitStructure);
#endif//RTC_Alarm_Config();
}
【二】设置RTC时间函数,涉及到年、月、日、时、分、秒
/****************************************************************************/
/*Function Name : RTC Set DateTime */
/*Author : Paul */
/*Data : 2021-1-20 09:56:40 */
/*Timer : none */
/*Input Parameters : none. */
/*Return type : none */
/*Output Parameters : none */
/****************************************************************************/
void RTC_Set_DateTime(uint8_t year,uint8_t month, uint8_t weekday,uint8_t date,uint8_t hours ,uint8_t minutes ,uint8_t seconds)
{RTC_TimeTypeDef RTC_TimeStructure;RTC_DateTypeDef RTC_DateStructure;/* Set the time to 00h 00mn 00s AM */RTC_TimeStructure.RTC_H12 = RTC_H12_PM;RTC_TimeStructure.RTC_Hours = hours;RTC_TimeStructure.RTC_Minutes = minutes;RTC_TimeStructure.RTC_Seconds = seconds; RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);RTC_DateStructure.RTC_WeekDay=weekday;RTC_DateStructure.RTC_Month=month;RTC_DateStructure.RTC_Date=date;RTC_DateStructure.RTC_Year=year;RTC_SetDate(RTC_Format_BIN,&RTC_DateStructure);RTC_WriteBackupRegister(RTC_BKP_DR0, 0xA5A5);
}
【三】闹钟配置函数
/****************************************************************************/
/*Function Name : RTC Alarm Config */
/*Author : Paul */
/*Data : 2021-1-21 11:48:43 */
/*Timer : none */
/*Input Parameters : none. */
/*Return type : none */
/*Output Parameters : none */
/****************************************************************************/
void RTC_Alarm_Config(void)
{NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure;RTC_TimeTypeDef RTC_TimeStructure;RTC_AlarmTypeDef RTC_AlarmStructure;/* EXTI configuration *******************************************************/EXTI_ClearITPendingBit(EXTI_Line17);EXTI_InitStructure.EXTI_Line = EXTI_Line17;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);/* Enable the RTC Wakeup Interrupt */NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;NVIC_InitStructure.NVIC_IRQChannelPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);RTC_ITConfig( RTC_IT_ALRA, DISABLE ); RTC_AlarmCmd(RTC_Alarm_A,DISABLE);/* RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_All;RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure); RTC_AlarmSubSecondConfig(RTC_Alarm_A, 0xFF, RTC_AlarmSubSecondMask_SS14_8);*/RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);RTC_AlarmStructure.RTC_AlarmTime.RTC_H12=RTC_H12_AM;RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours=RTC_TimeStructure.RTC_Hours;RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes=RTC_TimeStructure.RTC_Minutes;RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=RTC_TimeStructure.RTC_Seconds+5;if(RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds >=60)RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds-=60;RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31;RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay | RTC_AlarmMask_Hours|RTC_AlarmMask_Minutes; RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);RTC_ClearITPendingBit(RTC_IT_ALRA); RTC_ITConfig(RTC_IT_ALRA, ENABLE);RTC_AlarmCmd(RTC_Alarm_A, ENABLE);/* Enable the alarm */
}
【四】RTC中断函数
/****************************************************************************/
/*Function Name : RTC IRQHandler */
/*Author : Paul */
/*Data : 2021-1-20 10:35:27 */
/*Timer : none */
/*Input Parameters : none. */
/*Return type : none */
/*Output Parameters : none */
/****************************************************************************/
void RTC_IRQHandler(void)
{if(RTC_GetFlagStatus(RTC_IT_TS)!=RESET){RTC_ClearITPendingBit(RTC_IT_TS);}if(RTC_GetITStatus(RTC_IT_ALRA) != RESET){RTC_ClearITPendingBit(RTC_IT_ALRA);RTC_AlarmTime_Add_5_Sencond();WDR_Count_Rst();}EXTI_ClearITPendingBit(EXTI_Line17);
}
STM32F030 RTC内部晶振/外部晶振/闹钟相关推荐
- STM32 USB虚拟串口调试总结(内部晶振、外部晶振配置、硬件电路说明、测试方法)
目录 1.参考链接: 2.虚拟串口硬件说明 2.1.程序中无需配置硬件的设计:D+直接接了3.3V的上拉电阻. 2.2.需要程序中配置D+上拉电阻使能的设计:可以软件模拟USB插拔,便于固件更新后自动 ...
- 关于STM32 RTC时钟使用内部/外部晶振的切换方法
对于使用STM32单片开发项目的同志,经常会使用到STM32的RTC功能,而在配置RTC的功能时需要配置晶振的使用,可以使用内部晶振或外部晶振,配置流程参考官方的示例代码即可. 但在之前的项目中遇到一 ...
- stm32启用内部晶振(stm32设置外部晶振)
STM32中的晶振电路有什么作用 stm32 有两个可接入的外部晶振,自己内部也有低俗的晶振.举个例子,手册也有说明低速主要给RTC使用了,高速是给一些外设及内核提供时钟元,内部的主要是给看门狗用或 ...
- 怎样辨别内部晶振与外部晶振
一.单片机晶振简单介绍 单片机晶振是单片机内部电路产生单片机所需的时钟频率的部件,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率.晶振 ...
- stm32F103采用内部晶振8MHz时钟和外部晶振初始化代码
使用HSE配置系统时钟(stm32F10x 系列 外部晶振一般为4M–25MHz,具体见芯片手册) 首先需要复位RCC寄存器! 使能HSE 判断HSE是否启动成功 使能预取指 设置FLASH等待周期 ...
- (转载)STM32 外部晶振电路设计和匹配
(转载来自:https://blog.csdn.net/Seaman_TY/article/details/93090532) STM32的时钟源 STM32F103有两种主时钟方案,一个是依靠内部R ...
- stm32不使用外部晶振管脚怎么处理_外部晶体振荡器被旁路的原理和原因
单片机的外部晶振稳定,受温度,湿度等环境因素影响比内部振荡器小,精度比较高.而且当设计需要降低功耗时,比如说便携式仪表等,就需要外设晶振,因为内部振荡器不能根据需要停止,而外部晶振可以适时停止,从而进 ...
- stm32不使用外部晶振管脚怎么处理_stm32103如果不用32k晶振,那引脚是悬空还是接地?...
如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空. 2)对于少于100脚的产品,有2种接法: 2.1)OSC_I ...
- 让Atmega8A-PU 支持外部晶振的熔丝设置
这段时间搞了个arduino玩,感觉买的板子不过瘾,照着网上的教程折腾Arduino最小系统,过程非常曲折,现将部分内容总结记录下来,以备日后查阅. 参考文章:Arduino 1.0--让最小系统更简 ...
最新文章
- scapy windows install
- 《Oracle高性能自动化运维》一一2.5 小结
- fatal error C1083: 无法打开预编译头文件:“Debug\opencv.pch”: No such file or directory
- 【网络安全】身份验证凭证为何如此重要?
- First Missing Positive
- c++多态--2(计算器,纯虚函数和抽象类)
- 简单java在线测评程序
- 技术能变现,才是硬道理
- 已有项目要不要迁移到Addressable系统?
- spyder替换_Spyder 快捷键大全
- HGOI 20190816 省常中互测8
- c语言获取ip地址,如何用C语言获得本机IP地址
- 接了几个APP逆向的私活,赚爆了!
- 松下服务器没显示,松下Panasonic伺服驱动器没有显示维修
- Python每日一记20哑变量
- AT89C51中断模板(宏定义)
- google浏览器缓存文件在哪里
- BZOJ5394: [Ynoi2016]炸脖龙(欧拉广义降幂)
- 理解置信区间和置信水平
- android桌面壁纸显示不全屏显示,手机壁纸怎么全屏 全屏显示手机壁纸方法
热门文章
- 【公益创投】“爱无限·心关爱”2021心理情景剧剧本征集活动结果出炉啦!
- 安装完linux后要做的几件事。
- 解决Cannot create PoolableConnectionFactory (Access denied for user 'xxx'@'xxx.xxx.xx.xxx' (using pas
- 怎样知道自己的电脑是否支持GPU?
- 史上最细Maven一条龙服务(从0到飞起)
- 2000~2009十大创业新模式
- 2019年阿里云的最新优惠活动
- leetcode进行手机解绑与换绑
- 千年之恋HTML5和CSS3
- 孩子的同学写的:《恋秋 忆秋 叹秋》