STM32 RTC不起振分析
STM32常见问题解析(论文资料)
STM32常见问题解析1、时钟安全系统(CSS)时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,该中断被连接到Cortex‐M3的NMI的中断;同时CSS将内部RC振荡器切换为STM32的系统时钟源(对于STM32F103,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)。
操作流程:1)、启动时钟安全系统CSS: RCC_ClockSecuritySystemCmd(ENABLE); (NMI中断是不可屏蔽的!)2)外部振荡器失效时,产生NMI中断,对应的中断程序:void NMIException(void){if (RCC_GetITStatus(RCC_IT_CSS) != RESET){ // HSE、PLL已被禁止(但是PLL设置未变)…… // 客户添加相应的系统保护代码处// 下面为HSE恢复后的预设置代码RCC_HSEConfig(RCC_HSE_ON); // 使能HSERCC_ITConfig(RCC_IT_HSERDY, ENABLE); // 使能HSE就绪中断RCC_ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL就绪中断RCC_ClearITPendingBit(RCC_IT_CSS); // 清除时钟安全系统中断的挂起位// 至此,一旦HSE时钟恢复,将发生HSERDY中断,在RCC中断处理程序里, 系统时钟可以设置到以前的状态}}3)、在RCC的中断处理程序中,再对HSE和PLL进行相应的处理。
注意:一旦CSS被激活,当HSE时钟出现故障时将产生CSS中断,同时自动产生 NMI。
NMI 将被不断执行,直到CSS中断挂起位被清除。
因此,在NMI的处理程序中 必须通过设置时钟中断寄存器(RCC_CIR)里的CSSC位来清除CSS中断。
STM32单片机常见的工作异常现象分析及解决方案
STM32 单片机常见的工作异常现象分析及解决方案贴了两块样板,烧写同样的固件。
其中一块工作正常,但是另外一块出现了很奇怪的现象:在线调试正常;每次烧写完后工作正常;重新上电有时候工作正常,有时候工作不正常;工作不正常时,按下复位按键,恢复正常。
工作异常现象:main 函数中的系统运行指示灯不闪烁,但是初始化过程中点的一个灯是亮的!说明程序运行一段时间后,不工作了。
由于在线调试模式,板子工作正常,无法通过在线调试的方式判断程序运行的异常状态。
分析可能的原因:1、初始化过程中,程序陷入死循环。
但程序初始化过程中,没有while (1)死循环的代码。
2、板子上电后不断复位,导致无法进入main 函数中的while(1)循环。
问题查找:硬件:1、确认BOOT0 管脚接10kΩ欧电阻下拉到地;2、RC 上电延时复位电路中,R 为10kΩ,C 由0.1uF 改为10uF,现象依旧;3、MCU 3.3V 电源纹波很小,排除电源问题。
好像从硬件上查不出什幺问题。
只能从板子上唯一点亮的灯下手了。
软件:1、好像跟硬件复位没什幺关系,为了确认板子是不是在不停复位,在点亮的那个灯前加了100ms 延时,如果是在复位,那灯就应该不停闪烁。
但那个灯还一直是亮的,说明是程序运行出错,不运行了。
2.不断修改led 灯在初始化代码中的位置,最终定位到导致运行出错的代码:配置一个GPIO 为外部中断,跳变沿触发,上拉。
把上拉改为NOPULL,工作一切正常。
问题定位:配置为外部中断的GPIO 悬空导致。
之前工作正常的样板是一直有连接到那个IO 脚的外接模块,这个工作不正常的没有接,导致IO 管脚电平不确定。
由于电平的不确定,在初始化的瞬间有一个跳变沿,导致程序进入外部中断服务函数。
在中断服务函数中,要读取一个定时器的寄存器的值,但是要读取的定时器可能还没有完成初始化,导致读取失败,程序运行异常。
解决办法:1、PULL 模式有PULLRISING 改为NOPULL;2、timer 在这个外部中断之前进行初始化。
STM32的RTC晶振经常出现不起振的问题
各种相互矛盾的经验也告诉我们,导致晶振不起振的原因是多种多样的,也是因“人”而异的。也许,我们无法找到一个绝对有效的经验一举解决STM32的RTC晶振这个让人头疼的问题,但我们可以从各种经验中找到一些线索,为最终摸索到适合自己这块板子的解决方案提供一些帮助和提示。
如果晶振不起振,尤其是你已经使用了传说中的爱普生6pF晶振后还是不行,也许你应该尝试对以下几个方面排列晶振经常出现不起振的问题,这已经是“业界共识”了。。。很多人在各种电子论坛上求助类似于“求高手指点!RTC晶振不起振怎么办”的问题,而其答案基本可以概括为“这次高手帮不了你了”
更有阴谋论者提出让人啼笑皆非的解释——STM32的RTC晶振不起振是ST与晶振厂商串通后故意搞出来的,目的是提高某晶振厂商高端晶振的销量。。。
3. 晶振并联的反馈电阻
晶振可以并联一个高阻值的电阻,据说这样更容易起振。。。这个电阻的阻值有人说是1MΩ,有人说是5MΩ,也有人说是10MΩ,,,当然也有人说不能并联这个电阻,并联了反而不起振
4. XTALout到晶振间串联电阻
这种做法是官方的应用笔记指出的,而且给出了这个电阻的计算公式。对这个电阻的的必要性也是众说纷纭,同样存在两种矛盾的说法,即必须要有这电阻,否则不起振。还有一说不能有这个电阻,否则不起振。。。从官方的应用笔记来看,这个电阻的主要作用是保护晶振,以防晶振发热。由此看来这个这个电阻似乎并非影响晶振起振的主要因素,甚至可能让晶振更难起振。
最近做的几块板子也用到了STM32的RTC,前后两版一共做了大概6片,幸运的是并未遇到晶振不起振的现象。而我采用的是3毛钱一个的普通晶振,并未选用传说中低负载高精度晶振。。。后来在另外一片实验性质的板子上首次遇到了晶振不起振的问题,而且做了2片都不起振,这才让我意识到这个问题的严重性。
如何判断单片机是否起振,如何判断晶振的好坏?
如何判断单⽚机是否起振,如何判断晶振的好坏?晶振能否起振决定了单⽚机能否正常⼯作
单⽚机⼯作需要⼀个系统时钟,这个系统时钟可以是单⽚机内部的振荡器,也可以是外部的晶
振。
如果使⽤外部晶振作为单⽚机的系统时钟,必须要让晶振可靠、稳定的起振。
如何判断晶振是否起振?
判断晶振是否起压其实很简单,如果在程序仿真阶段,可以在程序中设计断点,检测程序有没
有正确的运⾏,如果晶振没有起振,程序是执⾏不了的。
也可以使⽤万⽤表测量晶振两个脚的电压,正常起振后,晶振两个引脚的电压相差不⼤,⼤约
为单⽚机⼯作电压的⼀半。
还可以⽤⽰波器来测量晶振两个引脚的波形,正常起振时,晶振的引脚会有规则的波形。
晶振为什么会不起振?
晶振不起振的原因有以下⼏个:
晶振质量不好,晶振坏了;这种情况⼀般很少,晶振的⽣产⼯艺已经很成熟。
⼯⽣⼯艺问题,晶振引脚假焊或者短路
Layout问题,如果设计有缺陷,⽣产的时候,可能导致部分产品晶振不起振。
在PCB Layout的
时候晶振需要尽量靠近单⽚机的晶振引脚
晶振的负载电容、负载电阻不匹配。
和晶振连接的两个⼩电容叫做负载电容,和晶振并联的电
阻叫做负载电阻。
如果负载电容或者负载电阻没有匹配好,也会导致不起振。
单片机不起振的原因
单片机不起振的原因以单片机不起振的原因为题目,我们需要从多个方面进行分析和探讨。
在单片机不起振的情况下,可能存在以下几个原因:1. 电源供电问题单片机启动需要稳定的电源供应。
如果电源电压不稳定或者电源接线不良,会导致单片机无法正常启动。
此时,我们可以通过检查电源电压是否正常以及检查电源接线是否牢固来解决问题。
2. 外部晶振问题单片机通常需要外部晶振来提供时钟信号。
如果外部晶振损坏或者连接不正确,将导致单片机无法起振。
此时,我们可以检查晶振是否损坏、晶振引脚是否连接正确以及晶振频率是否符合要求。
3. 复位电路问题单片机启动时,需要通过复位电路将单片机复位到初始状态。
如果复位电路存在问题,单片机无法正常启动。
我们可以检查复位电路的电源电压是否稳定、复位电路的元件是否损坏以及复位电路的接线是否正确。
4. 编程问题单片机不起振可能是由于程序存在问题。
我们可以检查程序是否正确、是否存在死循环或者逻辑错误等。
此外,还可以通过调试工具来查看单片机的运行状态,以便找出问题所在。
5. 硬件连接问题单片机启动还可能受到硬件连接问题的影响。
例如,如果单片机的引脚连接错误或者接触不良,将导致单片机无法正常启动。
在此情况下,我们需要检查硬件连接是否正确、引脚接触是否良好。
6. 其他原因除了以上几个常见原因外,单片机不起振还可能存在其他问题。
例如,单片机本身存在损坏或者是芯片供应商的问题等。
在这种情况下,我们可能需要更换单片机或者与芯片供应商联系解决问题。
单片机不起振可能存在多种原因,如电源供电问题、外部晶振问题、复位电路问题、编程问题、硬件连接问题以及其他原因。
正确排查和解决这些问题,可以使单片机正常起振并运行。
关于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了。
答:默认是用内部8M RC震荡的,你切换为PLL之后,才是使用8M倍频的,如果你注释掉Stm32_Clock_Init(9),那么代码也会跑,但是是用内部8M RC震荡。
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烧进程序后晶振不起振的原因有很多,可能是硬件设计问题、程序问题、软硬件结合问题,甚至是晶振质量问题。
在遇到这个问题时,我们需要全面排查,从多个可能性出发,逐一排除,才能找到最终的原因并解决问题。
个人观点和理解我个人认为,对于晶振不起振这个问题,我们不仅要学会排查和解决,更需要深入理解硬件和程序之间的关系,以及外部晶振对整个系统的重要性。
只有在全面理解的基础上,我们才能更好地解决类似的问题,并提高自己在嵌入式系统开发中的技术水平。
通过以上内容的深度探讨,相信您对STM32F103烧进程序后晶振不起振的问题有了更深入的理解。
STM32的晶振,时钟稳定性要重视!!!
STM32 的晶振,时钟稳定性要重视!!!
最近看了不少网上网友的应用案例,在STM32 晶振问题上不少都栽了跟头。
我自己也碰见过一次。
就是电容值搞错了。
ourdev 有网友说:他的设备隔几天系统就出问题,系统时钟变慢。
----------------------------------------有网友说:
国产的晶振,我们用在产品里吃过很多亏。
发出去几百个货(出厂都检验合格),
到客户那里几个有时就不起振了(几个月后),后来改用进口的,从此不出问题了。
哎!
---------------------------------------有网友说:
第一次遇到是忘了焊接22P 的电容,板子可以工作,但是运行速度慢,但是晶振起振了,
示波器看波形有刺,想必是STM32 认为外部晶振信号不好,。
stm32f103烧进程序后晶振不起振的原因
stm32f103烧进程序后晶振不起振的原因STM32F103是一款传统的32位微控制器,它具有丰富的外设和性能优势。
然而,有时在烧录程序后,晶振可能会无法起振,导致系统无法正常工作。
以下是可能导致这种情况的原因:1. 晶振频率选择不当:在使用STM32F103时,通常需要在程序中配置晶振的频率。
如果选择的频率与实际晶振的频率不匹配,晶振可能无法起振。
因此,在进行程序烧录之前,请确保正确配置晶振频率。
2. 硬件连接问题:晶振需要正确连接到STM32F103的晶振引脚(OSC_IN和OSC_OUT)。
任何连接问题,例如插头没有完全插好,引脚接触不良,都可能导致晶振无法起振。
因此,请检查晶振的连接并确保它与引脚正确连接。
3. 晶振损坏:如果晶振本身损坏或有其他问题,它可能无法起振。
这可能是由于电压波动、静电放电或长时间使用引起的。
如果怀疑晶振损坏,可以尝试更换一个新的晶振来排除故障。
4. 地线和电源问题:晶振的工作需要稳定的地线和电源。
如果地线或电源线存在问题,例如接触不良或电源噪音过大,晶振可能无法正常起振。
请确保地线和电源线的连接良好,并检查电源线上的噪音情况。
5. 程序错误:在某些情况下,由于程序编写错误或其他软件问题,晶振可能无法起振。
这可能是由于程序中的错误配置或特定代码导致的。
在这种情况下,请仔细检查程序代码,并确保没有任何错误或不正确的配置。
总结起来,当STM32F103在烧录程序后晶振不起振时,常见原因包括晶振频率选择不当、硬件连接问题、晶振损坏、地线和电源问题以及程序错误。
通过仔细检查和排除这些问题,可以解决晶振不起振的问题,并确保STM32F103正常工作。
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写保护。
第四步:读取RTC时间除了设置RTC时间外,还可以通过读取RTC_TR和RTC_DR寄存器来获取当前的RTC时间。
读取RTC时间的时候,同样需要先禁用RTC写保护,然后再进行读取操作。
完成读取后,需要重新启用RTC写保护。
第五步:使用闹钟功能RTC模块还支持闹钟功能,可以通过设置RTC_ALRMxR(x为1、2或3)寄存器来设置闹钟的时间和触发方式。
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。
STM32RTC对晶振的要求实在不地道
签名:
netjob 发表于 2008-8-20 22:30 ST MCU 9楼: 楼主,
看看 公版电路上的32768就是用4脚封装的那种 MC-306,而非AT-26 的,
我以前在ARM7/ARM9上都用MC-306,EPSON 的,感觉也差不多 的。 深圳华强一楼有好多的,找找吧。
ijk 发表于 2008-8-21 10:16 ST MCU 12楼: 32k晶振的价格
32k晶振的价格,在alibaba上面,有人报价甚至只有0.2元,不知道是真还是 假?
zhwxc 发表于 2008-8-21 10:17 ST MCU 13楼: 小东西小量采购就是麻烦
深圳买元件当然是方便啰,但是并不是所有的用户都在深圳。而且这种小东西采购不比芯片,有具体的公司和型号,比较方便异地采购。几毛钱的东西,量又不大时,实在是 比较麻烦。而且6p是商家说的,用户也没有办法验证。STM32最麻烦的就是12.5p的晶振也可以工作,但是出问题的几率大概在10%-20%左右,并不高,很可能通过了你的 出厂测试运行一段时间后突然出现问题。它要是12.5p根本不工作也好办。做产品的最怕的就是随机性的问题,特别是出现频率还不高的时候,往往要运行一段时间后才出问 题,这才是STM32的RTC最让人不放心的。
pheavecn 发表于 2008-9-2 20:48 ST MCU 16楼: 半导体工艺和晶体工艺还是完全不同吧?
一个是化学和光学,一个是纯机械加工。
armtft 发表于 2008-9-3 01:18 ST MCU 17楼: 与设计工程师探讨 了么?
香水城 发表于 2008-8-19 18:36 ST MCU ←返回版面 2楼: 谢谢楼主的意见 “帮助大晶振厂家形成垄断”之说不敢苟同,ST从来不会与任何厂家串通以图垄断之意。 至于这个限制的具体原因我不清楚,我估计应该是制造工艺问题,但我需要与设计工程师探讨之后才能有明确的 说法。
STM32晶振选型 晶振不起振 晶振及负载电容 晶振参数计算器
第一步:增益裕量(Gainmargin)计算π 3.14晶振手册:F=32768Hz C0=2pFCL=6pF ESR(R1)=50000ΩSTM32手册:gm=5μA/V(选择单位)gm单位:μA/V(Oscillator transconductance)mA/V结果:gmcrit= 5.420E-07=0.54204μA/Vgainmargin=9.22第二步:外部负载电容的计算Cs=3pF注:一般取2~75~6CL1=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构成了一个分压/滤波器,考虑通带宽度用电位器来代替RExt,RExt值可预设为CL2的位器的值即是CL2值。
t值对起振条件没有影响。
例如,RExt值的值。
晶振时振时不振问题的发生,分析和解决
晶振时振时不振问题的发生,分析和解决
晶振时振时不振问题是很多工程师们烦恼的事情了,今天松季电子特意为大家介绍分析晶振时振时不振问题的发生,分析和解决。
一、问题的发生
有许多工程师在遇到,晶振在电路板,一会儿起振,一会儿不起振,或用电吹风吹一下又可以正常工作等问题。
二、问题原因分析
如果遇到这种问题,首先要检测晶振的频率参数和晶振的电阻是不是在要求的范围内,如果是在要求的范围内;其次要检查晶振的焊接温度会不会高,造成晶振的第二次损坏,一般要求焊接的温度是在250度左右或更低,最高不要超过300°C。
如果这些都是在要求的范围内,那就要考虑是不是整个单片机电路的问题了。
三、问题如何解决
如果遇到这样的问题,检测晶振参数和调整焊接温度可以很容易做到,如果单片机电路的问题可以找方案商来解决,再则是看晶振有没有漏气,晶振在潮湿的天气情况下也会出现这种问题,这样就建议更换质量较好的晶振。
STM32新手常见的一个错误并给出解决方法
STM32新手常见的一个错误并给出解决方法在使用STM32微控制器进行开发时,新手常常会遇到一些常见的错误。
以下是一些常见错误以及对应的解决方法,帮助新手更好地克服这些问题。
1.芯片未正确连接:通常情况下,STM32芯片应与开发板正确连接。
新手可能会出现错误的连接方式,例如将芯片倒置或错位连接。
解决这个问题的方法是仔细查看芯片的引脚图并确保正确地连接所有的引脚。
2.引脚配置错误:STM32微控制器具有多功能引脚,可以根据需要进行不同功能的配置。
新手可能会错误地配置引脚,导致功能无法正常工作。
解决这个问题的方法是仔细阅读芯片的数据手册,以确定正确的引脚功能和配置设置。
3.时钟配置错误:STM32微控制器依赖于准确的时钟源以确保正常运行。
新手可能会忽视时钟配置,导致系统无法启动或无法正常工作。
解决这个问题的方法是仔细配置时钟源,并确保时钟频率与所需的系统时钟频率相匹配。
4.软件驱动错误:在使用STM32微控制器进行开发时,需要正确的软件驱动程序来控制硬件功能。
新手可能会遗漏或错误地使用关键的驱动程序,导致无法实现预期的功能。
解决这个问题的方法是仔细阅读相关的软件库文档,并确保正确使用所有必需的软件驱动程序。
5.中断配置错误:STM32微控制器支持多种中断,并需要正确配置以实现正确的中断处理。
新手可能会忽略或错误地配置中断,导致系统无法正确响应中断事件。
解决这个问题的方法是仔细阅读关于中断配置和处理的文档,并确保正确配置所有中断。
6.电源和电源管理问题:STM32微控制器需要稳定和适当的电源供应以确保正常运行。
新手可能会遇到电源不稳定或不足的问题,导致系统无法正常工作。
解决这个问题的方法是确保提供稳定的电源,并使用适当的电源管理技术,例如使用电容和稳压器等来提供稳定和适当的电源。
7.调试问题:在使用STM32微控制器进行开发时,调试是非常重要的。
新手可能会遇到调试问题,例如无法正确读取或显示调试信息。
晶振不起振的原因及解决方法
晶振不起振的原因及解决方法晶振不起振的原因分析:在检漏过程中,就是在酒精加压的环境下,晶体容易产生碰壳现象,即振动时芯片跟外壳容易相碰,从而晶体容易发生时振时不振或停振等不良现象;在压封时,晶体内部要求抽真空充氮气,如果发生压封不良,即晶体的密封性不好时,在酒精加压的条件下,其表现为漏气,漏气分为单漏及双漏,双漏会导致停振;由于芯片本身的厚度很薄,当激励功率过大时,会使内部石英芯片破损,也会导致停振;有功负载会降低Q值(即品质因素),从而使晶体的稳定性下降,容易受周边有源组件影响,处于不稳定状态,出现时振时不振现象;由于晶体在剪脚和焊锡的时候容易产生机械应力和热应力,而焊锡温度过高和作用时间太长都会影响到晶体,容易导致晶体处于临界状态,以至于出现时振时不振现象、甚至停振;在焊锡时,当锡丝透过线路板上小孔渗过,导致引脚跟外壳连接在一块,或是晶体在制造过程中,基座上引脚的锡点和外壳相连接发生单漏,都会造成短路,从而引起停振;当晶体频率发生频率漂移,且超出晶体频率偏差范围过多时,以至于捕捉不到晶体的中心频率,从而导致芯片不起振。
晶振不起振的解决方法:严格按照技术要求的规定,对石英晶体组件进行检漏试验以检查其密封性,及时处理不良品并分析原因;压封工序是将调好的谐振件在氮气保护中与外壳封装起来,以稳定石英晶体谐振器的电气性能。
在此工序应保持送料仓、压封仓和出料仓干净,压封仓要连续冲氮气,并在压封过程中注意焊头磨损情况及模具位置,电压、气压和氮气流量是否正常,否则及时处理。
其质量标准为:无伤痕、毛刺、顶坑、弯腿,压印对称不可歪斜。
由于石英晶体是被动组件,它是由IC提供适当的激励功率而正常工作的,因此,当激励功率过低时,晶体不易起振,过高时,便形成过激励,使石英芯片破损,引起停振。
所以,应提供适当的激励功率。
另外,有功负载会消耗一定的功率,从而降低晶体Q值,从而使晶体的稳定性下降,容易受周边有源组件影响,处于不稳定状态,出现时振时不振现象,所以,外加有功负载时,应匹配一个比较合适有功负载。
晶振不起振的原因是什么?这些解决办法要知道!
晶振不起振的原因是什么?这些解决办法要知道!其实对于晶振不起振的主要原因有很多,比如晶振损坏,晶振接头问题等等都是晶振不起振的原因的。
下面针对于晶振不起振的原因给大家详细的分享一些细节吧!只要大家了解这些细节也能够解决。
晶振不起振的原因一:设计原因设计原因一般很少出现,因为晶振公司在制作的晶振以后都是经过科学设计的。
当然也可能会有设计的原因,比如晶振焊盘太小,设计不合理,导致贴片机的放置偏移或不到位,焊盘太小,锡膏会少,焊接不可靠解决方法就是增加焊盘,这种原因很好解决的。
晶振不起振的原因二:电路原因晶振属于灵敏配件,若是晶振电路不合理,EMC干扰大,导致晶振收因晶振引脚产品感应电流大而烧毁,这也是很正常的,尤其是初次使用晶振的公司很容易会出现这样的原因。
由于公司的设计电路问题导致晶振烧毁,很正常。
这种方式常见的解决方法是在晶振引脚两端并联一个1M阻值的电阻,改变电路,就能够快速解决,具体要看实际情况而定,这里只是简单的判断。
晶振不起振的原因三:晶振旁路电容不匹配。
晶振的旁路电容可以帮助启动振荡,微调晶振的输出频率,一般在10~20PF左右。
但是,当芯片贴装过程中出现混频时,两个旁路电容之差较大,会导致晶振不振荡。
或者设计的旁路电容不合理,在边界参数时可能不振动。
晶振不起振的原因四:工作环境原因对于晶振的工作环境也是需要注意的,比如晶振温度过高时,容易造成晶振损坏。
解决方法是根据系统中各器件的温度要求,整理出合适的温度曲线文件。
晶振本身质量有问题,这种问题更容易出现在小品牌或者购买的拆解部件上。
当晶振量产过程中不良率较高时,可将损坏的晶振提供给供应商进行分析,并要求供应商提供8D报告。
找到问题点,进行整改控制。
总之,对于电子产品的外接芯片来说,若是技术不到位的话很容易出现问题,现在任何位置的芯片都有可能出现缺陷,尤其是二次焊接或者企业自己设计的电路,没有充足的经验很容易导致晶振不起振的,这种是晶振不起振的原因主要原因具体是什么原因要分析才知道。
关于STM32中RTC的校准方法
最近看了一些关于RTC校准的帖子,发现很多人存在疑惑。
正好最近我也在ST M32中实现了RTC校准。
发些心得。
这些对老手来说有些罗索,但对新手有益处。
实现RTC校准的核心之一是库文件Stm321f0x_bkp.c中的v oid B KP_Se tRTCC alibr ation Value (uin t8_tCalib ratio nValu e) 函数。
谈到RT C校准的相关参考文档包括AN2604.p df,AN2821.pdf和A N2821.zip。
这三个文档都可以从S TM32官方网站下载。
按照AN2604.pdf描述的原理,RTC的校准值应在0-127之间。
可实现的校准误差对应为0-121ppm。
相当于每30天跑快的秒数为0-314s。
这里应注意的一个关键问题是,RTC只能对跑快进行校准,不能对跑慢进行校准。
如果手表晶振的标称频率是32768Hz,设其可能的误差范围是±2Hz,则实际频率会在32766Hz-32770Hz之间。
如果RTC的内部分频系数设定为32768,则32768Hz是不需要校准的频率,32768Hz-32770Hz是可以校准的频率(最大校准能力大概是32772Hz)。
但是32766Hz-32768H z的跑慢频率段则无法实现校准。
为此,在推荐的校准方法中,使用32766代替32768作为分频系数。
这样一来,32766H z是不需要校准的频率,32766Hz-32770H z是可以校准的频率范围。
剩下的问题是,如何测量误差,并以此得出校准值。
一般来说有两种方法,一是测量Tamp erPin的频率值,然后计算p pm误差;二是实际运行一定的天数,与标准时钟做对比,先得到每30天跑快的秒数,然后计算pp m误差。
关于STM32使用RTC时复位后程序死在 RTC_WaitForSynchro() 函数中的问题
关于STM32使用RTC时复位后程序死在RTC_WaitForSynchro() 函数中的问题作者: 奔跑日期: 2012 年05 月14 日9,102 views 发表评论 (0) 查看评论出现的现象:使用野火的RTC例程,在软件仿真时如果不需要配置,则程序会死在RTC_WaitForSynchro() 函数中。
而下载到硬件上时,有时候可以跑,有时候也会在该函数中死循环。
可能的原因:首先,一定要确认是否使能了对后备寄存器和RTC的访问。
系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。
执行以下操作将使能对后备寄存器和RTC的访问:● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);● 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问PWR_BackupAccessCmd(ENABLE);另外还要使能RTC时钟RCC_RTCCLKCmd(ENABLE); 虽然该函数的说明中说只在RCC_RTCCLKConfig()函数调用之后才能调用,但是实际上如果不调用该函数,仿真时就会在RTC_WaitForSynchro() 函数中死循环,等待RTC时钟同步。
也就是说,不论是否需要配置RTC寄存器,每次系统复位都需要执行如下操作:RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);PWR_BackupAccessCmd(ENABLE);RCC_RTCCLKCmd(ENABLE);其次,STM32的RTC对外部LSE要求比较高,最好使用负载电容为6pF的晶振。
在芯片的DataSheet中有明确的说明,不能使用12.5pF的晶振。
关于STM32中RTC的校准方法
关于STM32中RTC的校准方法STM32微控制器系列中的RTC(Real-Time Clock,实时时钟)模块是一个用于提供实时时间和日期的硬件模块。
RTC的主要目的是在系统掉电后仍能持续运行并保持时间的准确性。
RTC的校准对于确保时间的准确性非常重要,特别是在长时间运行的应用中。
下面将介绍STM32中RTC的校准方法。
1.温度测量校准法(TM)RTC的精度受温度的影响,因此STM32的RTC模块提供了温度测量校准法来校准RTC的误差。
该方法需要在特定温度下测量RTC与基准时钟的误差,并将结果作为温度补偿参数存储在RTC寄存器中。
然后,STM32会使用这些参数来自动调整RTC的误差,并提供更准确的时间。
2.外部时钟校准法(EC)RTC模块可以通过外部时钟源进行校准。
在这种方法中,外部时钟源将与RTC的基准时钟进行比较,并通过调整RTC的预分频器和分频器参数来校准RTC的误差。
外部时钟源可以是一个精确的频率信号源,例如陶瓷谐振器或外部晶振。
3.自动校准调整法(ACA)STM32的RTC模块还提供了自动校准调整法。
该方法利用自带的时钟源对RTC进行周期性校准。
STM32会利用周期性的准确时间源与RTC进行比较,并通过调整RTC的预分频器和分频器参数来校准RTC的误差。
这种方法非常适用于长时间运行的应用,可以保持RTC的准确性。
除了上述方法外,还可以通过以下附加步骤来提高RTC的校准精度:1.外部参考时钟源:使用精确的外部参考时钟源,如GPS或网络时间协议(NTP),可以提供更准确的时间校准。
2.温度补偿:根据测量到的温度与RTC的准确度之间的关系,可以为RTC实现温度补偿。
这样,在温度变化时,RTC的准确度会得到调整。
3.周期性校准:定期进行RTC的校准,以确保其准确性。
可以根据应用的要求选择适当的校准时间间隔。
总结起来,STM32中RTC的校准方法包括温度测量校准法、外部时钟校准法和自动校准调整法。
- 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芯片还要贵。
至于这个问题的取舍,就要看各位看官自己的想法了。