
原帖作者:tuoxie / ~7 _- l' x7 B4 l " I4 D6 ` ?) c 最近新使用STM32F101RC这款芯片开发产品。发现一掉电RTC就没了。芯片手册看了好几遍,厂家电话也打了无数个就是不知道为什么。Vbat这根线直连电池,示波器看了半天,掉电过程中Vbat上一点扰动都没有。后来还是俺们领导经验足,让直接拔Vdd上的电源,结果RTC存住了。试验时我用24V的开关电源给板子供电,24V电源掉电是个缓慢掉电的过程,我们感觉是缓慢掉电使芯片不稳定,丢失RTC 我把这个情况和厂家的技术支持赵工说了一下,这哥们人真不错。他说他也重现了这个现象,他发现进掉电中断后while(1),可以保持RTC不丢。接下来就是波澜壮阔的进PVD中断的过程。1 c, S3 j% R5 @$ F9 y0 P/ Q 感谢赵工的代码和本网站中几位兄弟的文章(这也是我开这个博的原因),很快找到了进中断的代码:/ U, a8 @" @ y3 c) _; p% C //==================PVD===================================9 N. C* r+ s* U- ], A$ R EXTI_ClearITPendingBit(EXTI_Line16 );3 a5 s# S5 M I0 t# D EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Line = EXTI_Line16; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;9 u9 F, Y. {7 J3 _! k; j EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_ClearIRQChannelPendingBit(PVD_IRQChannel);, r5 B T3 A$ a- j# I& u$ L NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQChannel;; T5 X0 s. n: T: F( H NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 8; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;7 Y! T3 p9 M) F1 _0 A. ? NVIC_Init(&NVIC_InitStructure); PWR_PVDLevelConfig(PWR_PVDLevel_2V9); PWR_PVDCmd(ENABLE); 这里要多说一句,杠掉的代码有人加,有人不加,事实上不加也行的。不知道其中区别,请高人指教。 一试当然是没反应咯,从2.9V设到2.2V,连个毛都没有试出来。这掉电试验比较难做,插不了jtag,因为jtag会给芯片供电的,所以必须拔掉。瞪大着眼睛看LED,希望他亮一下,真的没有-_-。 我决定看看寄存器里的东西对不对,真被我猜对了,PWR里面都没设进去,一查时钟忘记开了,所以RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);这句话不能忘记了。% }& {! V4 j! S 再一试,进去了!但是不是掉电,而是上电!只要PWR_PVDCmd(ENABLE);一完,立马进中断,但是掉电时不进。以为是中断没清,但是我真的清了。通过jtag一看,PVDO一直是1。难道Rising和Falling搞错了?我把电压在2.3V到3.3V瞎调,什么都没进去。没办法,再打电话给赵工,他说他那边都是正常的。只能自己死磕了。 改成2.2V,没戏,2.8V,没戏,试个2.5V,有了!!再联系赵工,他说Vdda也参与比较的,一查我们的电路,Vdda连着稳压的2.5V…… 但是,虽然PVD中断进去了,但是RTC还是丢失,我们把Vdda连接到3.3V后,设成2.9V,OK了。( N# ~* w3 N* [) k- D# z! K 总结一下: 1、要确认寄存器是否写成功了,这芯片里面有好多时钟,用一个开一个,为了省电。但是我们的产品省Flash,省Ram,就是不用省电-_-6 `$ _# R/ S% q9 L+ _ 2、Vdd和Vdda都要参与比较,这个居然忽视了,惭愧,惭愧$ v! h* s% G) A 遗留问题: 如果在2.5V才进PVD中断,RTC还是丢了;但是2.9V进PVD中断,RTC能保存。就是说2.9V到2.5V芯片有稳定到不稳定的过程。这个还不知道为什么,能不能通过软件方法搞定,要有请高人了。电压我用示波器看了一下,挺正常的,不能说瞬间掉电,但是也挺快的,要再研究研究 |
RE:关于STM32F进掉电中断的问题
前阵子看到有人想要掉电瞬间写flash的...真是够疯狂的...
这个不懂哈~等高手回答~
回复:关于STM32F进掉电中断的问题
在PVD中断写Flash很正常,可以先在中断外擦除芯片,在中断里写就行了,Flash的操作大部分时间是在擦除上,我试了一下擦除一页(大存储的2K)需要21.9ms,然而写100个半字节数据只需5~6ms。在供电处接个电容就OK了
“可以先在中断外擦除芯片” 请问这个怎么做的啊?