STM32_SPI接口原理(未完)

SPI 就是串行外围设备接口。SPI 接口主要应用在 EEPROM,FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。
STM32_SPI接口原理(未完)_第1张图片
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线:

  • MISO 主设备数据输入,从设备数据输出;
  • MOSI 主设备数据输出,从设备数据输入;
  • SCLK 时钟信号,由主设备产生;
  • CS 从设备片选信号,由主设备控制; (通常用软件实现)

SPI接口框图

STM32_SPI接口原理(未完)_第2张图片
主机和从机都有一个串行移位寄存器,主机通过向它的 SPI 串行寄存器写入一个字节来发起一次传输。寄存器通过 MOSI 信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过 MISO 信号线返回给主机。这样,两个移位寄存器中的内容就被交换。
<>外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;
<>反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输.

SPI 主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可
编程时钟;发送结束中断标志;写冲突保护;总线竞争保护

SPI 总线四种工作方式

SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果 CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果 CPHA=0,
在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI 主模块和与之通信的外设备时钟相位和极性应该一致。
STM32_SPI接口原理(未完)_第3张图片
数据帧格式:
根据SPI_CR1寄存器中的LSBFIRST位,输出数据位时可以MSB先也可以LSB先
根据SPI_CR1寄存器中的DFF位,每个数据帧可以是8位或是16位
状态标志:(通过3个状态标志可以监控SPI总线的状态)

  • 发送缓冲器空闲标志(TXE):
    此标志为‘1’时表明发送缓冲器为空,可以写下一个待发送的数据进入缓冲器;当写入SPI_DR时,TXE标志被清除
  • 接受缓冲器非空(RTXE):
    此标志为‘1’时表明在接收缓冲器中包含有效的接收数据,读SPI数据寄存器可以清除此标志
  • 忙碌标志(BSY):
    BSY标志由硬件设置与清除(写入无效),表明SPI通信层的状态
    STM32_SPI接口原理(未完)_第4张图片
    STM32_SPI接口原理(未完)_第5张图片

    SPI配置步骤:
    ①使能SPIx和IO口时钟
    RCC_AHB1PeriphClockCmd(); //使能GPIOx时钟
    RCC_APB2PeriphClockCmd(); //使能SPIx时钟
    ②初始化IO口为复用功能
    GPIO_Init();
    ③设置引脚复用映射:
    GPIO_PinAFConfig();
    ④初始化SPIx,设置SPIx的工作模式
    SPI_Init();
    ⑤使能SPI
    SPI_Cmd();
    ⑥SPI传输数据
    SPI_I2S_SendData(); //通过外设SPIx发送一个byte 数据
    SPI_I2S_ReceiveData(); //返回通过SPIx最近接收的数据
    ⑦查看SPI传输状态
    SPI_I2S_GetFlagStatus();

MCU和W25Q128(片外flash)的硬件连接:

STM32_SPI接口原理(未完)_第6张图片
W25Q128 将(128Mb)16M字节 的容量分为 256 个块(Block),每个块大小为 64K 字节,每个块又分为16 个扇区(Sector),每个扇区 4K 个字节。W25Q128 的最小擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。这样我们需要给 W25Q128 开辟一个至少 4K 的缓存区,方便擦除前进行保存和修改后,再放置回去

你可能感兴趣的:(初始者)