STM32 RTC不起振分析
单片机不起振的原因
单片机不起振的原因
以单片机不起振的原因为题目,我们需要从多个方面进行分析和探讨。在单片机不起振的情况下,可能存在以下几个原因:
1. 电源供电问题
单片机启动需要稳定的电源供应。如果电源电压不稳定或者电源接线不良,会导致单片机无法正常启动。此时,我们可以通过检查电源电压是否正常以及检查电源接线是否牢固来解决问题。
2. 外部晶振问题
单片机通常需要外部晶振来提供时钟信号。如果外部晶振损坏或者连接不正确,将导致单片机无法起振。此时,我们可以检查晶振是否损坏、晶振引脚是否连接正确以及晶振频率是否符合要求。
3. 复位电路问题
单片机启动时,需要通过复位电路将单片机复位到初始状态。如果复位电路存在问题,单片机无法正常启动。我们可以检查复位电路的电源电压是否稳定、复位电路的元件是否损坏以及复位电路的接线是否正确。
4. 编程问题
单片机不起振可能是由于程序存在问题。我们可以检查程序是否正确、是否存在死循环或者逻辑错误等。此外,还可以通过调试工具来查看单片机的运行状态,以便找出问题所在。
5. 硬件连接问题
单片机启动还可能受到硬件连接问题的影响。例如,如果单片机的引脚连接错误或者接触不良,将导致单片机无法正常启动。在此情况下,我们需要检查硬件连接是否正确、引脚接触是否良好。
6. 其他原因
除了以上几个常见原因外,单片机不起振还可能存在其他问题。例如,单片机本身存在损坏或者是芯片供应商的问题等。在这种情况下,我们可能需要更换单片机或者与芯片供应商联系解决问题。
单片机不起振可能存在多种原因,如电源供电问题、外部晶振问题、复位电路问题、编程问题、硬件连接问题以及其他原因。正确排查和解决这些问题,可以使单片机正常起振并运行。
stm32f103烧进程序后晶振不起振的原因
文章标题:深度探讨STM32F103烧进程序后晶振不起振的原因
在STM32F103系列芯片中,晶振不起振是一个常见的问题,它可能会导致程序无法正常运行。今天,我们就来深入探讨一下这个问题,并找出可能的原因和解决方法。
1. 硬件设计问题
当我们遇到STM32F103烧进程序后晶振不起振的情况时,首先要考虑的是硬件设计是否存在问题。晶振电路中可能存在以下问题:
1.1 晶振电路连接错误:晶振的接线是否正确,是否接地良好。
1.2 晶振参数选择错误:晶振的频率和负载电容是否选择正确。
1.3 PCB布线问题:晶振电路的布线是否存在干扰因素,是否符合设计规范。
2. 程序问题
程序问题也可能导致晶振不起振,这时需要检查以下可能原因:
2.1 时钟配置错误:程序中的时钟配置是否正确,是否与晶振频率相匹配。
2.2 中断设置错误:程序中的中断设置是否影响到了晶振的起振。
2.3 外部晶振使能错误:程序中是否正确使能了外部晶振。
3. 软硬件结合问题
有时候晶振不起振可能是软硬件结合问题导致的:
3.1 程序干扰:程序可能存在干扰晶振起振的代码。
3.2 硬件干扰:硬件可能存在干扰晶振的因素,如电源等。
在解决了以上可能的问题之后,我们还要考虑一些其他可能性:
4. 晶振质量问题
晶振本身质量不良也可能导致不起振,这时需要更换晶振来排除问题。
总结回顾
通过以上的探讨和分析,我们可以看到STM32F103烧进程序后晶振
不起振的原因有很多,可能是硬件设计问题、程序问题、软硬件结合
问题,甚至是晶振质量问题。在遇到这个问题时,我们需要全面排查,从多个可能性出发,逐一排除,才能找到最终的原因并解决问题。
STM32应用中的常见问题
16
STM32多重外设协同工作一例
高精度秒脉冲输出 RTC/TIMER
秒脉冲信号输出
在某些应用中需要输出精确的秒脉冲信号用 于测量或同步
STM32F10x的RTC硬件秒脉冲存在某些局 限性 RTC和外设配合使用能够很好地实现精准的 秒脉冲
18
秒脉冲信号输出 – RTC的秒脉冲
RTC时钟 ≈32768Hz 秒脉冲 32秒 2^20+N个时钟 32768个时钟
PSC① = 65535 ARR① = 182 OC1① = 65535 PSC② = 0 ARR② = N+1 OC1② = N 秒脉冲的调整精度可达到 1/24M≈0.04ppm 22
秒脉冲 – 使用RTC+TIMER输出秒脉冲
秒脉冲可调整的精度提高
每个秒脉冲的间隔都保证非常精确 校验及设置完成后,不需要软件参与秒脉冲的输 出 只要保证RTC的时钟精度,随时可以测得 SYSCLK的变化,并方便地调整秒脉冲的输出
4
FSMC的常见问题:数据与地址线(2)
例:使用STM32Fxxx 100pins的复用模式连接8位SRAM。该 应用中:
8位数据 A/D[7:0] 20位地址 A/D[7:0] +A/D[15:8]+ A[19:16]
显然A/D[7:0]需要经过锁存;那么A/D[15:8]是否可以不经过 latch而只包含地址信息?
单片机晶振不起振的40个原因分析
单片机晶振不起振的40个原因分析
单片机晶振不起振原因分析遇到单片机晶振不起振是常见现象,那么引起晶振不起振的原因有哪些呢?(1)PCB板布线错误;(2)单片机质量有问题;(3)晶振质量有问题;(4)负载电容或匹配电容与晶振不匹配或者电容质量有问
1、单片机晶振不起振原因分析
遇到单片机晶振不起振是常见现象,那么引起晶振不起振的原因有哪些呢?
(1)PCB板布线错误;
(2)单片机质量有问题;
(3)晶振质量有问题;
(4)负载电容或匹配电容与晶振不匹配或者电容质量有问题;
(5)PCB板受潮,导致阻抗失配而不能起振;
(6)晶振电路的走线过长;
(7)晶振两脚之间有走线;
(8)外围电路的影响。
解决方案,建议按如下方法逐个排除故障:
(1)排除电路错误的可能性,因此你可以用相应型号单片机的推荐电路进行比较。(2)排除外围元件不良的可能性,因为外围零件无非为电阻,电容,你很容易鉴别是否为良品。
(3)排除晶振为停振品的可能性,因为你不会只试了一二个晶振。
(4)试着改换晶体两端的电容,也许晶振就能起振了,电容的大小请参考晶振的使用说明。
(5)在PCB布线时晶振电路的走线应尽量短且尽可能靠近IC,杜绝在晶振两脚间走线。
2、单片机晶振电路中两个微调电容不对称会怎样?相差多少会使频率怎样变化?我在检测无线鼠标的接受模块时,发现其频率总是慢慢变化(就是一直不松探头的手,发现频率慢慢变小)晶振是新的!
stm32f103烧进程序后晶振不起振的原因
stm32f103烧进程序后晶振不起振的原因
STM32F103是一款传统的32位微控制器,它具有丰富的外设和性能优势。然而,有时在烧录程序后,晶振可能会无法起振,导致系统无法正常工作。以下是可能导致这种情况的原因:
1. 晶振频率选择不当:在使用STM32F103时,通常需要在程序中配置晶振的
频率。如果选择的频率与实际晶振的频率不匹配,晶振可能无法起振。因此,在进行程序烧录之前,请确保正确配置晶振频率。
2. 硬件连接问题:晶振需要正确连接到STM32F103的晶振引脚(OSC_IN和OSC_OUT)。任何连接问题,例如插头没有完全插好,引脚接触不良,都可能导
致晶振无法起振。因此,请检查晶振的连接并确保它与引脚正确连接。
3. 晶振损坏:如果晶振本身损坏或有其他问题,它可能无法起振。这可能是由
于电压波动、静电放电或长时间使用引起的。如果怀疑晶振损坏,可以尝试更换一个新的晶振来排除故障。
4. 地线和电源问题:晶振的工作需要稳定的地线和电源。如果地线或电源线存
在问题,例如接触不良或电源噪音过大,晶振可能无法正常起振。请确保地线和电源线的连接良好,并检查电源线上的噪音情况。
5. 程序错误:在某些情况下,由于程序编写错误或其他软件问题,晶振可能无
法起振。这可能是由于程序中的错误配置或特定代码导致的。在这种情况下,请仔细检查程序代码,并确保没有任何错误或不正确的配置。
总结起来,当STM32F103在烧录程序后晶振不起振时,常见原因包括晶振频
率选择不当、硬件连接问题、晶振损坏、地线和电源问题以及程序错误。通过仔细检查和排除这些问题,可以解决晶振不起振的问题,并确保STM32F103正常工作。
STM32的晶振,时钟稳定性要重视!!!
STM32 的晶振,时钟稳定性要重视!!!
最近看了不少网上网友的应用案例,在STM32 晶振问题上不少都栽了跟头。我自己也碰见过一次。就是电容值搞错了。
ourdev 有网友说:他的设备隔几天系统就出问题,系统时钟变慢。
----------------------------------------有网友说:
国产的晶振,我们用在产品里吃过很多亏。发出去几百个货(出厂都检验合格),
到客户那里几个有时就不起振了(几个月后),后来改用进口的,从此不出问题了。哎!
---------------------------------------有网友说:
第一次遇到是忘了焊接22P 的电容,板子可以工作,但是运行速度慢,但是晶振起振了,
示波器看波形有刺,想必是STM32 认为外部晶振信号不好,
STM32单片机RTC时钟的使用方法及步骤
STM32单片机RTC时钟的使用方法及步骤以下是使用STM32单片机的RTC时钟的步骤:
1.初始化RTC模块:
首先,需要在RCC寄存器中使能RTC和LSE(Low-Speed External)晶振模块。然后,配置RTC的时钟源和预分频器,选择合适的时钟频率。
2.配置RTC时间和日期:
通过设置RTC的寄存器来配置当前时间和日期。需要设置秒、分钟、小时、星期、日期、月份和年份,确保其具有正确的值。
3.启动RTC时钟:
设置RTC的控制寄存器,使其开始工作。可以选择启用或禁用闹钟功能,设置闹钟的时间和日期。
4.读取RTC数据:
可以随时读取RTC的时间和日期数据。读取数据后,可以进行各种计算和处理,如计算两个时间之间的差异、比较时间等。
5.处理RTC中断:
可以设置RTC中断来触发一些操作,如闹钟触发时执行一些任务。需要配置NVIC(Nested Vector Interrupt Controller)中断向量表,使能相应的中断。
6.备份和恢复RTC数据:
RTC模块提供了备份寄存器,可以用来存储额外的信息。可以使用一些特殊的寄存器,如BKP (Backup)寄存器或CPU的系统寄存器来备份和恢复数据。
7.断电维持能力:
RTC模块的一个关键特性是其断电维持能力。即使在断电情况下,RTC模块中的数据仍然能够保持。可以通过电池供电电路来提供必要的电力。
8.节能模式:
可以利用RTC模块的节能模式来降低功耗。可以选择性地关闭RTC模块的不需要的功能,以减少功耗。
需要注意的是,具体的步骤可能会因芯片型号和开发工具的不同而有所差异。因此,在使用STM32单片机的RTC时钟之前,需查阅相关的技术文档和参考手册,以了解具体操作步骤和寄存器配置。
关于STM32开发板晶振相关的问题汇总
关于STM32开发板晶振相关的问题汇总
由于开发板上晶振稍多,买的板子还配有几个额外的晶振,搞不明白,就在论坛上查了一些资料。看了相关帖子将近30篇,基本上搞定了。现将相关问题汇总如下,分项给大家。
1、自己做了个STM32 的板子,,但是手里没有8M的晶振,所以就用了,12M的,,但是不正常,上电之后PA15和PA14接的是两个led,PA15接的led常亮,PA14接的的led不亮,,而且芯片下载程序又能下载,应该不是芯片坏的问题吧,,而且不管我些什么程序进去,两个脚的状态都不变,,我怀疑是电路有问题,,可是我仔细检查了电路和板子,都没问题,,JTAG正常使用。我用的是12M的晶振,这会有影响吗?感觉不管下什么程序进去感觉芯片好像没有运行。
答:如果使用12M的晶振,那么要修改启动文档中的关于RCC的语句。
因为如果你使用库文件的话,ST的库,默认外部晶振是8M,所以如果你不修改RCC 部分的语句,会造成CPU不启动,或者启动不成功。
现象是,在MDK环境下,能够通过JTAG识别到芯片,但是无法下载或者debug。会提示 can not attach CPU。
2、突然想到这个问题,外部无源晶振选择大小的区别是什么?
对STM32芯片它都要先分频,再倍频。
我在想,假设,如果它分频都要降到2M,再倍频上去
那我直接2M的晶振1分频再倍频,跟24M先12分频再倍频他们的区别是什么?还是说本身就是任意的,根据自己需要选择?
答:方便各种应用场景。
3、自己做的STM32F103RBT6板子,外接8M晶振,现在程序下载正常,运行正常,在程序初始化时用到Stm32_Clock_Init(9)这条语句,我想问下是不是外部晶振如果没起振在执行这条语句时会停止?也就是说我的程序下载和运行都正常说明外部晶振肯定起振了,而且已经倍频到72M了。
stm32 RCC 时钟彻底分析
stm32芯片手册上有张图表示的很清楚,一共有4个时钟源:1.HSI(内部高速时钟 8MHz)提供可以位系统时钟提供时钟源2.HSE(外部高速时钟)可以提供系统时钟和RTC时钟时钟源3.LSE(低速外部时钟32.768kHz)可以为可以为RTC提供时钟源4.LSI(低速内部时钟)可以为独立看门狗提供时钟源首先分析一下ST公司给的库函数:我用的是3.5的库我们看看SystemInit里是什么void SystemInit (void){RCC->CR |= (uint32_t)0x00000001; //打开HSI内部高速时钟#ifndef STM32F10X_CLRCC->CFGR &= (uint32_t)0xF8FF0000;//CFCG寄存器的27位没用,所以这个宏没用#else //MCO的两位清零,不往外输出时钟,0-15位清零,PLCK 2分频给ADC,HCLK不分频给APB2RCC->CFGR &= (uint32_t)0xF0FF0000;//HCLK不分频给APB1,sysclk不分频给AHB,HSI用作系统时钟,#endif /* STM32F10X_CL */ /* Reset HSEON, CSSON and PLLON bits */RCC->CR &= (uint32_t)0xFEF6FFFF; //HSE禁用/* Reset HSEBYP bit */RCC->CR &= (uint32_t)0xFFFBFFFF; //外部高速时钟未被旁路/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */RCC->CFGR &= (uint32_t)0xFF80FFFF; //PLL 1.5分频,给USBpre,PLLMUL *2,HSE未分频做PLL输入HSI/2做PLL输入#ifdef STM32F10X_CL/* Reset PLL2ON and PLL3ON bits */RCC->CR &= (uint32_t)0xEBFFFFFF; ///* Disable all interrupts and clear pending bits */RCC->CIR = 0x00FF0000; //禁止所有中断,清中断标志位 /* Reset CFGR2 register */RCC->CFGR2 = 0x00000000;#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)/* Disable all interrupts and clear pending bits */RCC->CIR = 0x009F0000;/* Reset CFGR2 register */RCC->CFGR2 = 0x00000000; #else/* Disable all interrupts and clear pending bits */RCC->CIR = 0x009F0000;#endif /* STM32F10X_CL */#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)#ifdef DATA_IN_ExtSRAMSystemInit_ExtMemCtl(); #endif /* DATA_IN_ExtSRAM */#endif /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers *//* Configure the Flash Latency cycles and enable prefetch buffer */SetSysClock(); //最终调用时钟设置函数,下面分析#ifdef VECT_TAB_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /*中断向量表定位在SRAM_BASE(0X20000000)+VECT_TAB_OFFSET(0X0)处*/#elseSCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /*中断向量表定位在FLASH_BASE(0X08000000)+VECT_TAB_OFFSET(0X0)处 */#endif } 下面看看SetSysClock()函数static void SetSysClock(void){#ifdef SYSCLK_FREQ_HSESetSysClockToHSE();#elif defined SYSCLK_FREQ_24MHzSetSysClockTo24();#elif defined SYSCLK_FREQ_36MHzSetSysClockTo36();#elif defined SYSCLK_FREQ_48MHzSetSysClockTo48();#elif defined SYSCLK_FREQ_56MHzSetSysCloc
RTC不起振的原因 必看
RTC晶振不起振的原因作者嵌入式玩耍者日期2010-3-30 5:16:00
推荐
RTC 使用32.768K晶振,不起振但是用手接触一下,或者如果用万用表(甚至没开的)的任一表笔接触晶振的管脚就能起振了。但是断电后重新启动故障依旧,请问为何?
问题困扰了很久,还是没有找到解决办法。第一块板子的时候,换了晶振,开始的时候问题依旧。隔了一个晚上就又好了,真不知道是何缘故?
网络上找了一些原因:
1、电路板的地线连接有问题;
2、电阻电容的阻值和容值是否符合数据手册的要求,晶振的质量不好也有可能导致这种情况。
3、出现这种问题原因一般是芯片的地线有断路,或者引脚虚焊接。
4、atasheet中已说明32.768K晶振的start-up time 需要3s 因此需要在程序中加上延时。
5、在晶振上并了只2.4M的电阻加大振荡电路的反馈。
6、拆下相关元件, 清除脏,杂, 重焊, 电吹风吹干燥。
2011 /8/25
wxdxh
stm32 rtc用法
stm32 rtc用法
STM32是一款功能强大的微控制器系列,RTC(Real Time Clock)是其中一个重要的功能模块。RTC模块为嵌入式设备提供了高精度的实时时钟功能,能够在断电后依然保持时间的准确性。本篇文章将详细介绍STM32 RTC的使用方法,一步一步回答相关问题。
第一步:使用前的准备
在开始使用STM32 RTC之前,需要对RTC模块进行一些准备工作。首先,在Keil或者其他集成开发环境(IDE)中,需要将RTC作为外设来进行配置。其次,需要对RTC外设的时钟进行配置,通常可以选择外部晶体振荡或者内部LSI振荡作为时钟源。最后,还需要配置RTC的预分频器和计数器,以满足实际应用的需求。
第二步:初始化RTC模块
在进行RTC模块的初始化之前,需要先对RTC外设进行使能。通过启用
RCC_AHB1ENR或RCC_APB1ENR寄存器中的RTCEN位,可以使能RTC外设。接着,可以通过RCC_CSR寄存器中的备份域访问位(BDCR寄存器)来对RTC 模块进行初始化。在初始化RTC模块时,可以设置时钟源、预分频器和计数器的初值,以及其他一些参数,如是否使能闹钟功能等。
第三步:设置RTC时间
在RTC模块初始化完成后,可以通过写入RTC_TR和RTC_DR寄存器来设置RTC
的时间。其中,RTC_TR寄存器用于设置小时、分钟和秒钟的值,RTC_DR寄存器用于设置年、月和日期的值。需要注意的是,写入RTC_TR和RTC_DR寄存器的时候,应该先禁用RTC写保护,然后再进行写操作。完成时间设置后,可以重新启用RTC写保护。
STM32单片机RTC时钟的使用方法及步骤
STM32单片机RTC时钟的使用方法及步骤
STM32RTC使用步骤:
打开PWR时钟和Backup区数据访问
若使用外部低速时钟(LSE),打开LSE并等待起振
选择和打开RTC时钟,等待时钟同步
配置时间格式,分频系数等
根据需要配置时钟,日期,闹钟,唤醒,输出,时间戳,备份寄存器等模块
根据需要配置和打开中断,其中
RTC Alarm ——EXTI line 17
RTC tamper and TImestamps——EXTI line 19
RTC wakeup——EXTI line 20
下面的代码配置日期,时间,当前时间设置为15年05月31日,星期日(7),15:50:40,打开闹钟A和唤醒中断,每一秒钟来一次中断,15:50:45秒产生闹钟中断,用串口打印相应的信息。
代码:
void RTC_Config(void)
{
RTC_TImeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
RTC_InitTypeDef RTC_InitStructure;
RTC_AlarmTypeDef RTC_AlarmStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_BackupResetCmd(ENABLE);
RCC_BackupResetCmd(DISABLE);
RCC_LSEConfig(RCC_LSE_ON);
STM32单片机RTC时钟的使用方法及步骤
STM32单片机RTC时钟的使用方法及步骤
一、配置RTC模块时钟源
RTC模块的时钟源可以选择外部低速晶振(LSE)或者低速内部时钟(LSI)。通过以下步骤配置RTC时钟源:
1.使能外部低速晶振(LSE)或者低速内部时钟(LSI)。例如,如果使用外部低速晶振,则需要使能相应的GPIO端口,并配置为晶振模式。
2.配置RCC时钟控制寄存器(RCC_CR)和时钟配置寄存器
(RCC_CSR)。
二、使能RTC模块时钟
1.使能PWR模块时钟和备份寄存器访问。
RCC_APB1ENR,=(1<<28);
RCC_APB1ENR,=(1<<27);
2.校验并关闭RTC模块。
RCC->BDCR,=RCC_BDCR_RTCEN;
PWR->CR,=PWR_CR_DBP;
if ((RCC->BDCR & RCC_BDCR_RTCEN) == 0)
RCC->BDCR,=RCC_BDCR_RTCEN;
3.配置RTC时钟预分频器和提供给RTC的时钟源。
RTC->PRER ,= rtc_prescaler_value << RTC_PRER_PREDIV_S_Pos;
RTC->PRER ,= 127 << RTC_PRER_PREDIV_A_Pos;
RTC->CR&=~RTC_CR_FMT;
三、配置RTC模块时间和日期
1.关闭RTC时钟写保护功能。
RTC->WPR=0xCA;
RTC->WPR=0x53;
RTC->ISR,=RTC_ISR_INIT;
while((RTC->ISR & RTC_ISR_INITF) == 0);
STM32晶振选型 晶振不起振 晶振及负载电容 晶振参数计算器
第一步:增益裕量(Gainmargin)计算
π 3.14
晶振手册:F=32768Hz C0=2pF
CL=6pF ESR(R1)=50000Ω
STM32手册:gm=5μA/V(选择单位)gm单位:μA/V
(Oscillator transconductance)mA/V
结果:gmcrit= 5.420E-07=0.54204μA/V
gainmargin=9.22
第二步:外部负载电容的计算
Cs=3pF注:一般取2~75~6
CL1=CL2= 6.0pF
第三步:驱动级别及外部电阻的计算
对于32kHz的振荡器来说,一般不推荐使用外部限流电阻(译注:因为LSE的常见问题是振荡器
ESR是指晶振的等效串联电阻(其值由晶振制造商给出):
IQ是流过晶振电流的均方根有效值,使用示波器可观测到其波形为正弦波。
电流值可使用峰-峰值(IPP)。当使用电流探头时(如图6),示波器的量程比例可能需要设置为1m 图6 使用电流探头检测晶振驱动电流
。
注:分路电容(shunt capacitance)
低频(32K)
高频
SE的常见问题是振荡器驱动能力不足而非晶振被过分驱动)
比例可能需要设置为1mA/1mV。
IQMAX
均方根有效值(
假设流过晶振的电流波形为正弦波
)。
AXPP 表达式如下:
荡器起振条件将得不到满足从而无法正常工作。重新计算Gainmargin 。
重新回到第一步。确保振荡器的起振点在基频上,而不是在其他
晶振制造商的给定值,外部电阻RExt是必需的,用以推荐使用RExt了,它的值可以是0Ω。
意到RExt和CL2构成了一个分压/滤波器,考虑通带宽度
PCB 漏电引起 LSE 停振
PCB 漏电引起 LSE 停振
问题:
该问题由某客户提出,发生在 STM32F103VCT6 器件上。据其工程师讲述:其产品中设计中,用到了 STM32 的内部 RTC 功能,而 RTC 的时钟由 LSE 提供。在产品的小批量试产中,发现有个别产品开不了机。进一步测量发现,LSE 没有起振。
调研:
对有问题的产品重复测试,现象如其所述。通过运行测试程序发现,在使能 LSE 后长时间检测不到起振标志。检查 VDD、VDDA、VBAT、Vref+、Vref-、VSS、VSSA、NRST、BOOT0、BOOT1 等管脚的外部电路设计,未见异常。检查 LSE 外部电路设计,如图(一)所示:
满足技术文档中要求的指标,该设计是没有问题的。检查其 PCB 设计,如图(二):
相关的走线简短且有地包围,符合技术文档对 LSE 的布线的要求。检查测试的样品,发现其 PCB 外涂有电子绝缘胶,无法直接测量到 PCB 上的结点。清除 LSE 相关电路外的胶体,并使用乙醇清洗,然后用热风枪吹干。重新上电测试,发现 LSE 顺利起振。多次重复测试,结果相同。取另一个有问题的样品,清除相关区域的胶体后进行测试,仍 LSE 不能起振。再使用热风枪吹 30 秒以后测试,LSE 顺利起振。取多个有问题的样品,重复以上述处理及测试,结果完全一致。于是怀疑在涂胶前有水份凝结而造成漏电,从而导致 LSE 不起振。通过其工程师协调生产部门做一个实验批次,保证装配好的 PCB 在烘干作业完成后立刻进行涂胶作业。实验结果显示,仍有部分样品存在 LSE 不起振问题。于是同该电子缘胶的生产商联系,其技术人员提供了一个重要的信息,即:该胶在固化过程中会有少量的乙醇分子游离出来,通过严格的工艺流程可以减少乙醇分子的数量。而之前生产的几个批次的样机,在胶体固化时间上不符合胶厂给出的工艺要求。按照胶厂给定的工艺参数,重新生产一个试验批次的样机。测试结果表明,LSE 不起振的样机比率明显减少,但不能杜绝。由于胶体固化问题已超出了专业范围,无法进一步研究,于是建议其工程师更改电路设计,使用有源时钟代替 LSE,或者同胶厂进一步研究如何提高胶体的固化效果。其工程师选择了前者。
STM32的晶振问题
STM32有很多优点,但有两个我认为很大的缺点,第一个是定时器是16位而不是32位的,这个纯个人主观感觉的缺点.第二个就是大众都认为的缺点,那就是外接的那个用于RTC 的32768晶振,需要专用的6PF 负载晶振. 注意我说的是6PF 负载晶振,这个6PF 是晶振内部的负载电容,而不是晶振两只脚上并的电容.6pf 负载的晶振由于产量少,所以零售不单难买,价格也高.DX32板前期的晶振不是6PF 负载的.不过后期的已经全部更换为6P 负载.看到段话的时候,你板上的晶振已经是6PF 的了. 那么不用6pf 负载晶振的后果是什么呢?第一:RTC 时钟不准,第二:有可能不起震.这个才是最头大的问题,RTC 代码中,有一段是等待晶振起震的: //等待外部晶振震荡 需要等待比较长的时间 while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); 如果RTC 晶振不起震,那么用仿真器调试的时候就发现,程序停留在这里死等了,这时候你可以尝试用手摸摸那个32768,大多数都能成功起震J 其实要解决这个问题,也不是很难的,最简单的一种解决办法就是:往晶振两只脚上并一个2M-10M 的电阻.那么基本都可以起震了. 建议大家在真正的项目设计中,如果要用到RTC,还是尽量用官方要求的6PF 晶振吧.毕竟按官方的方法才是王道. 另外本目录下也附带了ST 官方的关于STM32晶振设计的问题.大家可以参考一下.里面的内容很深入. DX32文档1/1D X 32 白菜的心得
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32 RTC(实时时钟) 32.768kHz晶振起振指南
2013-04-28 14:10:21| 分类:软硬兼施|举报|字号订阅
STM32的RTC晶振经常出现不起振的问题,这已经是业界共识了。。。很多人在各种电子论坛上求助类似于“求高手指点!RTC晶振不起振怎么办”的问题,而其答案基本可以概括为“这次高手帮不了你了”
更有阴谋论者提出让人啼笑皆非的解释——STM32的RTC晶振不起振是ST与晶振厂商串通后故意搞出来的,目的是提高某晶振厂商高端晶振的销量。。。
最近做的几块板子也用到了STM32的RTC,前后两版一共做了大概6片,幸运的是并未遇到晶振不起振的现象。而我采用的是3毛钱一个的普通晶振,并未选用传说中低负载高精度晶振。。。后来在另外一片实验性质的板子上首次遇到了晶振不起振的问题,而且做了2片都不起振,这才让我意识到这个问题的严重性。
从上述现象来看,我认为对RTC晶振起振影响最大的因素应该是PCB的布线。但是遇到问题时通常是PCB已做好,甚至已经做了几百块,没有回头路了。于是大家更关注的问题似乎就是“如何补救”了。在网上搜索一下,你就会发现世界是如此美好!每个人的经验和建议都不一样,甚至是完全相反的!这种现象告诉我们,除了PCB布线,对晶振起振影响最大的似乎不是电气参数,而是另外一种不可忽略的因素——人品!
各种相互矛盾的经验也告诉我们,导致晶振不起振的原因是多种多样的,也是因“人”而异的。也许,我们无法找到一个绝对有效的经验一举解决STM32的RTC 晶振这个让人头疼的问题,但我们可以从各种经验中找到一些线索,为最终摸索到适合自己这块板子的解决方案提供一些帮助和提示。
如果晶振不起振,尤其是你已经使用了传说中的爱普生6pF晶振后还是不行,也许你应该尝试对以下几个方面排列组合,找到适合你这块板子的,更容易起振的方式。
下面就罗列一下可能影响RTC晶振起振的因素
1. 晶振的品牌和负载电容
大家貌似都知道要用6pF的晶振,但我发现其实12.5pF的也可以用。大家都说KDS日本原装的好,我那个3毛钱的国产晶振貌似也没啥大问题。。。
2. 晶振外接的匹配电容
有人说6pF的晶振要配6pF的电容。但有经验公式指出这个电容的值应该是晶振本身负载电容的两倍,6pF的晶振应该配10pF的匹配电容,当然12.5pF的就应该配20pF或者22pF的电容了~电容值不匹配可能造成晶振不起振。更神奇的是,有人指出去掉外接的匹配电容会使晶振起振!这似乎没啥道理,但在我的板子上,有且仅有这个方案是可行的!!!
3. 晶振并联的反馈电阻
晶振可以并联一个高阻值的电阻,据说这样更容易起振。。。这个电阻的阻值有人说是1MΩ,有人说是5MΩ,也有人说是10MΩ,,,当然也有人说不能并联这个电阻,并联了反而不起振
4. XTALout到晶振间串联电阻
这种做法是官方的应用笔记指出的,而且给出了这个电阻的计算公式。对这个电阻的的必要性也是众说纷纭,同样存在两种矛盾的说法,即必须要有这电阻,否则不起振。还有一说不能有这个电阻,否则不起振。。。从官方的应用笔记来看,这个电阻的主要作用是保护晶振,以防晶振发热。由此看来这个这个电阻似乎并非影响晶振起振的主要因素,甚至可能让晶振更难起振。
5. 晶振的外壳是否接地
这个就不用说了吧。。。晶振的外壳是金属的,做封装时可以把那个焊盘做成机械焊盘而悬空,也可以做成电气焊盘,然后连接到GND。对这个说法同样存在争议,有人说外壳必须接地,也有人说接地后反而不起振。
6. 提高Vbat引脚的电源质量
这种说法是有一定道理的,因为RTC部分是由Vbat的来供电的。有人说Vbat 引脚对电源质量要求比较高,如果纹波较大可能会影响晶振的起振。更有人说反而需要一些噪声,激励晶振产生正反馈从而顺利起振(本人对此表示呵呵)。。。但不管怎样,提高电源质量对大家都是好事~
7. 晶振周围的环境
有人指出应该仔细清洗RTC晶振周围的电路,甚至是使用环氧树脂胶将晶振密封起来。这种说法得到了圈内著名的“香水城”版主的支持,看来也是有相当多的事实依据。
8. 减少晶振焊接时加热的时间
有人认为长时间加热晶振进行焊接会对晶振本身带来影响,却不是彻底损坏晶振,从而使得晶振不容易起振。。。这种说法我没验证过,个人表示怀疑。。。
9. 焊接的焊锡量
这个种说法感觉就更不靠谱了,但真的有人在晶振引脚上多加了点焊锡晶振就能起振了。从原理上说,多加点焊锡确实会改变晶振和PCB间的寄生参数,但我感觉影响微乎其微。。。可能晶振已经徘徊在临界值的边缘了,这种做法才会起到一点作用。
10. 使用有源晶振
个人认为这是一劳永逸解决晶振不起振问题的不二法门!21IC的香水城版主对STM32的RTC晶振不易起振的原因做了一个解释,即出于低功耗的考虑,STM32对晶振的驱动功率比较低,所谓“好鼓不用重锤”,一些差的晶振就需要
更高的驱动功率,所以不易起振。我认为这种解释是有道理的。使用有源晶振则不存在驱动功率的问题,如果问题确实是因为驱动功率造成的,那使用有源晶振毫无疑问可以彻底解决问题。而且目前网上还没看到说有源晶振不起振的求助帖。但是有源晶振通常比较昂贵,甚至要比一颗外置的RTC芯片还要贵。至于这个问题的取舍,就要看各位看官自己的想法了。