电子产业一站式赋能平台

PCB联盟网

搜索
查看: 32|回复: 0
收起左侧

STM32CubeMX之SPI接口

[复制链接]

454

主题

454

帖子

2396

积分

三级会员

Rank: 3Rank: 3

积分
2396
发表于 2020-4-9 00:07:00 | 显示全部楼层 |阅读模式
本文主要介绍STM32的SPI接口、利用STM32CubeMX软件配置SPI接口及其使用方法。


01


SPI协议介绍

SPI协全称串行外围设备接口(Serial Peripheral Interface),是一种高速全双工的通信总线。主要用在MCU与ADC、DAC、FLASH等模块之间的通信。
SPI协议不同于UART,有主从之分,一个主机可以连接多个从机,通过片选信号来选择与哪个从机通讯。SPI接口包含4条线:
  • NSS:片选
  • SCK:时钟信号
  • MISO:主设备输入 / 从设备输出
  • MOSI:主设备输出 / 从设备输入

    nxm3wx4iubb64048943518.jpg

    nxm3wx4iubb64048943518.jpg


    SPI的通讯速率由时钟信号频率决定。根据时钟极性(CPOL)及相位(CPHA)不同,SPI有四种工作模式。时钟极性(CPOL)定义了时钟空闲状态电平:CPOL=0表示时钟空闲时为低电平。CPOL=1表示时钟空闲时为高电平。时钟相位(CPHA)定义数据的采集时间:CPHA=0表示在时钟的第一个跳变沿进行数据采样。CPHA=1表示在时钟的第二个跳变沿进行数据采样。

    vnyzspyvlpe64048943618.jpg

    vnyzspyvlpe64048943618.jpg




    02


    STM32CubeMX配置

    以STM32F072为例,其SPI接口配置如下:

    a4h2ujkshhy64048943718.png

    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

    vurrlrhdihf64048943818.jpg
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表