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

关于STM32F进掉电中断的问题

[复制链接]
得蜜 发布时间:2009-2-9 15:34
原帖作者:tuoxie

最近新使用STM32F101RC这款芯片开发产品。发现一掉电RTC就没了。芯片手册看了好几遍,厂家电话也打了无数个就是不知道为什么。Vbat这根线直连电池,示波器看了半天,掉电过程中Vbat上一点扰动都没有。后来还是俺们领导经验足,让直接拔Vdd上的电源,结果RTC存住了。试验时我用24V的开关电源给板子供电,24V电源掉电是个缓慢掉电的过程,我们感觉是缓慢掉电使芯片不稳定,丢失RTC
我把这个情况和厂家的技术支持赵工说了一下,这哥们人真不错。他说他也重现了这个现象,他发现进掉电中断后while(1),可以保持RTC不丢。接下来就是波澜壮阔的进PVD中断的过程。
感谢赵工的代码和本网站中几位兄弟的文章(这也是我开这个博的原因),很快找到了进中断的代码:
  //==================PVD===================================
  EXTI_ClearITPendingBit(EXTI_Line16 );
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Line = EXTI_Line16;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  
  NVIC_ClearIRQChannelPendingBit(PVD_IRQChannel);
  NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 8;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  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);这句话不能忘记了。
再一试,进去了!但是不是掉电,而是上电!只要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了。
总结一下:
1、要确认寄存器是否写成功了,这芯片里面有好多时钟,用一个开一个,为了省电。但是我们的产品省Flash,省Ram,就是不用省电-_-
2、Vdd和Vdda都要参与比较,这个居然忽视了,惭愧,惭愧
遗留问题:
如果在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没有这个问题,跑得很好~
前阵子看到有人想要掉电瞬间写flash的...真是够疯狂的...
这个不懂哈~等高手回答~
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
我的103ZET6的RTC没有这个问题,跑得很好~
前阵子看到有人想要掉电瞬间写flash的...真是够疯狂的...
这个不 ...

在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
在PVD中断写Flash很正常,可以先在中断外擦除芯片,在中断里写就行了,Flash的操作大部分时间是在擦除上 ...

“可以先在中断外擦除芯片” 请问这个怎么做的啊?

所属标签

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