打印

求助香主,双SPI通信,主机无法发送数据!

[复制链接]
2068|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
forbin936|  楼主 | 2012-3-19 20:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32f103测试两个SPI主从收发,只能收到从机发的数据,主机发的数据接收不到。
时钟初始化已经好了。
u8 SPI1_Buffer_Tx[BufferSize] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
                                    0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
                                      0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
                                      0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,
                                       0x1D, 0x1E, 0x1F, 0x20};
u8  SPI2_Buffer_Tx[BufferSize] = {0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
                                    0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E,
                                    0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,
                                    0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C,
                                    0x6D, 0x6E, 0x6F, 0x70};
u8 SPI1_Buffer_Rx[BufferSize], SPI2_Buffer_Rx[BufferSize];

GPIO初始化如下:
        /*SPI1_Configuration*/ //PA5=SPI1_SCK;PA6=SPI1_MISO;PA7=SPI1_MOSI;
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;       
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;       
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
          GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure SPIz pins: SCK, MISO and MOSI */        //PB13=SPI2_SCK;PB14=SPI2_MISO;PB15=SPI2_MOSI;
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;        
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;        
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

SPI初始化如下:
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
   SPI_InitStructure.SPI_CRCPolynomial = 7;
   SPI_Init(SPI1, &SPI_InitStructure);

   /* SPIz Config -------------------------------------------------------------*/
   SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
   SPI_Init(SPI2, &SPI_InitStructure);

   /* Enable SPI1 */
   SPI_Cmd(SPI1, ENABLE);
   /* Enable SPI2 */
   SPI_Cmd(SPI2, ENABLE);

收发程序如下:
while (TxIdx < BufferSize)
   {
     /* Wait for SPI1 Tx buffer empty */
     while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
         
             /* Send SPI2 data */
     SPI_I2S_SendData(SPI2, SPI2_Buffer_Tx[TxIdx]);
         
             /* Send SPI1 data */     
         SPI_I2S_SendData(SPI1, SPI1_Buffer_Tx[TxIdx++]);

     /* Wait for SPI1 data reception */
     while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
     /* Read SPI2 received data */
     SPI2_Buffer_Rx[RxIdx] = SPI_I2S_ReceiveData(SPI2);
     /* Wait for SPI1 data reception */
     while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
     /* Read SPI1 received data */
     SPI1_Buffer_Rx[RxIdx++] = SPI_I2S_ReceiveData(SPI1);          
   }
仿真后的结果,SPI1_Buffer_Rx有接收到数据,SPI2_Buffer_Rx没收到!那是不是就证明从机SPI2数据发送正常,主机SPI1发送错误?这是什么原因?求香主及各位大神帮忙看看!
沙发
forbin936|  楼主 | 2012-3-19 21:50 | 只看该作者
原来是线路没插好!!!

使用特权

评论回复
板凳
logokfu| | 2012-3-19 22:31 | 只看该作者
香主这两天好像不在

使用特权

评论回复
地板
香水城| | 2012-3-21 10:16 | 只看该作者
香主这两天好像不在
**kfu 发表于 2012-3-19 22:31


还有人监视我? :@

使用特权

评论回复
5
airwill| | 2012-3-21 12:20 | 只看该作者
不要说成是 "监视", 是关心和关注, 关切比较好.:lol

使用特权

评论回复
6
香水城| | 2012-3-21 13:35 | 只看该作者
不要说成是 "监视", 是关心和关注, 关切比较好.:lol
airwill 发表于 2012-3-21 12:20


哈哈,这就好!

谢谢关心,谢谢关注,谢谢关切,也谢谢监视、监督 :lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

1

粉丝