STM32 bkp掉电数据丢失
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 bkp掉电数据丢失相关的知识,希望对你有一定的参考价值。
初始化很简单。但掉电后数据丢失。怎么回事呢?
void BKPreg_Configuration(void)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Enable write access to Backup domain */
PWR_BackupAccessCmd(ENABLE);
/* Clear Tamper pin Event(TE) pending flag */
BKP_ClearFlag();
备用电池有加的
*(__IO uint32_t *) (BKPSRAM_BASE + offset) = 要保存的参数;
其中BKPSRAM_BASE为backup SRAM的基地址,offset为偏移量。 参考技术A 这个掉电肯定要丢数据的, 加一颗纽扣电池吧.追问
纽扣电池有的
STM32 RTC BKP备份数据区数据丢失问题的讨论
关于RTC备份数据区数据丢失问题的讨论
作者:时间:2016-12-02来源:网络收藏
问:最近在使用STM32F103RB时,出现了断电后再上电时备份数据区数据丢失的现象,不知道是什么原因,最初在设计的时候芯片核的电源(数字部分电源)和ADC的电源是相连的,备份数据区的数据没有丢失,现在将ADC的电源单独采用一个电压基准芯片供电后,断电再上电发现备份数据区的数据丢失了,全部为0包括时间。如果我将现在的电路板的ADC电源链接到数字电源上,数据就不丢失了。为提高ADC精度,又不丢失备份数据区数据,哪位仁兄有好的建议,感谢!!
答:在断电时,请保证同时切断VDD和VDDA 请用示波器看看,怀疑断电时你的VDDA下降的太慢,而VDD很快消失。在断电时,应该保证同时切断VDD和VDDA。
问:RTC备份数据区与ADC电源关系???不管是VDDA下降慢,还是VDD下降慢,我认为这个芯片的工作与否不应该受VddA的影响,如果说备份电池数据受VDDA的影响的话,应该在手册中有说明,我还认为当不使用ADC时我们可以不给ADC供电,为什么说呢,当模拟、数字电路分离时,模拟电源可能故障失电,数字部分存在电源,当然正常工作的CPU可以通过程序检查到ADC部分出错,现在根据实验发现,ADC失电后芯片根本不工作。如果说一定要同时切断电源的话就必须连接到同一电源上,要不肯定丢数据呀,香主你说呢。
香主分析的对,但是我就是不明白VDDA必须要先断电,这是为什么呢。我总是认为这个问题不应该出现,至少我认为VDDA自然为独立电源引脚,为什么内核工作受VDDA的影响呢?
答:RTC备份数据区与ADC电源关系,以及VDD与VDDA的关系最近正在翻译大容量的STM32F103数据手册,正好供电部分的说明与中等容量STM32F103说明一样,下面贴图中的2.3.11节与STM32F103RB数据手册中的2.3.9节内容相同,你可以对照着看:
从关于VDDA的说明中可以看到,VDDA不单是为ADC供电,它为所有的模拟部分供电,特别是复位模块,这就回答了你的“不使用ADC时我们可以不给ADC供电”这个问题。关于VBAT部分说明了当关闭VDD时,通过内部电源切换器,VBAT为RTC、外部32kHz振荡器和后备寄存器供电。这里说的内部电源切换器就是下图中靠近VBAT的“供电开关”,下面这张图就是上面贴图中提到的图12:
这张图中没有说明这个供电开关是由哪个电源控制,但从图上看可以认为是VDD控制。
关于你的问题(包括在前面提的问题),我是这样分析的:VDD先掉电,在VDDA还没有完全掉电时,因为内部漏电流,上述供电开关并没有切换到 VBAT,而此时VDD已经消失,造成RTC内容丢失。正因为如此,数据手册上才会要求VDD应与VDDA同源,同时他们之间的电压差不能超过 300mV。
如果这个供电开关是由VDDA控制,那么你看到的现象就是显而易见了。不过这一点我需要确认。
再答:"AN2586-STM32F10xxx硬件开发入门"中说明:供电开关由PDR控制在应用笔记《AN2586-STM32F10xxx硬件开发入门》中,我找到了上面所提到的供电开关是由VDDA控制的清楚说明。
这里是有关部分截图,这个文档的中文译文在STMCU中文网页上:
文中红线划出的部分写明:VBAT的开关由复位模块内的掉电复位(PDR)电路控制。再根据上面提到的部分,复位模块由VDDA供电。所以当VDDA晚于VDD调电时,VBAT的开关还没有切换到VBAT,VDD已经消失了,RTC的内容自然也就消失了。
关于前面提到的多电源问题,手册上已经明确写明,VDD必须与VDDA同源,所以不应理解为是多电源供电。
至于VBAT缺失和电池没有电是2个问题,VBAT缺失的情况时,电路上有相应处理,所以不会有问题;而电池没有电的情况下,并不表示VBAT信号悬空,此时VBAT是通过电池接地,也不会有问题,只不过RTC的内容不能继续维持。电池没有电时好像应该是等效于一个电容加一个电阻,具体什么样的参数我不太清楚,但我可以肯定不是一个无穷大的电阻。
问:现在看来对于STM32的设计那是相当的不一样,大家以后设计的时候不要想当然,一定要仔细阅读说明文档的每个细节,要不,设计会走弯路,当然也会带来一个麻烦就是不同用途的地方很多要求不一样,我从来都不会想象到PLL会挂在VDDA上,常理上PLL电路应该属于数字部分。可偏偏挂在了 VDDA上。
由于Vdd的电压不稳定,在大量的IO来回动作的情况下,VDD的电压极度不稳定,当然如果VddA也连接到VDD的话,对于48脚和64脚封装的芯片来讲Vdda连接到VDD对于要求高精度的应用来讲,这个应该是不充许的,我使用的就是103VB,如果将VDDA连接到VDD,此时的AD采样误差明显低于VDDA与VDD分离的误差,我将VDDA连接到一个3.3V的参考电压芯片上了。一般的芯片VDDA和VDD都是可以分离供电的,至少我看见过的,ST的除外。
第三者答:PLL电路似乎不可能是纯数字电路,至少VCO应该用模拟电路。
以上是关于STM32 bkp掉电数据丢失的主要内容,如果未能解决你的问题,请参考以下文章