OpenEdv-开源电子网

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

STM32模拟SPI的两种方式

[复制链接]

42

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2014-11-3
在线时间
12 小时
发表于 2018-9-28 13:53:33 | 显示全部楼层 |阅读模式
1金钱
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.两种方式都可以用吗

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

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-1-16
在线时间
10 小时
发表于 2018-9-28 16:53:52 | 显示全部楼层
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2020-8-6
在线时间
22 小时
发表于 2021-5-24 14:55:13 | 显示全部楼层
模拟SPI好方法
回复

使用道具 举报

56

主题

343

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-3-8
在线时间
267 小时
发表于 2021-5-28 23:03:19 | 显示全部楼层
理论上都能用。但是基本都是读写合成1个。SPI是收发同时的。。一般读取时我们会发无效字0xff。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 17:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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