HAL库实现SPI主从通信

目录

一、SPI简介

二、spi通信模式

三、Cube_MX实现全双工spi通信

四、总结


一、SPI简介

串行外设接口 (SPI) 可与外部器件进行半双工 / 全双工的同步串行通信,该接口可配置为主模式,在这种情况下,它可为外部从器件提供通信时钟 (SCK) 。通常,SPI通过四个引脚与外部器件连接:
MISO:从模式下发送数据,主模式下接收数据
MOSI:主模式下发送数据。从模式下接收数据
SCK:SPI的时钟
NSS:从器件选择,该引脚被拉低,可让主器件和从器件进行单独通信,从而避免数据线上的竞争。
tips:
具体的spi通信协议见 http://t.csdn.cn/Vfhpw

二、spi通信模式

“全双工“通信模式:即四线模式通信

将MOSI引脚连接在一起、将MISO引脚连接在一起,通过这种方式,主器件和从器件之间以串行方式传输数据。

“半双工”通信模式1:1条时钟线和1条双向数据线 (三线模式)

 “半双工”通信模式2:1条时钟线和1条单向数据线 (三线模式)


三、Cube_MX实现全双工spi通信

(仅作为交流分享使用)题主选择全双工模式实现spi

 选择spi2做主硬件触发方式,打开中断使能,其余设置根据自己所需配置即可,我这里保持默认。其中

CPOL:时钟极性,为“1”时表示,时钟空闲时状态为高,即时钟是低有效;反之为“0”时,时钟则是高有效

CPHA:时钟相位,为“0”时表示在第一个时钟沿开始采样,即第二个时钟沿开始发送数据;为“1”时,表示在第二个时钟沿开始采样,在第一个时钟沿开始发送数据

综上,利用CPOL、CPHA可以得到00、01、10、11等四种SPI总线模式

 

 

 具体参数设置见上图

 选用spi3作为从设备,打开中断使能,其余保持默认即可

generate code完成后使用keil打开代码

将需要发送的数据tdata设置完成,rdata是接收数据。在这里需要注意一下,对于spi应该分清楚SPI没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

 

因为之前Cube_MX配置时打开了中断,这里选择中断方式实现spi的函数即可,将参数填写完成。其余实现SPI函数见下图

 

代码填写完整后,下载代码至板子上,进入debug模式

 

如图所示,从机正确收到主机发出的数据,证明spi通信成功。


 

四、总结

        以上就是利用HAL库配置spi四线模式通信的全部内容,正常来讲,把协议看一遍,利用Cube_MX这款软件就能正确配置任何你想实现的通信模式,其他两种工作模式如法炮制即可。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]:在对W25Q128 FLASH的写入数据的操作中一定要先擦出扇区,在进行写入,否则将会发生数据错误。 W25Q128 FLASH一次性最大写入只有256个字节。 在进行写操作之前,一定要开启写使能(Write Enable)。 当只接收数据时不但能只检测RXNE状态 ,必须同时向发送缓冲区发送数据才能驱动SCK时钟跳变。基于CubeMx的讲解。引用\[2\]:1.CubeMx 使能SPI1从机,注意红框中的配置参数,不明白的查资料,不想再细讲,重点是使能Hardware NSS Input Sinnal,即片选信号 2.1.CubeMx 使能SPI2主机,注意红框中的配置参数,不明白的查资料,不想再细讲,重点是使能Hardware NSS Output Sinnal,即片选信号 3.主机a:COM10开始发送aaaaa给stm32spi1 ,stm32 spi1 接收到主机a数据后,计数加一,重新赋值给rx_data;stm32 spi2 开启主机功能将最新的rx_data发送给从机a:COM8. 4.软件仿真,验证rx_data随着接收数据的数量二变化的,及从机a:com8收到的值 4.注:片选也,也可以开启软件功能,即实际收发时候主动拉高拉低片选信号或者主动拉高拉低某个个GPIO,通常使用在主从一对一的场景。引用\[3\]:w25Qxx复位函数: 函数开始先将要发送的数据(命令(0x66)和地址(0x99))存储在cmd数组中,拉低片选信号,开始SPI通信然后后通过HAL_SPI_Transmit()函数发送出去拉高片选信号,关闭SPI通信。 问题: cubemx spi主从 回答: 在CubeMx中,可以通过配置参数来使能SPI主从模式。对于SPI1从机,需要注意配置参数中的Hardware NSS Input Signal,即片选信号。而对于SPI2主机,需要注意配置参数中的Hardware NSS Output Signal,即片选信号。在主从通信中,主机可以向从机发送数据,从机接收到数据后进行处理,并可以将最新的数据发送给主机。在软件仿真中,可以验证接收数据的数量和从机收到的值是否正确。需要注意的是,片选信号可以通过硬件功能或软件功能来控制,通常在主从一对一的场景中使用。 #### 引用[.reference_title] - *1* *3* [【STM32HAL库 STM32CubeMX教程十四---SPI](https://blog.csdn.net/as480133937/article/details/105849607)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [stm32h743ViTx CubeMx spi主、从机实验](https://blog.csdn.net/dingpan119/article/details/107990246)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值