如何利用STM32F407模拟SPI(三线)读取W25QXX FLASH?

2019-07-20 11:43发布

这里主要讲一下思路,模拟SPI重点是搞懂时序,其他问题迎刃而解。附件是优化后的SPI通信程序,发送速率能达到14M,接收数率能达到11.2M。

1.硬件连接: 三线SPI 三线SPI 三根线(STM32F407作为主机):MOSI:发送和接收(将FLASHMISOMOSI之间用一个220R电阻连接)CLOCK:时钟CS:使能


2.重点掌握读写时序:(★★★★★1.发送数据时,上升沿发送拉低时钟线 --> 发送1bit数据 -->  拉高时钟线(此时数据才发送出去)2.读取数据时,下降沿读取拉低时钟线 --> 拉高时钟线 -->  读取1bit数据  (此时数据已读取完成)


3.源代码:/** @Description: SPI发送字节数据* @param: txd,待发送字节数据* @return: none*/#pragma O3void spiSendByte(u8 txd){    u8 i;    SPI_CLOCK_LOW();    for(i=0;i<8;i++) {        WRITE_SPI=(txd&0x80)>>7;        SPI_CLOCK_HIGH();        txd<<=1;        SPI_CLOCK_LOW();    }}/** @Description: SPI接收字节数据* @param: none* @return: 接收的字节数据 MSB Frist*/u8 spiReceiveByte(void){    u8 i,receive=0;    for(i=0;i<8;i++ ) {    receive<<=1;        SPI_CLOCK_HIGH();        if(READ_SPI){           receive|=0x01;        }       SPI_CLOCK_LOW();    }    return receive;}
0条回答

一周热门 更多>