stm32f303 上电运行程序运行不正常,手动复位后程序正常运行

孤傲猎人 2016-02-28 10:44:37
自己设计焊的板子,stm32f303 ,上电运行程序不正常(程序全跑乱了),手动复位后程序就可以正常运行,请教各位这是什么原因导致的,该怎么解决呢?谢谢各位!!
...全文
2917 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨雨不怕雨 2019-04-23
  • 打赏
  • 举报
回复 1
前两天遇到类似问题 。采用了楼主的解决方法正常运行了,后来仔细思考了一下原因。 出现这种情况的原因可能是因为stm32上电比较快,而外设上电比较慢。stm32外设初始化函数运行的时候,外设还没上电好,因为相当于没初始化,导致程序异常。 新的解决方法:在外设初始化函数前加一个延时,等待外设上电成功。程序正常工作
孤傲猎人 2016-03-07
  • 打赏
  • 举报
回复
引用 11 楼 C_Rabbit 的回复:
[quote=引用 10 楼 u014393080 的回复:] 回复#6楼。。手动复位之后就一切正常了,数据返回的速率也是正常的。程序中一个子函数,是将采回的心电数据滤波打包的 stm32是通过SPI实现对ADS1292的控制和数据传输。返回的每个数据包格式都是正确的,每个数据包的数据量和包头都是对的,就是里面的心电数据是错的,也就是main函数运行是正常的。设定的采样频率是125Hz,但是通过SPI中断得到的心电数据量比采样频率要大,从而导致了数据传输的速率很快。我猜测是ADS1292没能正常工作,但同时SPI中断都是有的,但为什么手动复位stm32,就正常了,郁闷中啊
既然这样,有个比较简单的排除故障的方法。直接把STM32的通讯动作停止,然后用逻辑分析仪控制ADS1292进行工作,看返回数据 或者断开ADS1292的引脚,或者干脆另外找一块空板,直接用逻辑分析仪分析STM32的SPI输出是否正常 目前来看,这两边必有一个是会出问题的,确定了问题点再考虑接下来怎么做[/quote] 具体的原因我也没找到,但是我取了个巧,因为手动复位后运行就正常了,所以我在程序的开始加了一个软件中断,这个软件中断只执行一次,这样就可以正常运行了,不足之处就是需要发送两次开始指令,不过功能上可以实现了。
C_Rabbit 2016-02-29
  • 打赏
  • 举报
回复
刚刚看到另一个问题了,现在这个情况,恐怕你需要用逻辑分析仪或者示波器直接监测检测回来的信号是什么样子的啦 最好是把你的启动代码发出来看一看,就目前的描述大概应该是启动时频率设置有问题,另外需要确认一下手工复位后就一切正常了吗?还是数据正常了,但返回的速率仍不正常?
C_Rabbit 2016-02-29
  • 打赏
  • 举报
回复
stm32系列的复位后处理应该都是一致的,所以手动复位会恢复正常这个就比较奇怪 “每次关掉电源再打开,返回的数据都是错的,而且数据返回的速度非常快,比设置的采样频率要快不少,改变采样频率,数据返回的速度不变,但是依然很快” 这里的说法直觉看上去和晶振频率有关,那么需要先确认一下,使用的是外部晶振还是内部晶振?如果使用了外部晶振,那上电启动过程中晶振的切换过程是否正常?
C_Rabbit 2016-02-29
  • 打赏
  • 举报
回复
补充一点,我使用stm32f10x系列的时候,一般都是使用库函数来做上电启动过程的,比较少出问题,建议如果你是用寄存器操作的方式来上电启动的话,可以试试改用库函数
孤傲猎人 2016-02-29
  • 打赏
  • 举报
回复
每次上电都不正常,实现的是用stm32f303控制ADS1292采集心电信号,,再通过蓝牙把数据传输到PC端。每次关掉电源再打开,返回的数据都是错的,而且数据返回的速度非常快,比设置的采样频率要快不少,改变采样频率,数据返回的速度不变,但是依然很快。如果手动复位一次,这时候程序运行就正常了,数据是正确的,返回速率和采样频率一致
fly 100% 2016-02-29
  • 打赏
  • 举报
回复
感觉是上电之后运行状态不对
C_Rabbit 2016-02-29
  • 打赏
  • 举报
回复
引用 10 楼 u014393080 的回复:
回复#6楼。。手动复位之后就一切正常了,数据返回的速率也是正常的。程序中一个子函数,是将采回的心电数据滤波打包的 stm32是通过SPI实现对ADS1292的控制和数据传输。返回的每个数据包格式都是正确的,每个数据包的数据量和包头都是对的,就是里面的心电数据是错的,也就是main函数运行是正常的。设定的采样频率是125Hz,但是通过SPI中断得到的心电数据量比采样频率要大,从而导致了数据传输的速率很快。我猜测是ADS1292没能正常工作,但同时SPI中断都是有的,但为什么手动复位stm32,就正常了,郁闷中啊
既然这样,有个比较简单的排除故障的方法。直接把STM32的通讯动作停止,然后用逻辑分析仪控制ADS1292进行工作,看返回数据 或者断开ADS1292的引脚,或者干脆另外找一块空板,直接用逻辑分析仪分析STM32的SPI输出是否正常 目前来看,这两边必有一个是会出问题的,确定了问题点再考虑接下来怎么做
孤傲猎人 2016-02-29
  • 打赏
  • 举报
回复
回复#6楼。。手动复位之后就一切正常了,数据返回的速率也是正常的。程序中一个子函数,是将采回的心电数据滤波打包的 stm32是通过SPI实现对ADS1292的控制和数据传输。返回的每个数据包格式都是正确的,每个数据包的数据量和包头都是对的,就是里面的心电数据是错的,也就是main函数运行是正常的。设定的采样频率是125Hz,但是通过SPI中断得到的心电数据量比采样频率要大,从而导致了数据传输的速率很快。我猜测是ADS1292没能正常工作,但同时SPI中断都是有的,但为什么手动复位stm32,就正常了,郁闷中啊
孤傲猎人 2016-02-29
  • 打赏
  • 举报
回复
复位电路的电阻和电容我试过,电阻100K和10K都不行,电容之前用的是0.1uf,换成4.7uf也不行
花开花落_fzu 2016-02-29
  • 打赏
  • 举报
回复
检查复位电路中的电阻和电容
孤傲猎人 2016-02-28
  • 打赏
  • 举报
回复
我猜测是不是一开始上电复位没有执行好,导致运行不正常
C_Rabbit 2016-02-28
  • 打赏
  • 举报
回复
给的信息太少了 具体症状再多描述些吧,是每次上电都不正常吗,还是偶尔有一次 其次你怎么知道是跑乱了的,是在仿真界面看的吗?如果是仿真出问题,复位自己跑就正常,那就要看一下仿真的频率设置是否正确

27,377

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧