【总结】SPI

概要

SPI,Serial Peripheral interface,串行外围设备接口。是一种串行,全双工,同步的通信总写。
常用的SPI接口外设有,EEPROM,FLASH,RTC,ADC ,数字信号处理器,数字信号解码器等。

SPI接口外设通信流程

这里写图片描述

SPI的4根管脚定义
MISO:主设备数据输入,从设备数据输出
MOSI:主设备数据输出,从设备数据输入
SCLK:时钟信号,主设备产生
CS:从设备片选信号由主设备控制

SPI主从设备数据的交换是同时进行的。例如,主设备一位寄存器中的数据位01010101,从设备移位寄存器中的数据位10101010,每经过一个脉冲,从设备把最低位【1】通过MISO移入主设备的移位寄存器最低位上,其他位右移,同时,主设备原移位寄存器中的最高位通过MOSI移入从设备的最高位,其他位左移。

因此,外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节,同理,若主机要读取从机的一个字节,必须向从机发送一个空字节引发从机的传输。

//SPI1 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPI1_ReadWriteByte(u8 TxData)
{                    
    while((SPI1->SR&1<<1)==0);      //等待发送区空 
    SPI1->DR=TxData;                //发送一个byte  
    while((SPI1->SR&1<<0)==0);      //等待接收完一个byte  
    return SPI1->DR;                //返回收到的数据                   
}

这里写图片描述

操作方法

  1. 使能芯片
  2. 发送命令
  3. 发送地址
  4. 读写数据

以读取指定地址数据为例

void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)   
{ 
    u16 i;                                              
    W25QXX_CS=0;                            //使能器件   
    SPI1_ReadWriteByte(W25X_ReadData);         //发送读取命令   
    SPI1_ReadWriteByte((u8)((ReadAddr)>>16));  //发送24bit地址    
    SPI1_ReadWriteByte((u8)((ReadAddr)>>8));   
    SPI1_ReadWriteByte((u8)ReadAddr);   
    for(i=0;i<NumByteToRead;i++)
    { 
        pBuffer[i]=SPI1_ReadWriteByte(0XFF);   //循环读数  
    }
    W25QXX_CS=1;                              
} 

W25X FLASH芯片的命令定义如下

这里写图片描述

参考

STM32F3与 F4 系列 Cortex M4 内核编程手册
STM32F4xxx中文参考手册
STM32F4xxx英文参考手册
STM32F4 开发指南(寄存器版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值