请教STM32初始化延时问题

yutingchenghong   2009-12-23 19:07 楼主
请问STM32初始化告诉晶振判断稳定后完,I/O,TIM,USART初始化后,
进入应用前时候要不要加入delay?

我测得的现象是这样的,

上电!
_BSP_IntInit();
_RCC_DeInit();
。。。。。。。。。
。。。。。。。
_RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
_while (RCC_GetSYSCLKSource() != 0x08) {}

(1)

_I/O,SPI,USART,初始化函数
{}

_调用SPI读FRAM程序。
{}

【注】如果(1)处不加延时则,读取FRAM不稳定,有时候对有时候错,如果加入则没问题我这里实验的是加入100MS软件延时就不会出现读写错误。

请问:我原来的板子没加延时没返现这个问题,现在的板子跟原来的电路没什么区别,但是却出现了这个问题,不知道为什么,对于STM32这里是否加上好些,还是根本就不要加延迟,我的程序哪里有问题?

回复评论 (18)

自顶
在线等答复!!
点赞  2009-12-23 19:10
                                 看样子楼主很急,帮不了你,等待高手
点赞  2009-12-23 22:02

感谢hsbjb的回复!
点赞  2009-12-24 09:04
                                 同样的程序在原来的板子上是好的,新板子上有问题,你还是应该在你的板子上找问题。
点赞  2009-12-24 09:24
                                 这个问题应该和STM32关系不大,而是FRAM的问题。FRAM在上电后也要进行一些内部初始化,所以在上电之后很快就对它进行操作,它可能还没有“准备好”,所以会出现有时出错的情况。一定延时之后,FRAM初始化完毕,再进行操作就不会错了。
点赞  2009-12-24 09:24
刚刚查了下FRAM手册这里的确有个第一次上电操作时间tPU 原文如下:

//6.2. 首次访问时上电
//用户在FM25L256B 上电时间超过10ms 之后才可以访问它。用户必须遵守时序参数
//t PU ,这是从V DD (最小值)到第一次访问开始的最小时间。

我试过延时10m这个最小值可能不行,20ms就没问题了。

谢谢desert_hawk!!!
送分!
点赞  2009-12-24 09:51
                                 怎么没加上分呢?
点赞  2009-12-24 09:53
                                 楼主啊,你还没结贴呢,呵呵。这个帖子的50分也送我吧。
点赞  2009-12-24 09:54
楼主,你的问题还没有解决呢!!

你说过“我原来的板子没加延时没返现这个问题,现在的板子跟原来的电路没什么区别”,就是这一点误导了所有人(包括你)的判断,既然现在加延时可以解决,那么原来的板子没有延时却没有问题,这该怎么解释呢?难道真的是电路没有区别吗?

请仔细检查一下,以解大家之惑。
点赞  2009-12-24 10:02
                                 这个问题应该和电路关系不大,估计是程序有区别,楼主以前的程序应该没有上电后就很快操作FRAM。
点赞  2009-12-24 10:07
可能高兴的太早了,呵呵
好分析一下:
原来的板子我估计是晶振可能稳定性差点,
while (RCC_GetSYSCLKSource() != 0x08) {}
执行时候已经有了延时,所有后面可能无需延时就可以操作FRAM了
但是新版(其实晶振及FRAM这里并未改动,但是其他的I/O改动可能导致整体稳定性增强)可能是这方面好些,从而前面延时时间较短所以会出现FRAM上电tPU时间不够吧?
以上只是推测 ,还没想出来有什么好办法验证下!
(估计以前的板子也是在临界状态)

【注】程序老板子跟新板子是一样的。
点赞  2009-12-24 11:53
                                 既然这样,你就在开始操作FRAM之前通过一个I/O口输出一个脉冲,用示波器观察VDD与这个脉冲的关系,这样就可以准确地知道从上电至开始操作FRAM时的时间,从而可以精确地知道是否确实是由于上电延迟的问题了。
点赞  2009-12-24 12:01
                                 也可能与器件开始工作的门限电压有关。如果STM32开始工作的门限电压低于FRAM,那么FRAM必定会晚于STM32开始工作,这时候电路板上的器件变化(耗电量的改变,滤波电容大小的改变)就会影响到电压上升的速度,也就会改变STM32和FRAM开始工作的时间差了。
点赞  2009-12-24 12:38


还有个情况也说下,也能说明是电压刚上电不稳的情况
就是我用JLINK仿真器仿真,无需加延时也OK。拿下仿真器重新上电不加延时就不行。

基于以上我分析是由于加入仿真器,程序是由仿真器控制的程序运行及复位过程,在这之前板子早已上电所以
FRAM有足够时间来稳定。
为了验证我的分析,我又将板子单独供电运行(脱离仿真器)
发现不加延时不行,但是在经过我手动复位后发现可以正常运行。
OK,得出结论,还是因为刚上电瞬间FRAM的tUP时间不够导致的 FRAM读写操作失败!!!

因为我的示波器只有一个探头,所以无法捕捉上电瞬间VDD与 FRAM之间的关系。
不过我相信以上的两个实验足以证明了我的推断!
点赞  2009-12-24 13:03


之前的板子只能是说 稳定性不如我新板子,其它没找出原因!
点赞  2009-12-24 13:07
                                 刚才详细查了下,STM32上电后在电压大于2V的1-4.5ms之后开始工作,而FM25L256在上电后电压大于2.7V的10ms后才可以操作,如果楼主的新板子由于器件原因上电后电压上升较慢,就有可能出现此问题了。
点赞  2009-12-24 13:25
恩 对的
好了 知道原因就好了,再次感谢 desert_hawk  香水城 等大侠的帮助!
结贴!
点赞  2009-12-24 16:39
                                 学习到不少东西
点赞  2009-12-24 19:13
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复