“ 本文主要介绍STM32的SPI接口、利用STM32CubeMX软件配置SPI接口及其使用方法。”
01
—
SPI协议介绍
SPI协全称串行外围设备接口(Serial Peripheral Interface),是一种高速全双工的通信总线。主要用在MCU与ADC、DAC、FLASH等模块之间的通信。
SPI协议不同于UART,有主从之分,一个主机可以连接多个从机,通过片选信号来选择与哪个从机通讯。SPI接口包含4条线:NSS:片选SCK:时钟信号MISO:主设备输入 / 从设备输出MOSI:主设备输出 / 从设备输入
nxm3wx4iubb64048943518.jpg
SPI的通讯速率由时钟信号频率决定。根据时钟极性(CPOL)及相位(CPHA)不同,SPI有四种工作模式。时钟极性(CPOL)定义了时钟空闲状态电平:CPOL=0表示时钟空闲时为低电平。CPOL=1表示时钟空闲时为高电平。时钟相位(CPHA)定义数据的采集时间:CPHA=0表示在时钟的第一个跳变沿进行数据采样。CPHA=1表示在时钟的第二个跳变沿进行数据采样。
vnyzspyvlpe64048943618.jpg
02
—
STM32CubeMX配置
以STM32F072为例,其SPI接口配置如下:
a4h2ujkshhy64048943718.png
选择SPI1,模式为Full-Duplex Master(全双工主机模式)
硬件NSS信号关闭,手动配置某个端口为输出模式,作为片选信号。
其它参数配置根据自己所控制的从机的要求进行配置。也可根据需要打开中断或DMA传输。设置完成后点击生成代码即可。
SPI相关的函数主要包括以下几个,根据函数名和参数名基本上可以看出每个函数怎么调用,这里就不做过多介绍。
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
欢迎关注公众号"嵌入式技术开发",大家可以后台给我留言沟通交流。如果觉得该公众号对你有所帮助,也欢迎推荐分享给其他人。
vurrlrhdihf64048943818.jpg
|