首页 > 编程知识 正文

spi协议传输速率,SPI通信的详细讲解

时间:2023-05-04 01:44:16 阅读:187829 作者:1698

SPI

SPI(Serial Peripheral Interface)协议是由摩托罗拉公司提出的通讯协议,即串行外设接口,是一种高速全双工的通信总线。SPI 总线系统是一种同步串行外设接口,它可以使 MCU 与各种外围设备以串行方式进行通信以交换信息。
分为四条分别是MISO(主设备输入(接收)、从设备输出(发送)引脚) MOSI (主设备输出(发送) 从设备输入(接收)引脚) SCK NSS
SPI 通信采用主从模式(Master Slave)架构如图 8.1 所示,一般仅支持单Master 多 slave 模式应用,时钟由 Master 控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first)

SPI总线有四种工作模式由时钟的极性CPOL和相位CPHA进行配置

(00 01 10 11)
SPI2 SPI3 挂载在总线APB1上 SPI1 挂载 APB2
APB1 为 fpclk1=36MHz,APB2 为 fpckl2=72MHz

2.4G通信
nRF24L01 是由 NORDIC 公司生产的工作在 2.4GHz~2.5GHz 世界通用 ISM频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强SchockBurstTM 模式控制器、功率放大器、晶体振荡器、调制器和解调器。输出功率、频道选择和协议等可以通过 SPI 接口进行设置
(点对点单工通信)
主要有 高频点 自应答 低功耗 低成本等优点

有八个引脚进行配置
SPI的HAL库分析
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
以阻塞方式发送数据量(等待数据发送完成)
huart1 指向结构体的指针(包含有uart的信息)
(uint8_t *)&ch 指向上面定义的数据缓冲区
1 要发送的数据元素(u8或u16)的数量
0xFFFF 设置超时的时间
释放不同的定义 #ifdef #else #endif 进行不同的选择

#ifdef 标示符   程序段1 #else   程序段2 #endif 表示:如果标示符已经被#define命令定义过,则编译程序段1,否则编译程序段22:#if 表达式    程序段1 #else   程序段2 #endif 表示:如果表达式为真,则编译程序段1,否则编译程序段2.你写出的命令应该属于格式1  它的意思是,如果在程序中没有对**进行过#defined ** 的定义。则编译下面的语句,否则不编译。这中情况多用在需要经常移植的程序模块上,或是调试的时候用.  结合使用 #if 与 #else、#elif、#endif、#define 和 #undef 指令,可以根据一个或多个符号是否存在来包含或排除代码。 在编译调试版本的代码或针对特定配置进行编译时,这会很有用。以 #if 指令开始的条件指令必须用 #endif 指令显式终止。#define 使您可以定义一个符号,通过将该符号用作传递给 #if 指令的表达式,使该表达式计算为 true。

HAL_SPI_IRQHandler(&hspi2);:处理SPI中断请求__weak void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi):SPI收入捕获反馈HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)用中断以非阻塞方式传输数据量。HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi)根据SPI_InitTypeDef中的指定参数初始化SPI,并初始化相关的句柄HAL_SPI_MspInit(hspi);初始化SPI MSP

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。