[STM32F1] 四种SPI的STM32模拟!

[复制链接]
1136|21
 楼主| goodluck09876 发表于 2019-12-21 15:28 | 显示全部楼层 |阅读模式
 楼主| goodluck09876 发表于 2019-12-21 15:29 | 显示全部楼层
void delay()
{
unsigned char m,n;
     for(n=0;n<5;n++);
    for(m=0;m<100;m++);
}
 楼主| goodluck09876 发表于 2019-12-21 15:29 | 显示全部楼层
/**********************************************
模式零           写数据
***********************************************/
#if _CPOL==0&&_CPHA==0          //MODE   0  0   
void SPI_Send_Dat(unsigned char dat)
{
        unsigned char n;
        for(n=0;n<8;n++)
        {
                SCK_D(0);
                if(dat&0x80)
                        MOSI_D(1);
                else
                        MOSI_D(0);
                dat<<=1;
                SCK_D(1);
        }
        SCK_D(0);
}
 楼主| goodluck09876 发表于 2019-12-21 15:29 | 显示全部楼层
/*********************************************
模式零         读数据
*********************************************/
unsigned char SPI_Receiver_Dat(void)
{
        unsigned char n ,dat,bit_t;
       
        for(n=0;n<8;n++)
        {
                SCK_D(0);
                dat<<=1;
                if(MISO_I())
                        dat|=0x01;
                else
                        dat&=0xfe;
                SCK_D(1);
        }
        SCK_D(0);
        return dat;
}
#endif
 楼主| goodluck09876 发表于 2019-12-21 15:30 | 显示全部楼层
/**********************************************
模式二           写数据
***********************************************/
#if _CPOL==1&&_CPHA==0           //MODE   1  0
void SPI_Send_Dat(unsigned char dat)
{
unsigned char n;
for(n=0;n<8;n++)
{
  SCK_D(1);
  if(dat&0x80)MOSI_D(1);
  else MOSI_D(0);
  dat<<=1;
  SCK_D(0);
}
  SCK_D(1);
}
 楼主| goodluck09876 发表于 2019-12-21 15:30 | 显示全部楼层
/*********************************************
模式二          读数据
*********************************************/
unsigned char SPI_Receiver_Dat(void)
{
unsigned char n ,dat,bit_t;
for(n=0;n<8;n++)
{
  SCK_D(1);
  dat<<=1;
  if(MISO_I())dat|=0x01;
  else dat&=0xfe;
  SCK_D(0);
}
  SCK_D(1);
  return dat;
}
 楼主| goodluck09876 发表于 2019-12-21 15:30 | 显示全部楼层
/*********************************************
模式一        写数据
*********************************************/
#if _CPOL==0&&_CPHA==1           //MODE  0  1
void SPI_Send_Dat(unsigned char dat)
{
unsigned char n;
SCK_D(0);
for(n=0;n<8;n++)
{
  SCK_D(1);
  if(dat&0x80)MOSI_D(1);
  else MOSI_D(0);
  dat<<=1;
  SCK_D(0);
}
}
 楼主| goodluck09876 发表于 2019-12-21 15:31 | 显示全部楼层
/*********************************************
模式一       读数据
*********************************************/
unsigned char SPI_Receiver_Dat(void)
{
unsigned char n ,dat,bit_t;
for(n=0;n<8;n++)
{
  SCK_D(1);
   dat<<=1;
  if(MISO_I())dat|=0x01;
  else dat&=0xfe;
  SCK_D(0);
}
  SCK_D(0);
  return dat;
}
#endif
 楼主| goodluck09876 发表于 2019-12-21 15:31 | 显示全部楼层
/*********************************************
模式三        写数据
*********************************************/
#if _CPOL==1&&_CPHA==1            //MODE  1  1
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);
        }
}
 楼主| goodluck09876 发表于 2019-12-21 15:31 | 显示全部楼层
/************************************
模式三          读数据
************************************/
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
 楼主| goodluck09876 发表于 2019-12-21 15:32 | 显示全部楼层
/*************************************
*************************************/
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();
        }
}
 楼主| goodluck09876 发表于 2019-12-21 15:32 | 显示全部楼层
常用的模式0,模式3实现比较:
 楼主| goodluck09876 发表于 2019-12-21 15:32 | 显示全部楼层
八层楼 发表于 2020-1-17 12:58 | 显示全部楼层
非常感谢楼主分享
观海 发表于 2020-1-17 13:03 | 显示全部楼层
非常感谢楼主分享
guanjiaer 发表于 2020-1-17 13:17 | 显示全部楼层
非常感谢楼主分享
heimaojingzhang 发表于 2020-1-17 13:23 | 显示全部楼层
非常感谢楼主分享
manufact 发表于 2020-1-17 13:46 | 显示全部楼层
SPI的纯软件模拟还是比较好用的
keaibukelian 发表于 2020-1-17 13:50 | 显示全部楼层
非常感谢楼主分享
labasi 发表于 2020-1-17 13:57 | 显示全部楼层
非常感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

220

主题

5843

帖子

25

粉丝
快速回复 在线客服 返回列表 返回顶部