搜索
bottom↓
回复: 11

SPI求解

[复制链接]

出0入0汤圆

发表于 2013-4-22 14:35:02 | 显示全部楼层 |阅读模式
请问 各位大侠  用spi做通信的时候

比如用 spi0 发给spi1 一个数0x123

能够这样 if(SPI_ReceiveData(SPI1))==0x123直接判断spi1收到的是否是0x123吗??

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-4-22 17:04:59 | 显示全部楼层
语法有问题,那个判断应该在括号里面的吧。另,可以理解为常量和RAM中的值作比较,可以的,不推荐!

出0入0汤圆

发表于 2013-4-22 17:22:10 | 显示全部楼层
中英文字符杂交,呵呵

出0入0汤圆

 楼主| 发表于 2013-4-22 19:08:59 | 显示全部楼层
xuchunjie 发表于 2013-4-22 17:04
语法有问题,那个判断应该在括号里面的吧。另,可以理解为常量和RAM中的值作比较,可以的,不推荐! ...

额,这怪我没写规范,程序里是这样写的,if(SPI_RecieveData(SPI0)==0x123),但是我发现无论发什么,收到的都是0XFF。。。。求解啊

出0入0汤圆

发表于 2013-4-22 19:32:02 来自手机 | 显示全部楼层
spi一次是8位啊  0x123 溢出了 当然就是0xff

出0入0汤圆

 楼主| 发表于 2013-4-22 19:40:16 | 显示全部楼层
jumpjet 发表于 2013-4-22 19:32
spi一次是8位啊  0x123 溢出了 当然就是0xff

无论发什么,0x01,0x02...都是收到0XFF,而且sendbuffer 测出来也是0xff

出0入0汤圆

发表于 2013-4-22 20:23:51 来自手机 | 显示全部楼层
楼主先用示波器 看看波形呗

出0入0汤圆

 楼主| 发表于 2013-4-22 21:43:28 | 显示全部楼层
身边没有示波器。。。哪位大侠能发一个 用spi0只发送一个数据,spi1接收到后检测是否正确的例程啊。。求高人啊

出0入0汤圆

发表于 2013-4-23 10:03:29 | 显示全部楼层
检查一下SPI的初始化配置。

出0入0汤圆

 楼主| 发表于 2013-4-23 21:08:20 | 显示全部楼层
xuchunjie 发表于 2013-4-23 10:03
检查一下SPI的初始化配置。

#include "ht32f175x_275x.h"
u8 r,t;
SPI_InitTypeDef SPI_InitStructure;

u8 spi0_writebyte(u8 byte)
{
    /* Check on SPI1 Tx Buffer empty */
    while(SPI_GetFlagStatus(SPI0, SPI_FLAG_TXBE)==RESET);
    /* Send SPI1 data */
    SPI_SendData(SPI0, byte);//数据经主机MOSI发送 =         SPI0—>DR=byte;
        while(SPI_GetFlagStatus(SPI0, SPI_FLAG_RXBNE)==RESET);
        return  SPI_ReceiveData(SPI0);//主机由MISO接收   
}

int main(void)
{
  /* Enable SPI0 ,SPI1 & AFIO APB clock */
  CKCU_APBPerip0ClockConfig(CKCU_APBEN0_SPI0 | CKCU_APBEN0_SPI1 | CKCU_APBEN0_AFIO|CKCU_APBEN0_PB, ENABLE);
  AFIO_GPBConfig(AFIO_PIN_0 | AFIO_PIN_1 , AFIO_MODE_DEFAULT);
  GPIO_DirectionConfig (GPIOB,GPIO_PIN_0|GPIO_PIN_1, GPIO_DIR_OUT) ;
  GPIO_WriteOutBits (GPIOB,GPIO_PIN_0|GPIO_PIN_1, SET);
  /* configure PD0, PD1, PD2, PD3 to SPI0 mode */
  AFIO_GPDConfig(AFIO_PIN_0 | AFIO_PIN_1 | AFIO_PIN_2 | AFIO_PIN_3, AFIO_MODE_2);

  /* configure PC0, PC1, PC2, PC3 to SPI1 mode */
  AFIO_GPCConfig(AFIO_PIN_0 | AFIO_PIN_1 | AFIO_PIN_2 | AFIO_PIN_3, AFIO_MODE_1);

  /* SPI0 configuration */
  SPI_InitStructure.SPI_Mode = SPI_MASTER;
  SPI_InitStructure.SPI_FIFO = SPI_FIFO_DISABLE;
  SPI_InitStructure.SPI_DataLength = SPI_DATALENGTH_8;
  SPI_InitStructure.SPI_SELMode = SPI_SEL_HARDWARE;
  SPI_InitStructure.SPI_SELPolarity = SPI_SELPOLARITY_LOW;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_LOW;//时钟闲时为低
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_FIRST;//第一个上升沿采样
  SPI_InitStructure.SPI_FirstBit = SPI_FIRSTBIT_MSB;
  SPI_InitStructure.SPI_RxFIFOTriggerLevel = 0;
  SPI_InitStructure.SPI_TxFIFOTriggerLevel = 0;
  SPI_InitStructure.SPI_ClockPrescaler = 4;
  SPI_Init(SPI0, &SPI_InitStructure);

  /* SPI1 configuration */
  SPI_InitStructure.SPI_Mode = SPI_SLAVE;
  SPI_Init(SPI1, &SPI_InitStructure);

  /* Enable SPI0 & SPI1 */
  SPI_Cmd(SPI0, ENABLE);
  SPI_Cmd(SPI1, ENABLE);

  /* Set SEL as output mode for slave select */
  SPI_SELOutputCmd(SPI0, ENABLE);

  /*先将要返回的数值放入SPI1->DR*/
  while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXBE)==RESET);
  SPI_SendData(SPI1, 0x12);
  for(t=0;t<50;t++);//延时


  r=spi0_writebyte(0x12);//主机SPI0向从机SPI1发送数据0x12
  for(t=0;t<50;t++);//延时
  
  
  if(r==0X12)//判定发送与接收的数据是否相等
  {
  GPIO_WriteOutBits (GPIOB,GPIO_PIN_0|GPIO_PIN_1, RESET);//led亮
  }
  while(1);   
}

这是源程序,和STM32差不多的芯片,,,最后我发现只有if(r==0xff)的时候,led才会被点亮,也就是说。。。无论主机从miso接收什么,最后得到的都是0xff。。。。求解啊各位大侠!!!!~~

出0入0汤圆

 楼主| 发表于 2013-4-23 21:21:03 | 显示全部楼层
TXAM 发表于 2013-4-23 21:08
#include "ht32f175x_275x.h"
u8 r,t;
SPI_InitTypeDef SPI_InitStructure;

补充一下,这是用开发板做的实验:
spi0作为主机 spi1作为从机
spi0向spi1发送一个数据,spi1收到后回传相同的数据。
官方给的例程都是把数据按数组的形式传输。。。难道单个的数据不行么??

出0入0汤圆

发表于 2013-4-24 09:39:59 | 显示全部楼层
if(r==0X12)//判定发送与接收的数据是否相等....你是这样判断的啊。。你不能直接看从端能否收到么。SPI有没有数据应该可以从状态寄存器的值看出来的,多看看状态寄存器。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 02:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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