OpenEdv-开源电子网

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

STM32F4 SPI通讯可以发送了,但是接收还是出现点问题,请问具体解决方案

[复制链接]

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
发表于 2013-8-27 16:15:34 | 显示全部楼层 |阅读模式
          废话不说,上图两张。主函数只有一句话while(){SPI2_ReadWriteByte(0xAA);

发送接收函数如下:
uint8_t SPI2_ReadWriteByte(uint8_t TxData)
{      
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);

  /*!< Send byte through the SPI1 peripheral */
  SPI_I2S_SendData(SPIx, TxData);

  /*!< Wait to receive a byte */
  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);

  /*!< Return the byte read from the SPI bus */
  return SPI_I2S_ReceiveData(SPIx);
}


SCK的时钟


MOSI的时钟。看样子已经发送出0xAA 了,但是为什么接收到的是0?

但是为什么每次用串口发送MISO接收到的数据出来时都是0。

如果打开接收中断还会陷入死机的状态。
死在了这句话
 while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);





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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-27 18:05:07 | 显示全部楼层

我不使用的F4,用的F1,帮你测试了下:

SPI读写部分代码:

//SPI2 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPI2_ReadWriteByte(u8 TxData)
{  
 u16 retry=0;    
 while((SPI2->SR&1<<1)==0)  //等待发送区空 
 {
  retry++;
  if(retry>=0XFFFE)return 0;  //超时退出
 }    
 SPI2->DR=TxData;       //发送一个byte
 retry=0;
 while((SPI2->SR&1<<0)==0)   //等待接收完一个byte 
 {
  retry++;
  if(retry>=0XFFFE)return 0; //超时退出
 }            
 return SPI2->DR;            //返回收到的数据       
}


主函数测试代码:
 while(1)
 {
  key=SPI2_ReadWriteByte(0XAA);
  printf("key:%d\r\n",key);
  delay_ms(500);
 }

实测图片:


170=0XAA.自发自收测试成功。

注意:
1,SPI不要接其他外设,如果接了,那就请禁止其片选。
2,用杜邦线短接MISO和MOSI。

其他没什么要求。



我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-8-27 20:26:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,把你的程序试了一下,还是不行。哎。。。问题真是不好查啊,我知道这个方案是可通的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-27 22:34:52 | 显示全部楼层
回复【3楼】yongyooh:
---------------------------------
那我也没办法了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-8-28 09:16:49 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥, SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  这句你是设置成两线全双工还是什么?
回复 支持 反对

使用道具 举报

15

主题

180

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2013-4-23
在线时间
25 小时
发表于 2013-8-28 09:33:09 | 显示全部楼层
回复【5楼】yongyooh:
---------------------------------
SPI_Mode  描述 
SPI_Direction_2Lines_FullDuplex  SPI 设置为双线双向全双工 
SPI_Direction_2Lines_RxOnly  SPI 设置为双线单向接收 
SPI_Direction_1Line_Rx  SPI 设置为单线双向接收 
SPI_Direction_1Line_Tx  SPI 设置为单线双向发送
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-8-28 09:40:54 | 显示全部楼层
回复【6楼】wobukansanguo:
---------------------------------
   我关掉接收中断就好了,谢谢!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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