基于stm32的spi双机通信问题,请教大神

2019-07-14 20:23发布

我的spi通信总是不成功,在别的帖子上看到spi的初始化,但不知道main函数咋写,是什么样的流程这是我写的从机程序

//要写字符串数组
#define SIZE 32
u8 SPI2_TEXT_Buffer[]={"dahuai dan "};//发送数组
u8 SPI2_RESEIVE_Buffer[SIZE]={0};//接收数组

int main(void)
{         
        u16  datatemp=0;
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                                  //初始化与LED连接的硬件接口
        SPI2_Init ();
        while (1)
        {
                while(datatemp<SIZE )
                {
                        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET)//检查指定的SPI标志位设置与否:发送缓存空标志位       
                       
                                SPI_I2S_SendData (SPI2 ,SPI2_TEXT_Buffer[datatemp ]);
                        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE ) == RESET)
                                SPI2_RESEIVE_Buffer[datatemp]=SPI_I2S_ReceiveData (SPI2 );
                       
                        datatemp ++;
                }                
        }
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
这是我的主机程序
#define SIZE 32
u8 SPI2_TEXT_Buffer[]={"congji fade xiaoxi"};
u8 SPI2_RESEIVE_Buffer[SIZE]={0};



int main(void)
{         
       
        u16  datatemp=0;

        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                                  //初始化与LED连接的硬件接口
        SPI2_Init ();
        while (1)
        {
                while(datatemp<SIZE )
                {
                        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位          
                                SPI_I2S_SendData(SPI2, SPI2_TEXT_Buffer [datatemp ]); //通过外设SPIx发送一个数据
                        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位
                                SPI2_RESEIVE_Buffer[datatemp]=SPI_I2S_ReceiveData (SPI2 );
                         datatemp ++;
                        LED0 =!LED0 ;
                }       
        datatemp=0;
                printf("zhujijieshoudao de xinxi wei :%s",SPI2_RESEIVE_Buffer );
        }
}

主要问题有几点:
1:相位设置应该没错,但依旧不理解在主函数里如何写收发数据的流程;
2:是不是主从机接四根线就行了。
0条回答

一周热门 更多>