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

关于STM32F进掉电中断的问题

[复制链接]
得蜜 发布时间:2009-2-9 15:34
原帖作者:tuoxie ' I  @+ d! O  F; c9 b: V

4 I5 u7 X& D' F/ z9 T1 l1 V3 a最近新使用STM32F101RC这款芯片开发产品。发现一掉电RTC就没了。芯片手册看了好几遍,厂家电话也打了无数个就是不知道为什么。Vbat这根线直连电池,示波器看了半天,掉电过程中Vbat上一点扰动都没有。后来还是俺们领导经验足,让直接拔Vdd上的电源,结果RTC存住了。试验时我用24V的开关电源给板子供电,24V电源掉电是个缓慢掉电的过程,我们感觉是缓慢掉电使芯片不稳定,丢失RTC
( F$ ~6 }$ T: A  K我把这个情况和厂家的技术支持赵工说了一下,这哥们人真不错。他说他也重现了这个现象,他发现进掉电中断后while(1),可以保持RTC不丢。接下来就是波澜壮阔的进PVD中断的过程。
! G& f0 r8 O; S感谢赵工的代码和本网站中几位兄弟的文章(这也是我开这个博的原因),很快找到了进中断的代码:3 X. A: e. f' w, C' s; ?4 M* z
  //==================PVD===================================
3 c: z/ T! F1 j+ [# P" b  EXTI_ClearITPendingBit(EXTI_Line16 );
' N! J6 ^4 c8 }( k4 [$ C% b  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;# L" T4 x6 H  z: X6 Q$ C4 T
  EXTI_InitStructure.EXTI_Line = EXTI_Line16;3 y# V. ]& Y" K% n8 B( s( S; w
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
5 K" f$ w- O5 I% S: j  EXTI_InitStructure.EXTI_LineCmd = ENABLE;/ G. O$ }) A1 r5 R0 o5 \* k/ A- G, l
  EXTI_Init(&EXTI_InitStructure);
. M" H3 C6 s7 w7 x1 |8 m  6 j1 K- i( C4 }
  NVIC_ClearIRQChannelPendingBit(PVD_IRQChannel);, v4 B2 l9 Z' p0 C' u
  NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQChannel;8 R/ {+ }: o# B" p, V2 w  p
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 8;& s8 D  b% }$ B% I6 d/ \
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;, u0 Y9 Y- H, h/ w, L9 A
  //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;; @+ v: e" k$ l& o1 ~* g6 i4 Z
  NVIC_Init(&NVIC_InitStructure);; x* H; x! H7 d. U
  PWR_PVDLevelConfig(PWR_PVDLevel_2V9);. F: }- z7 L$ V1 r
  PWR_PVDCmd(ENABLE);
/ o8 b0 x+ f9 o' k这里要多说一句,杠掉的代码有人加,有人不加,事实上不加也行的。不知道其中区别,请高人指教。0 E. H& _7 h+ J# D3 C
一试当然是没反应咯,从2.9V设到2.2V,连个毛都没有试出来。这掉电试验比较难做,插不了jtag,因为jtag会给芯片供电的,所以必须拔掉。瞪大着眼睛看LED,希望他亮一下,真的没有-_-。7 d, W5 S/ {. c" j2 D, J( L' F1 j
我决定看看寄存器里的东西对不对,真被我猜对了,PWR里面都没设进去,一查时钟忘记开了,所以RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);这句话不能忘记了。! W. P0 F% K- g$ d- Z. c2 Q
再一试,进去了!但是不是掉电,而是上电!只要PWR_PVDCmd(ENABLE);一完,立马进中断,但是掉电时不进。以为是中断没清,但是我真的清了。通过jtag一看,PVDO一直是1。难道Rising和Falling搞错了?我把电压在2.3V到3.3V瞎调,什么都没进去。没办法,再打电话给赵工,他说他那边都是正常的。只能自己死磕了。: w+ S! K. F- Z1 K2 R- `7 [
改成2.2V,没戏,2.8V,没戏,试个2.5V,有了!!再联系赵工,他说Vdda也参与比较的,一查我们的电路,Vdda连着稳压的2.5V……+ I" H. t  Z* i
但是,虽然PVD中断进去了,但是RTC还是丢失,我们把Vdda连接到3.3V后,设成2.9V,OK了。% i/ W/ ~" A% [) F3 k! q6 s+ m" n
总结一下:' c- D1 n/ ]- q4 C$ n
1、要确认寄存器是否写成功了,这芯片里面有好多时钟,用一个开一个,为了省电。但是我们的产品省Flash,省Ram,就是不用省电-_-
% T& }6 v% {, Q  _9 k' l" D2、Vdd和Vdda都要参与比较,这个居然忽视了,惭愧,惭愧9 g' N1 C! _6 V/ A
遗留问题:2 b% \% ^6 R; S' [
如果在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没有这个问题,跑得很好~
2 ^, A. _& E3 X前阵子看到有人想要掉电瞬间写flash的...真是够疯狂的...) \0 d0 Q. V8 _
这个不懂哈~等高手回答~
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:138 Q& T2 z2 D5 ]3 l9 ~  U
我的103ZET6的RTC没有这个问题,跑得很好~6 G  \  U4 `  t3 j5 [' g( _1 k
前阵子看到有人想要掉电瞬间写flash的...真是够疯狂的...
5 Z6 H" U9 q+ Y4 D' O: o这个不 ...
  @( X& b- m+ {$ Q, l7 Q
在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: M. \3 s# j" M% q* I
在PVD中断写Flash很正常,可以先在中断外擦除芯片,在中断里写就行了,Flash的操作大部分时间是在擦除上 ...

+ z5 u% P, E6 C  |“可以先在中断外擦除芯片” 请问这个怎么做的啊?
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版