STM32F030低温下RTC不工作

本文详细记录了STM32F030C6T6TR在低温环境下RTC工作异常的问题,通过实验发现LSE驱动等级过高可能是原因。调整负载电容或降低驱动等级可解决RTC无法正常工作的问题,但客户对精度要求不接受更改负载电容的方案。分析了晶振参数和驱动电流的影响,提出调整LSE驱动等级以避免振荡回路饱和的建议。
摘要由CSDN通过智能技术生成

1 前言

客户反馈在批量生产阶段,发现部分产品的MCU的RTC在低温(0℃)下工作不正常,但是在常温下又是正常的,且其他正常的MCU的RTC在常温与低温下都是正常的。

2 问题跟进与分析

通过与客户邮件沟通,了解到客户使用的MCU型号是:STM32F030C6T6TR。在产品的主从结构中主要用作电源管理和时钟管理。通过客户的描述,似乎相同型号不同片子都存在较大的差异。

由于时间紧急,在了解到初步信息后立即拜访客户,针对客户认为有问题的MCU芯片做针对性试验。通过STM32CubMx生成测试工程,分别使用LSI(40K),LSE(32.768K),RTC工作时每秒通过LED1(PB5)取反一次(通过LED1灯是否闪烁来指示RTC是否工作正常),然后分别测量OSC管脚与PA8脚(输出LSI或LSE),并对比ST官方的NUCLEO-F030板,最终测试结果如下:

Test item Temperature Low-speed clock type LED1(use PB5 to indicate the RTC status) OSC pin PA8 output clock
Use Customer board without any modify Indoor temperature(25℃) Use LSI(40KHz) OK(Flash every second) N/A OK(Output 40K waveform)
Use Customer board without any modify Under the low temperature(0℃) Use LSI(40KHz) OK(Flash every second) N/A OK(Output 40K waveform)
Use Customer board without any modify Indoor temperature(25℃) Use LSE(32.768KHz) OK(Flash every second) 32.768K waveform OK(Output 32.768K waveform)
Use Customer board without any modify Under the low temperature(0℃) Use LSE(32.768KHz) Failed(no flash) 32.768K waveform detected Failed(no output waveform)
Use the Customer board and modify the LSE load capacitance value to 6.8pF Indoor temperature(25℃) Use LSE(32.768KHz) OK(Flash every second) 32.768K waveform OK(Output 32.768K waveform)
Use the Customer board and modify the LSE load capacitance value to 6.8pF Under the low temperature(0℃) Use LSE(32.768KHz) OK(Flash every second) 32.768K waveform
### 回答1: STM32F030C8T6是意法半导体推出的一款低功耗、高性能的32位微控制器芯片,它内置有RTC(实时时钟)模块,可实现钟表、定时、闹钟等功能。 下面以ST官方提供的RTC示例为例,简单介绍一下该芯片的RTC实现方法。 首先,在工程中需要包含以下头文件: #include "stm32f0xx.h" #include "stm32f0xx_rcc.h" #include "stm32f0xx_rtc.h" 然后需要初始化RTC时钟,以及配置RTC的时钟源、时钟分频器等参数: RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); PWR_BackupAccessCmd(ENABLE); RCC_LSEConfig(RCC_LSE_ON); //使能外部低速震荡器 while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); //等待低速震荡器启动 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //将RTC时钟源设置为低速震荡器 RCC_RTCCLKCmd(ENABLE); //使能RTC时钟 RTC_WaitForSynchro(); //等待RTC计数器同步 接下来就可以对RTC模块进行配置,像设定当前时间、闹钟、定时器、周期性间隔中断等等: RTC_InitTypeDef RTC_InitStructure; RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; RTC_InitStructure.RTC_AsynchPrediv = 0x7F; RTC_InitStructure.RTC_SynchPrediv = 0xFF; RTC_Init(&RTC_InitStructure); RTC_SetTime(RTC_Format_BIN, &RTC_TimeType); RTC_SetAlarm(RTC_Format_BIN,RTC_AlarmTime); RTC_GetTime(RTC_Format_BIN,&RTC_TimeType); RTC_SetWakeUpClock(RTC_WakeUpClock_CK_SPRE_16bits); RTC_WakeUpCmd(ENABLE); 可以看到,使用STM32F030C8T6的RTC模块实现时钟、定时、闹钟等功能非常简单,而且能够在低功耗状态下工作,非常适合用于一些需要长时间运行并需要精确时钟的场合。 ### 回答2: STM32F030C8T6是一款低功耗、高性能的ARM Cortex-M0单片机,它内置了实时时钟(RTC)模块,可以实现精确的时间计数和日期计算功能。 为了更好地了解STM32F030C8T6的RTC模块,STMicroelectronics为其提供了RTC示例代码。这个示例包括初始化RTC模块、设置时间和日期、读取时间和日期以及设置闹钟等功能,可以帮助开发者快速上手使用RTC模块。 在示例代码中,开发者需要首先初始化RTC模块并设置时间、日期和闹钟。随后,可以通过调用相应的API来获取当前时间和日期,或者设置闹钟触发时间。在RTC工作过程中,可以通过轮询或者中断方式来检测闹钟的触发,从而完成相应的任务。 除了基本的时间和日期计算功能,示例代码还提供了其他实用的功能,比如可以设置备份寄存器、设置时间戳、以及支持闹钟和唤醒功能等等。这些功能能够充分发挥RTC模块的实用性,使其在物联网、智能家居和嵌入式系统等领域得到广泛应用。 综上所述,STM32F030C8T6 RTC示例代码是一份非常实用的参考资料,可以帮助开发者快速学习和掌握STM32F030C8T6 RTC模块的使用方法,为物联网、智能家居和嵌入式系统等领域的应用开发提供强有力的支持。 ### 回答3: stm32f030c8t6是STM32系列单片机之一,它具有实时时钟(RTC)模块,可以用来记录时间,具有较高的准确度和稳定性。下面我们以RTC示例为例,来介绍STM32F030C8T6的RTC模块使用方法。 首先,我们需要在代码中初始化RTC模块。使用STM32CubeMX软件,我们可以配置RTC的时钟源和时钟分频器,可以选择外部晶振或内部RC振荡器作为时钟源。然后,我们需要在代码中启用RTC时钟和备份寄存器,并设置RTC的时间和日期。在开发的过程中,可以根据需要修改时间和日期。 其次,我们可以利用RTC模块实现定时操作,例如定时唤醒系统、定时采集数据等。RTC提供了设置和清除闹钟功能,可以在特定时间点触发外部中断。我们可以在RTC中设置闹钟,然后中断处理函数中实现需要执行的操作。 最后,RTC还可以用于实现唤醒系统的低功耗模式。在设置低功耗模式时,我们需要将系统进入待机模式,RTC时钟作为唤醒源,在一定条件下唤醒系统。实现低功耗模式可以大大降低系统功耗,延长系统电池寿命。 总的来说,STM32F030C8T6的RTC模块是非常实用的功能模块,可以方便地记录时间、实现定时操作和低功耗模式,可以适用于很多实际应用场景。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值