打印

请教STM32 初始化 延时问题

[复制链接]
5608|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gf86530430|  楼主 | 2009-12-23 19:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32, rc, ce, TI, pi
请问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这里是否加上好些,还是根本就不要加延迟,我的程序哪里有问题?
沙发
gf86530430|  楼主 | 2009-12-23 19:10 | 只看该作者
自顶
在线等答复!!

使用特权

评论回复
板凳
hsbjb| | 2009-12-23 22:02 | 只看该作者
看样子楼主很急,帮不了你,等待高手

使用特权

评论回复
地板
gf86530430|  楼主 | 2009-12-24 09:04 | 只看该作者

感谢hsbjb的回复!

使用特权

评论回复
5
ST_ARM| | 2009-12-24 09:24 | 只看该作者
同样的程序在原来的板子上是好的,新板子上有问题,你还是应该在你的板子上找问题。

使用特权

评论回复
6
desert_hawk| | 2009-12-24 09:24 | 只看该作者
这个问题应该和STM32关系不大,而是FRAM的问题。FRAM在上电后也要进行一些内部初始化,所以在上电之后很快就对它进行操作,它可能还没有“准备好”,所以会出现有时出错的情况。一定延时之后,FRAM初始化完毕,再进行操作就不会错了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
gf86530430 + 1 谢谢
7
gf86530430|  楼主 | 2009-12-24 09:39 | 只看该作者
恩 desert_hawk 说的可能有道理
我查下相关FRAM资料看看

使用特权

评论回复
8
gf86530430|  楼主 | 2009-12-24 09:51 | 只看该作者
:)刚刚查了下FRAM手册这里的确有个第一次上电操作时间tPU 原文如下:

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

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

谢谢desert_hawk!!!
送分!

使用特权

评论回复
9
gf86530430|  楼主 | 2009-12-24 09:53 | 只看该作者
怎么没加上分呢?:o

使用特权

评论回复
10
desert_hawk| | 2009-12-24 09:54 | 只看该作者
楼主啊,你还没结贴呢,呵呵。这个帖子的50分也送我吧。

使用特权

评论回复
11
香水城| | 2009-12-24 10:02 | 只看该作者
楼主,你的问题还没有解决呢!!

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

请仔细检查一下,以解大家之惑。

使用特权

评论回复
12
desert_hawk| | 2009-12-24 10:07 | 只看该作者
这个问题应该和电路关系不大,估计是程序有区别,楼主以前的程序应该没有上电后就很快操作FRAM。

使用特权

评论回复
13
gf86530430|  楼主 | 2009-12-24 11:53 | 只看该作者
可能高兴的太早了,呵呵
好分析一下:
原来的板子我估计是晶振可能稳定性差点,
while (RCC_GetSYSCLKSource() != 0x08) {}
执行时候已经有了延时,所有后面可能无需延时就可以操作FRAM了
但是新版(其实晶振及FRAM这里并未改动,但是其他的I/O改动可能导致整体稳定性增强)可能是这方面好些,从而前面延时时间较短所以会出现FRAM上电tPU时间不够吧?
以上只是推测 ,还没想出来有什么好办法验证下!
(估计以前的板子也是在临界状态)

【注】程序老板子跟新板子是一样的。

使用特权

评论回复
14
香水城| | 2009-12-24 12:01 | 只看该作者
既然这样,你就在开始操作FRAM之前通过一个I/O口输出一个脉冲,用示波器观察VDD与这个脉冲的关系,这样就可以准确地知道从上电至开始操作FRAM时的时间,从而可以精确地知道是否确实是由于上电延迟的问题了。

使用特权

评论回复
15
desert_hawk| | 2009-12-24 12:38 | 只看该作者
也可能与器件开始工作的门限电压有关。如果STM32开始工作的门限电压低于FRAM,那么FRAM必定会晚于STM32开始工作,这时候电路板上的器件变化(耗电量的改变,滤波电容大小的改变)就会影响到电压上升的速度,也就会改变STM32和FRAM开始工作的时间差了。

使用特权

评论回复
16
gf86530430|  楼主 | 2009-12-24 13:03 | 只看该作者
本帖最后由 gf86530430 于 2009-12-24 13:05 编辑

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

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

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

使用特权

评论回复
17
gf86530430|  楼主 | 2009-12-24 13:07 | 只看该作者
本帖最后由 gf86530430 于 2009-12-24 13:09 编辑

之前的板子只能是说 稳定性不如我新板子,其它没找出原因!

使用特权

评论回复
18
desert_hawk| | 2009-12-24 13:25 | 只看该作者
刚才详细查了下,STM32上电后在电压大于2V的1-4.5ms之后开始工作,而FM25L256在上电后电压大于2.7V的10ms后才可以操作,如果楼主的新板子由于器件原因上电后电压上升较慢,就有可能出现此问题了。

使用特权

评论回复
19
gf86530430|  楼主 | 2009-12-24 16:39 | 只看该作者
恩 对的
好了 知道原因就好了,再次感谢 desert_hawk  香水城 等大侠的帮助!
结贴!

使用特权

评论回复
20
司徒老鹰| | 2009-12-24 19:13 | 只看该作者
学习到不少东西

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

50

帖子

1

粉丝