OpenEdv-开源电子网

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

F407的SPI自主通信一直在GetStatus出问题

[复制链接]

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-7-28
在线时间
15 小时
发表于 2017-8-8 15:03:25 | 显示全部楼层 |阅读模式
这个问题已经困扰我一个礼拜了。。。想做一个SPI1通讯SPI2的实验
然后目前有这么几个问题:
①while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)== RESET){};
   SPI_I2S_SendData(SPI2,0x01);
   这里在调试的时候一直卡在这。
②不知道SPI1的CS和SP2的CS该怎么搞。

贴代码:一共三个   spi1.h   spi2.h   main.c
①spi1.h
void SPI1_Init(void)
{         
       
  GPIO_InitTypeDef  GPIO_InitStructure;
  SPI_InitTypeDef  SPI_InitStructure;
       
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);


        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;       
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);


        GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_SPI1); //PA4¸ SPI1  CS
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1); //PA5¸ SPI1  SCK
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1); //PA6¸ SPI1  MISO
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1); //PA7¸ SPI1  MOSI


        RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);
        RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE);

        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;               
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;       
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;               
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;       
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;               
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;               
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;       
        SPI_InitStructure.SPI_CRCPolynomial = 7;       
        SPI_Init(SPI1, &SPI_InitStructure);  


        SPI_Cmd(SPI1, ENABLE); //ê1ÄüSPIíaéè

        SPI1_ReadWriteByte(0xff);
}   

u8 SPI1_ReadWriteByte(u8 TxData)
{                                          

  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}//这里一直卡死
       
        SPI_I2S_SendData(SPI1, TxData); //这里也是
               
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){}

        return SPI_I2S_ReceiveData(SPI1);        
                    
}


②spi2.h
和上面一样,管脚定义在
PB12     CS
PB13     SCK
PB14     MISO
PB15    MOSI

③main.c
int main(void)
{
        delay_init(168);
        uart_init(115200);
        LED_Init();
        SPI1_Init();
        SPI2_Init();

//若SPI之间通讯成功,那么temp的值会到GPIOF的PF9上,灯亮
        while(1)
        {       
                        u16 temp=0;
                        while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)== RESET){};
                            SPI_I2S_SendData(SPI2,0x01);
                                        delay_ms(3000);
                        while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)== RESET){};
                                        if(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY)==0)
                                        temp=SPI_I2S_ReceiveData(SPI1);
                                  GPIOF->BSRRH=temp<<9;

       }
}
求大神帮我看一看,附连接图,
其中我把两个CS都接地了,其他三个管脚对应SCK-SCK   MISO-MISO   MOSI-MOSI

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

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-7-28
在线时间
15 小时
 楼主| 发表于 2017-8-8 15:04:01 | 显示全部楼层
我这里设置是SPI2主和SPI1从
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-7-28
在线时间
15 小时
 楼主| 发表于 2017-8-9 08:27:35 | 显示全部楼层
顶啊顶
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 12:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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