OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3894|回复: 1

从机spi输出数据一段时间后卡住不变化

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2014-12-10
在线时间
0 小时
发表于 2014-12-10 10:42:45 | 显示全部楼层 |阅读模式
5金钱
现象:我要实现两个stm32f103主从通信,主机mosi能够稳定发送 0xb0 0xff 0xff .... 0xff      从机能够读取到主机发来的数据并miso原样发送出来(示波器观察),说明spi通道没有问题。但是在中断处理函数中我加了一个if判断语句后输出变化的值,结果输出10来秒后卡住,数据不变化,各位大神,求解啊,拜谢啊
从机程序:
void SPI1_WriteByte(u8 TxData)

     u8 retry=0;    
     while((SPI1->SR&1<<1)==0){
          retry++;
         if(retry>200)return;
     }    
     SPI1->DR=TxData;     //   
}
u8 SPI1_ReadByte(void)

     u8 retry=0;    
     while((SPI1->SR&1<<0)==0)  {
         retry++;
          if(retry>200)return 0;
     }            
     return SPI1->DR;          //     
}
void SPI1_IRQHandler(void)
{
      if((SPI1->SR&1<<0)==1)
     {
        Slave_Temp[num] = SPI1_ReadByte();   //num初始值为0,以后每进入中断函数一次增加1
       if(Slave_Temp[0]==0xb0) SPI1_WriteByte(kk++); 
       if(kk>=240)kk=0;num++;
    }

}
一开始是正常的输出kk++数据,过段时间后示波器显示停在一个数值上面一直不变化。
本人怀疑if条件不成立,即SPI1_ReadByte()有可能读错数据(确信主机没发错),但是我把if条件去掉
后,即:
Slave_Temp[0] = SPI1_ReadByte();   
 SPI1_WriteByte(kk++); 
 if(kk>=240)kk=0;
可以一直正常输出。          为什么加了那个if判读语句,一开始正常输出,后来又卡住了呢?期望哥解答。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-10 22:13:22 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 01:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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