关于STM32 RTC时钟使用内部/外部晶振的切换方法
对于使用STM32单片开发项目的同志,经常会使用到STM32的RTC功能,而在配置RTC的功能时需要配置晶振的使用,可以使用内部晶振或外部晶振,配置流程参考官方的示例代码即可。
但在之前的项目中遇到一个问题,由于一些产品的外部晶振损坏(时间长了有些外部晶振容易坏掉),导致RTC实时时钟时间异常。为了降低公司的维护成本,所以考虑通过修改程序,重新配置为STM32内部晶振来解决问题(我们的应用场景可以采用这种方法,因为服务器会固定时间同步产品时间)。
采用外部晶振的RTC部分配置代码:
/* Enable the PWR clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to RTC */
PWR_BackupAccessCmd(ENABLE);
/* Enable the LSE OSC */
RCC_LSEConfig(RCC_LSE_ON);
/* Wait till LSE is ready */
do{
tick++;
}while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET && tick < 20000);
tick = 0;
/* Select the RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);
RTC_StructInit(&RTC_InitStructure);
RTC_Init(&RTC_InitStructure);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
最初以为改为内部晶振配置比较简单,只要将和外部晶振有关的配置代码改为内部晶振即可。后来发现,STM32芯片的RTC时钟选择一旦配置了之后,想要切切换的话需要多配置一点东西,后来查了手册果然如此,这里给出配置代码,具体手册的说明有时间再放过来,以下部分供同志们参考。
RTC从外部晶振切换为内部晶振配置代码:
uint32_t tick = 0;
uint32_t tmpreg1 = 0;
/* Enable the PWR clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to RTC */
PWR_BackupAccessCmd(ENABLE);
/* 晶振切换时必须执行的步骤,但不能每次上电都执行,否则会清空时间,同志们根据实际需求自行考虑执行位置 */
tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));
RCC_BackupResetCmd(ENABLE);
RCC_BackupResetCmd(DISABLE);
RCC->BDCR = tmpreg1;
/* Enable the LSI OSC */
RCC_LSICmd(ENABLE);
/* Wait till LSI is ready */
do{
tick++;
}while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET && tick < 20000);
tick = 0;
/* Select the RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);
RTC_StructInit(&RTC_InitStructure);
RTC_Init(&RTC_InitStructure);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
天道酬勤!
关于STM32 RTC时钟使用内部/外部晶振的切换方法相关推荐
- STM32F030 RTC内部晶振/外部晶振/闹钟
[一]RTC初始化函数,用宏定义设置内部/外部晶振,使用主频晶振8MHz,外部RTC晶振32.768KHz. /******************************************** ...
- stm32启用内部晶振(stm32设置外部晶振)
STM32中的晶振电路有什么作用 stm32 有两个可接入的外部晶振,自己内部也有低俗的晶振.举个例子,手册也有说明低速主要给RTC使用了,高速是给一些外设及内核提供时钟元,内部的主要是给看门狗用或 ...
- STM32使用内部RC振荡器作为系统时钟开发项目--内晶振启动模板工程
STM32使用内部RC振荡器时,OSC32_IN,OSC32_OUT接法: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空. 2)对于少于100脚的产品,有2种接法: ...
- STM32 USB虚拟串口调试总结(内部晶振、外部晶振配置、硬件电路说明、测试方法)
目录 1.参考链接: 2.虚拟串口硬件说明 2.1.程序中无需配置硬件的设计:D+直接接了3.3V的上拉电阻. 2.2.需要程序中配置D+上拉电阻使能的设计:可以软件模拟USB插拔,便于固件更新后自动 ...
- stm32F103采用内部晶振8MHz时钟和外部晶振初始化代码
使用HSE配置系统时钟(stm32F10x 系列 外部晶振一般为4M–25MHz,具体见芯片手册) 首先需要复位RCC寄存器! 使能HSE 判断HSE是否启动成功 使能预取指 设置FLASH等待周期 ...
- 纠结的STM32 RTC时钟源LSE
一开始,所有实验都是在神舟板上去完成,根本就没有发现RTC的问题.直到我们自己画板来后调试时,才发现STM32 RTC的外部时钟源存在问题. 这也算是STM32的一个鸡肋,对于LSE外部晶振太过于苛刻 ...
- STM32 RTC时钟源LSE
一开始,所有实验都是在神舟板上去完成,根本就没有发现RTC的问题.直到我们自己画板来后调试时,才发现STM32 RTC的外部时钟源存在问题. 这也算是STM32的一个鸡肋,对于LSE外部晶振太过于苛刻 ...
- (转载)STM32 外部晶振电路设计和匹配
(转载来自:https://blog.csdn.net/Seaman_TY/article/details/93090532) STM32的时钟源 STM32F103有两种主时钟方案,一个是依靠内部R ...
- stm32不使用外部晶振管脚怎么处理_外部晶体振荡器被旁路的原理和原因
单片机的外部晶振稳定,受温度,湿度等环境因素影响比内部振荡器小,精度比较高.而且当设计需要降低功耗时,比如说便携式仪表等,就需要外设晶振,因为内部振荡器不能根据需要停止,而外部晶振可以适时停止,从而进 ...
最新文章
- python各个解释器的用途-【Python面试】 说说Python解释器种类以及特点?
- Tomcat下server.xml怎样处理图片多路径映射问题
- 【推荐系统】五个工业风满满的 Look-alike 算法
- vue_ajax插件Axios
- 今天的但我发现了幸福的超级玛丽,白萝卜的种子
- linux 打开db文件怎么打开方式,linux服务器打开数据库文件
- 自助式BI分析有哪些优势
- CMP?MSP?1+1才能大于2
- 同样是断言,为何 Hamcrest 如此优秀?
- 计算机网络谢希仁第七版课后习题答案
- 大陆身份证号码格式校验代码
- excel合并两列内容_Excel 两列合并成一列,又一种快捷方法!
- 网页打开5秒后弹出广告窗口
- jupyter notebook 打开md文件
- CART分类与回归树的原理与实现
- 使用Servlet作为控制器
- 2020-10-16 css07 css背景
- 百度地图html演示,百度地图.html
- 重庆科技学院数理学院mysql的期末考试_数据库期末考试重庆科技学院A.doc
- UniVL: A Unifified Video and Language Pre-Training Model for Multimodal Understanding and Generation