功能:主机发送数据0x34–>从机接收数据–>通过串口将数据发送出去–>串口猎人显示0x34
高速、全双工、同步、串行
NSS、SCK、MOSI、MISO
1主机多从机
1主机1从机
物理层:片选线(软件管理/硬件管理)
[1] SPI_NSS_Hard:硬件自动拉高拉低片选,在速率上是远比软件方式控制要高的,缺点是当STM32为主设备时,同一个SPI上面只能接一个从设备。这也就限制了SPI通信设备的数量。
[2] SPI_NSS_Soft:软件控制,GPIO控制片选拉高拉低,优点是一个SPI上面可以挂多个设备。这也是使用较多的方式。通过SPI_Cmd这个函数实现的,使能SPI,硬件自动拉低片选,取消使能SPI,硬件自动拉高片选。
[3] 注意:“一般主器件用软件管理,从器件用硬件管理”
协议层:四种通讯模式
[1] 时钟极性(CPOL):NSS总线空闲时SCK电平信号,空闲时为高电平(=1),低电平(=0)
[2] 时钟相位(CPHA):数据采样时刻,奇数边(=0),偶数边(=1)
视频
https://www.bilibili.com/video/BV1wK411g78L/?spm_id_from=333.851.header_right.history_list.click&vd_source=c567c826b38b783f81e4cb19996400c5
文章
https://one-piece.blog.csdn.net/article/details/119545607?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-119545607-blog-126541530.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-119545607-blog-126541530.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=1
主器件
//主
#include "stm32f4xx.h"
#include "delay.h"
int main(void)
{
//一些初始化:结构体(GPIOA/SPI)
GPIO_InitTypeDef GPIO_InitStructure4;//GPIOA4
GPIO_InitTypeDef GPIO_InitStructure5;//GPIOA5
GPIO_InitTypeDef GPIO_InitStructure6;//GPIOA6
GPIO_InitTypeDef GPIO_InitStructure7;//GPIOA7
SPI_InitTypeDef SPI_InitStructure;
//使能:SPI IO/SPI外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//使能 SPI1 IO口
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能 SPI 外设时钟GPIOA
//重映射:SPI(NSS/SCK/MISO/MOSI)
GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_SPI1);//NSS,使用软件管理方法
GPIO_PinAFConfig(GPIOA