对于使用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时钟使用内部/外部晶振的切换方法相关推荐

  1. STM32F030 RTC内部晶振/外部晶振/闹钟

    [一]RTC初始化函数,用宏定义设置内部/外部晶振,使用主频晶振8MHz,外部RTC晶振32.768KHz. /******************************************** ...

  2. stm32启用内部晶振(stm32设置外部晶振)

    STM32中的晶振电路有什么作用 stm32  有两个可接入的外部晶振,自己内部也有低俗的晶振.举个例子,手册也有说明低速主要给RTC使用了,高速是给一些外设及内核提供时钟元,内部的主要是给看门狗用或 ...

  3. STM32使用内部RC振荡器作为系统时钟开发项目--内晶振启动模板工程

    STM32使用内部RC振荡器时,OSC32_IN,OSC32_OUT接法: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空. 2)对于少于100脚的产品,有2种接法:   ...

  4. STM32 USB虚拟串口调试总结(内部晶振、外部晶振配置、硬件电路说明、测试方法)

    目录 1.参考链接: 2.虚拟串口硬件说明 2.1.程序中无需配置硬件的设计:D+直接接了3.3V的上拉电阻. 2.2.需要程序中配置D+上拉电阻使能的设计:可以软件模拟USB插拔,便于固件更新后自动 ...

  5. stm32F103采用内部晶振8MHz时钟和外部晶振初始化代码

    使用HSE配置系统时钟(stm32F10x 系列 外部晶振一般为4M–25MHz,具体见芯片手册) 首先需要复位RCC寄存器! 使能HSE 判断HSE是否启动成功 使能预取指 设置FLASH等待周期 ...

  6. 纠结的STM32 RTC时钟源LSE

    一开始,所有实验都是在神舟板上去完成,根本就没有发现RTC的问题.直到我们自己画板来后调试时,才发现STM32 RTC的外部时钟源存在问题. 这也算是STM32的一个鸡肋,对于LSE外部晶振太过于苛刻 ...

  7. STM32 RTC时钟源LSE

    一开始,所有实验都是在神舟板上去完成,根本就没有发现RTC的问题.直到我们自己画板来后调试时,才发现STM32 RTC的外部时钟源存在问题. 这也算是STM32的一个鸡肋,对于LSE外部晶振太过于苛刻 ...

  8. (转载)STM32 外部晶振电路设计和匹配

    (转载来自:https://blog.csdn.net/Seaman_TY/article/details/93090532) STM32的时钟源 STM32F103有两种主时钟方案,一个是依靠内部R ...

  9. stm32不使用外部晶振管脚怎么处理_外部晶体振荡器被旁路的原理和原因

    单片机的外部晶振稳定,受温度,湿度等环境因素影响比内部振荡器小,精度比较高.而且当设计需要降低功耗时,比如说便携式仪表等,就需要外设晶振,因为内部振荡器不能根据需要停止,而外部晶振可以适时停止,从而进 ...

最新文章

  1. python各个解释器的用途-【Python面试】 说说Python解释器种类以及特点?
  2. Tomcat下server.xml怎样处理图片多路径映射问题
  3. 【推荐系统】五个工业风满满的 Look-alike 算法
  4. vue_ajax插件Axios
  5. 今天的但我发现了幸福的超级玛丽,白萝卜的种子
  6. linux 打开db文件怎么打开方式,linux服务器打开数据库文件
  7. 自助式BI分析有哪些优势
  8. CMP?MSP?1+1才能大于2
  9. 同样是断言,为何 Hamcrest 如此优秀?
  10. 计算机网络谢希仁第七版课后习题答案
  11. 大陆身份证号码格式校验代码
  12. excel合并两列内容_Excel 两列合并成一列,又一种快捷方法!
  13. 网页打开5秒后弹出广告窗口
  14. jupyter notebook 打开md文件
  15. CART分类与回归树的原理与实现
  16. 使用Servlet作为控制器
  17. 2020-10-16 css07 css背景
  18. 百度地图html演示,百度地图.html
  19. 重庆科技学院数理学院mysql的期末考试_数据库期末考试重庆科技学院A.doc
  20. UniVL: A Unifified Video and Language Pre-Training Model for Multimodal Understanding and Generation

热门文章

  1. 【微信小程序】点击复制功能的实现(常用于分享码,兑换码)
  2. WCG 2019年7月将在中国西安举办
  3. maven-shade-plugin 入门指南
  4. qt 保存绘制图片时背景变黑_QGraphicsScene绘制背景图片引起的问题
  5. php实现大视频上传
  6. 微信之父张小龙:怎样做简单的产品经理?
  7. 人之一生,如负重远行,不可急至
  8. 电商后台设计:属性管理
  9. In-place Sorting
  10. sw运行很卡怎么办_solidworks2016在win10下运行很卡怎么办_solidworks在win10中打开缓慢如何解决...