打印
[STM32F1]

四种SPI的STM32模拟!

[复制链接]
901|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

使用特权

评论回复
沙发
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

使用特权

评论回复
5
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);
}

使用特权

评论回复
6
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;
}

使用特权

评论回复
7
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);
}
}

使用特权

评论回复
8
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

使用特权

评论回复
9
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);
        }
}

使用特权

评论回复
10
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

使用特权

评论回复
11
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();
        }
}

使用特权

评论回复
12
goodluck09876|  楼主 | 2019-12-21 15:32 | 只看该作者
常用的模式0,模式3实现比较:

使用特权

评论回复
13
goodluck09876|  楼主 | 2019-12-21 15:32 | 只看该作者

使用特权

评论回复
14
八层楼| | 2020-1-17 12:58 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
15
观海| | 2020-1-17 13:03 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
16
guanjiaer| | 2020-1-17 13:17 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
17
heimaojingzhang| | 2020-1-17 13:23 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
18
manufact| | 2020-1-17 13:46 | 只看该作者
SPI的纯软件模拟还是比较好用的

使用特权

评论回复
19
keaibukelian| | 2020-1-17 13:50 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
20
labasi| | 2020-1-17 13:57 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

220

主题

5843

帖子

24

粉丝