STM32F103学习笔记——SPI读写Flash(一)

  此系列文章是小白学习STM32的一些学习笔记。小白第一次写笔记文章,有不足或是错误之处,请多体谅和交流!

1.SPI协议介绍

(一)SPI物理层

图1 SPI协议物理层
 相比于IIC通讯,数据传输线由一条变成两条(MOSI、MISO)。
 SCK:时钟总线,同步通信。
 MOSI:主机输出数据,从机接收数据。
 MISO:主机接受数据,从机输出数据。
 SS:片选信号,低电平有效。

(二)SPI协议层

在这里插入图片描述
  SPI通信时序如图:NSS(片选信号)发送起始信号、停止信号。时钟上升沿触发,下降沿数据有效(这是某一种通讯模式)。
通信模式(CPOL/CPHA):
  CPOL(时钟极性):CPOL=0时,SCK空闲时为低电平;CPOL=1时,SCK空闲时为高电平。(空闲指的SPI未开始使用时)
CPHA(时钟相位):CPHA=0时,奇数边沿数据有效;CPHA=1时,偶数边沿数据有效。
  如下图:
在这里插入图片描述

2.STM32f103的SPI介绍

(一)SPI通讯过程

stm32f103的SPI通讯过程
 两个标志信号TXE、RXNE:
  一帧数据准备了之后,硬件将TXE置1,然后送到SPI_DR(发送缓冲区),然后软件清零TXE,这是发送过程;
  一帧数据接受了时,硬件将RXNE自动置1,然后SPI_DR(接收缓冲区)接受数据,软件清零RXNE,这就是接受过程。
  Tips:该过程是将发送(接受)缓冲区的数据一位一位(按时钟信号)通过MOSI(MISO)传输。

(二)SPI结构体介绍

// SPI_InitTypeDefSPI_InitTypeDef结构体
1 typedef struct
2 {
    
    
3 	uint16_t SPI_Direction; 		 /*设置 SPI 的单双向模式 */
4 	uint16_t SPI_Mode; 				 /*设置 SPI 的主/从机端模式 */
5 	uint16_t SPI_DataSize; 			 /*设置 SPI 的数据帧长度,可选 8/16 位 */
6 	uint16_t SPI_CPOL; 				 /*设置时钟极性 CPOL,可选高/低电平*/
7 	uint16_t SPI_CPHA; 				 /*设置时钟相位,可选奇/偶数边沿采样 */
8 	uint16_t SPI_NSS;				 /*设置 NSS 引脚由 SPI 硬件控制还是软件控制*/
9 	uint16_t SPI_BaudRatePrescaler;  /*设置时钟分频因子,fpclk/分频数=fSCK */
10 	uint16_t SPI_FirstBit; 			 /*设置 MSB/LSB 先行 */
11 	uint16_t SPI_CRCPolynomial;	 	 /*设置 CRC 校验的表达式 */
12 } SPI_InitTypeDef;

具体结构体各种配置参数可以去看stm32f103_spi.h头文件。

本系列笔记内容和图片基于《【野火®】零死角玩转STM32—F103-MINI》

猜你喜欢

转载自blog.csdn.net/weixin_45621528/article/details/113802748