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 认为外部晶振信号不好,。
- 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芯片还要贵。
至于这个问题的取舍,就要看各位看官自己的想法了。