这里主要讲一下思路,模拟SPI重点是搞懂时序,其他问题迎刃而解。附件是优化后的SPI通信程序,发送速率能达到14M,接收数率能达到11.2M。
1.硬件连接:
三线SPI
三根线(STM32F407
作为主机):MOSI:
发送和接收(将FLASH的MISO和MOSI之间用一个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;}
一周热门 更多>