STM32模拟SPI的两种方式

2019-07-20 05:56发布

1.第一种模拟方式
u8 SPI2_ReadWriteByte(u8 byte)
{
  u8 bit_ctr;
  for(bit_ctr = 0; bit_ctr < 8; bit_ctr++)
{
   if((byte&0x80)==0x80)
     { MOSI_MB_HIGH;  }
   else
     { MOSI_MB_LOW;  }
   
   byte =byte<< 1;
    SCK_MB_HIGH;
   
  if(READ_NRF24L01_MB_MISO)
    {byte++; }
     SCK_MB_LOW ;
  }
   return(byte);
}
2.第二种模拟方式
/************************************
           写数据
************************************/
void SPI_Send_Dat(unsigned char dat)
{
    unsigned char n;
    SCK_D(1);
    for(n=0;n<8;n++)
    {
        SCK_D(0);
        if(dat&0x80)
            MOSI_D(1);
        else
            MOSI_D(0);
        dat<<=1;
        SCK_D(1);
    }
}
/************************************
模式三          读数据
************************************/
unsigned char SPI_Receiver_Dat(void)
{
unsigned char n ,dat,bit_t;
SCK_D(0);
for(n=0;n<8;n++)
{
    SCK_D(0);
    dat<<=1;
    if(MISO_I())
        dat|=0x01;
    else
      dat&=0xfe;
    SCK_D(1);
}
    SCK_D(1);
    return dat;
}
#endif
/*************************************
*************************************/
void main()
{
    SPI_Init();
    DDRB = 0XFF;
    //#if _CPOL
    //SCK_D(0);
    //#endif
    while(1)
    {
        //SSEL_D(0);
        //SPI_Send_Dat(0x01);
        //SPI_Send_Dat(0x31);
        //SSEL_D(1);
        SSEL_D(0);
        SPI_Send_Dat(0x81);
        PORTB =SPI_Receiver_Dat();
        SSEL_D(1);
        //delay();
    }
}

3.两种方式都可以用吗
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。