搜索
查看: 2018|回复: 10

[已解决] 板子电压不稳会导致SPI通信不稳吗?

[复制链接]

该用户从未签到

54

主题

344

帖子

33

蝴蝶豆

金牌会员

最后登录
2021-8-19
发表于 2018-10-11 19:59:49 | 显示全部楼层 |阅读模式
我们自己的板子,板子正常通电时程序运行正常,但是一旦进行安检操作或者插拔串口就会造成SPI卡死在读状态忙不忙的死循环中。
  1. void Flash_WaitforWriteEnd(void)
  2. {
  3.         u8 Flash_sta = 0;
  4.        
  5. //        SPI2_SetSpeed(SPI_BaudRatePrescaler_4);
  6.        
  7.         SPI2_Flash_CS_LOW();
  8.         delay_us(2);

  9.         SPI_FLASH_SendByte(READ_STATUS_REGISTER_1);
  10.        
  11.         do
  12.         {
  13.                 Flash_sta = SPI_FLASH_SendByte(0xFF);
  14.         }while((Flash_sta&0x01) == 0x01);
  15.        
  16.         SPI2_Flash_CS_HIGH();
  17. }
复制代码
就是一直读到的就是忙,出不来。
回复

使用道具 举报

该用户从未签到

32

主题

449

帖子

34

蝴蝶豆

金牌会员

最后登录
2021-5-6
发表于 2018-10-12 09:00:24 | 显示全部楼层
做个超时处理或者故障报告,然后添加重试机制

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

169

帖子

105

蝴蝶豆

金牌会员

最后登录
2021-11-8
发表于 2018-10-12 09:05:29 | 显示全部楼层
硬件需要做防干扰处理

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

74

主题

3420

帖子

82

蝴蝶豆

社区小助手

最后登录
2023-11-12
发表于 2018-10-12 09:35:19 | 显示全部楼层
带电拔插串口是违规操作了,串行通讯因此失败就难免了。

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

6

帖子

4

蝴蝶豆

初级会员

最后登录
2019-5-1
发表于 2018-10-12 10:01:47 | 显示全部楼层
1.插拔串口一般不会影响SPI,你可以参考看看电源电压输入输出是否稳定,且供电足够,以及电容是否匹配
2.产品开发中,通讯不要使用这种死循环的方式,而使用超时+打印log,即保证模块出问题不影响产品其它功能,也方便后期追踪

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

1

蝴蝶豆

初级会员

最后登录
2020-10-22
发表于 2018-10-12 10:26:39 | 显示全部楼层
会,加超时退出

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

325

帖子

39

蝴蝶豆

高级会员

最后登录
2020-5-30
发表于 2018-10-12 10:28:59 | 显示全部楼层
电压不稳会导致各种异常,先解决稳压问题啊。

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

1306

帖子

929

蝴蝶豆

版主

最后登录
2021-3-31
发表于 2018-10-12 11:43:52 | 显示全部楼层
你可以将电源问题描述清楚一点,这样方便大家了解

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

54

主题

344

帖子

33

蝴蝶豆

金牌会员

最后登录
2021-8-19
 楼主| 发表于 2018-10-13 10:53:52 | 显示全部楼层
butterflyspring 发表于 2018-10-12 11:43
你可以将电源问题描述清楚一点,这样方便大家了解

谢谢,找到问题了,是我读取忙状态的函数写的有点问题,我的读指令就发了一遍,在循环中也应发读指令。
  1. void Flash_WaitforWriteEnd(void)
  2. {
  3.         u8 Flash_sta = 0;
  4.        
  5. //        SPI2_SetSpeed(SPI_BaudRatePrescaler_4);
  6.        
  7.         SPI2_Flash_CS_LOW();
  8.         delay_us(2);

  9.         do
  10.         {
  11.                 SPI_FLASH_SendByte(READ_STATUS_REGISTER_1);
  12.                 Flash_sta = SPI_FLASH_SendByte(0xFF);
  13.         }while((Flash_sta&0x01) == 0x01);
  14.        
  15.         SPI2_Flash_CS_HIGH();
  16. }
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

54

主题

344

帖子

33

蝴蝶豆

金牌会员

最后登录
2021-8-19
 楼主| 发表于 2018-10-13 10:54:18 | 显示全部楼层
结贴。方法参考楼上回复。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-27 07:26 , Processed in 0.174614 second(s), 40 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表