模拟SPI程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
写程序:
void SPIx_WriteByte(u8 TxData)
{
u8 j=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
u8 SPIx_ReadByte(void)
{
u8 i=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++);