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,否则编译程序段2
2:#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
|