你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32F进掉电中断的问题

[复制链接]
得蜜 发布时间:2009-2-9 15:34
原帖作者:tuoxie / ~7 _- l' x7 B4 l
" I4 D6 `  ?) c
最近新使用STM32F101RC这款芯片开发产品。发现一掉电RTC就没了。芯片手册看了好几遍,厂家电话也打了无数个就是不知道为什么。Vbat这根线直连电池,示波器看了半天,掉电过程中Vbat上一点扰动都没有。后来还是俺们领导经验足,让直接拔Vdd上的电源,结果RTC存住了。试验时我用24V的开关电源给板子供电,24V电源掉电是个缓慢掉电的过程,我们感觉是缓慢掉电使芯片不稳定,丢失RTC
; k, \4 I, l& K3 B3 n我把这个情况和厂家的技术支持赵工说了一下,这哥们人真不错。他说他也重现了这个现象,他发现进掉电中断后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;
6 R" ^( W$ T9 \, S0 J( z4 g  EXTI_InitStructure.EXTI_Line = EXTI_Line16;
- U; p" s2 Q1 M# c  G% Y- H  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;9 u9 F, Y. {7 J3 _! k; j
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
9 }' \) S7 Q+ ~+ ?8 I8 ?  EXTI_Init(&EXTI_InitStructure);
6 \+ t4 |, g) ]+ [  
# @  b; T/ J, z' a% U  K  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;
) ^5 l- U% K2 E  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
: E3 e. k2 h* H9 r1 G& m2 A+ f  //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;7 Y! T3 p9 M) F1 _0 A. ?
  NVIC_Init(&NVIC_InitStructure);
4 W' x, V1 J% o# {3 G+ j  PWR_PVDLevelConfig(PWR_PVDLevel_2V9);
* A6 r. }& P0 X) [0 W8 C  PWR_PVDCmd(ENABLE);
( a# o! W" j6 v: h  Y$ x+ l这里要多说一句,杠掉的代码有人加,有人不加,事实上不加也行的。不知道其中区别,请高人指教。
" b8 Z; U9 l! p一试当然是没反应咯,从2.9V设到2.2V,连个毛都没有试出来。这掉电试验比较难做,插不了jtag,因为jtag会给芯片供电的,所以必须拔掉。瞪大着眼睛看LED,希望他亮一下,真的没有-_-。
0 x# h1 m5 e3 z2 A9 A1 O7 Z$ N我决定看看寄存器里的东西对不对,真被我猜对了,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瞎调,什么都没进去。没办法,再打电话给赵工,他说他那边都是正常的。只能自己死磕了。
: ?  k! g9 l$ F* b改成2.2V,没戏,2.8V,没戏,试个2.5V,有了!!再联系赵工,他说Vdda也参与比较的,一查我们的电路,Vdda连着稳压的2.5V……
5 p( i4 d! X7 |! J. V但是,虽然PVD中断进去了,但是RTC还是丢失,我们把Vdda连接到3.3V后,设成2.9V,OK了。( N# ~* w3 N* [) k- D# z! K
总结一下:
" A7 `) H5 x5 W7 i1、要确认寄存器是否写成功了,这芯片里面有好多时钟,用一个开一个,为了省电。但是我们的产品省Flash,省Ram,就是不用省电-_-6 `$ _# R/ S% q9 L+ _
2、Vdd和Vdda都要参与比较,这个居然忽视了,惭愧,惭愧$ v! h* s% G) A
遗留问题:
* Z& `4 J# E! f+ N1 Q如果在2.5V才进PVD中断,RTC还是丢了;但是2.9V进PVD中断,RTC能保存。就是说2.9V到2.5V芯片有稳定到不稳定的过程。这个还不知道为什么,能不能通过软件方法搞定,要有请高人了。电压我用示波器看了一下,挺正常的,不能说瞬间掉电,但是也挺快的,要再研究研究
收藏 1 评论6 发布时间:2009-2-9 15:34

举报

6个回答
wolaiye945 回答时间:2009-2-9 22:13:45

RE:关于STM32F进掉电中断的问题

我的103ZET6的RTC没有这个问题,跑得很好~
3 m1 b- {+ }) {8 V& ]. A0 F前阵子看到有人想要掉电瞬间写flash的...真是够疯狂的...
1 A' G" d+ D9 w/ ]# T' C这个不懂哈~等高手回答~
21ele 回答时间:2009-6-25 11:14:18

回复:关于STM32F进掉电中断的问题

1000uF电容,PVD检测,掉电瞬间写FLASH,没有问题,我写了几十个字节数据,时间很充裕。
晴天-380557 回答时间:2015-9-22 11:47:47
学习了
那就地方 回答时间:2015-9-22 13:32:51
wolaiye945 发表于 2009-2-9 22:13
6 w5 o/ I% e  n$ z4 B0 Y# U1 \5 `我的103ZET6的RTC没有这个问题,跑得很好~9 X3 U2 |; F0 o+ D
前阵子看到有人想要掉电瞬间写flash的...真是够疯狂的...6 d% G- ~/ G+ B  X7 a
这个不 ...

8 P6 ^. I2 G5 I% T4 h在PVD中断写Flash很正常,可以先在中断外擦除芯片,在中断里写就行了,Flash的操作大部分时间是在擦除上,我试了一下擦除一页(大存储的2K)需要21.9ms,然而写100个半字节数据只需5~6ms。在供电处接个电容就OK了
jorry 回答时间:2017-4-23 22:26:22
学习了!!!
耿少侠 回答时间:2020-12-30 16:49:59
那就地方iv 发表于 2015-9-22 13:32
5 C# e% e# c3 v, K( L在PVD中断写Flash很正常,可以先在中断外擦除芯片,在中断里写就行了,Flash的操作大部分时间是在擦除上 ...
, m9 G% w  M, a
“可以先在中断外擦除芯片” 请问这个怎么做的啊?

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版