模拟SPI程序.docx
《模拟SPI程序.docx》由会员分享,可在线阅读,更多相关《模拟SPI程序.docx(10页珍藏版)》请在冰豆网上搜索。
![模拟SPI程序.docx](https://file1.bdocx.com/fileroot1/2022-10/30/4aca0240-5002-40d8-989f-cf86812c59f2/4aca0240-5002-40d8-989f-cf86812c59f21.gif)
写程序:
voidSPIx_WriteByte(u8TxData)
{
u8j=0;
SPI_FLASH_CLK_LOW(); //clk=0
if(TxData&0x80)
{SPI_FLASH_DI_HIGH();} //mosi=1
else
{SPI_FLASH_DI_LOW();} //mosi=0
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH(); //clk=1,一个上升沿写入一位
for(j=0;j<5;j++); //延时
SPI_FLASH_CLK_LOW(); //clk=0
if(TxData&0x40)
{SPI_FLASH_DI_HIGH();} //mosi=1
else
{SPI_FLASH_DI_LOW();} //mosi=0
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH();
for(j=0;j<5;j++);
SPI_FLASH_CLK_LOW();
if(TxData&0x20)
{SPI_FLASH_DI_HIGH();} //mosi=1
else
{SPI_FLASH_DI_LOW();} //mosi=0
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH();
for(j=0;j<5;j++);
SPI_FLASH_CLK_LOW();
if(TxData&0x10)
{SPI_FLASH_DI_HIGH();} //mosi=1
else
{SPI_FLASH_DI_LOW();} //mosi=0
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH();
for(j=0;j<5;j++);
SPI_FLASH_CLK_LOW();
if(TxData&0x08)
{SPI_FLASH_DI_HIGH();} //mosi=1
else
{SPI_FLASH_DI_LOW();} //mosi=0
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH();
for(j=0;j<5;j++);
SPI_FLASH_CLK_LOW();
if(TxData&0x04)
{SPI_FLASH_DI_HIGH();} //mosi=1
else
{SPI_FLASH_DI_LOW();} //mosi=0
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH();
for(j=0;j<5;j++);
SPI_FLASH_CLK_LOW();
if(TxData&0x02)
{SPI_FLASH_DI_HIGH();} //mosi=1
else
{SPI_FLASH_DI_LOW();} //mosi=0
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH();
for(j=0;j<5;j++);
SPI_FLASH_CLK_LOW(); //clk=0
if(TxData&0x01)
{SPI_FLASH_DI_HIGH();}
else
{SPI_FLASH_DI_LOW();}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH(); //clk=1
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW(); //clk=0
}
读程序0x80==0x80
u8SPIx_ReadByte(void)
{
u8i=0,j=0;
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH(); //clk=1
if(GPIOC->IDR&0x80==0x80)
{i=i+0x80;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW(); //clk=0,下降沿读数
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x80==0x80)
{i=i+0x40;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x80==0x80)
{i=i+0x20;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x80==0x80)
{i=i+0x10;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x80==0x80)
{i=i+0x08;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x80==0x80)
{i=i+0x04;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x80==0x80)
{i=i+0x02;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x80==0x80)
{i=i+0x01;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
returni;
}
读程序0x40==0x40
u8SPIx_ReadByte(void)
{
u8i=0,j=0;
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH(); //clk=1
if(GPIOC->IDR&0x40==0x40)
{i=i+0x80;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW(); //clk=0,下降沿读数
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x40==0x40)
{i=i+0x40;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x40==0x40)
{i=i+0x20;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x40==0x40)
{i=i+0x10;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x40==0x40)
{i=i+0x08;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x40==0x40)
{i=i+0x04;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x40==0x40)
{i=i+0x02;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x40==0x40)
{i=i+0x01;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
returni;
}
读程序0x20==0x20
u8SPIx_ReadByte(void)
{
u8i=0,j=0;
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_HIGH(); //clk=1
if(GPIOC->IDR&0x20==0x20)
{i=i+0x80;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW(); //clk=0,下降沿读数
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x20==0x20)
{i=i+0x40;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x20==0x20)
{i=i+0x20;}
for(j=0;j<3;j++); //延时
SPI_FLASH_CLK_LOW();
for(j=0;j<5;j++);
SPI_FLASH_CLK_HIGH();
if(GPIOC->IDR&0x20==0x20)