当前位置:   article > 正文

STM32硬件SPI发送超8字节数据格式_stm32 spi 连续多字节传输

stm32 spi 连续多字节传输

stm32单片机的 SPI+DMA 从机接收_stm32 spi dma接收_williamlee_的博客-CSDN博客

问题原由

一般CPU提供的spi接口,支持的是整字节访问,如8bit、16bit等。而非整字节的spi外设(芯片)也是很常见,哪怕是整字节的,很多厂家也是做得与标准spi外设有差别,估计是避开专利问题。而芯片原厂提供的Demo也大多是采用GPIO模拟spi。一般情况下,根据芯片手册说明及访问时序图,可以使用CPU集成的标准硬件spi访问,以提高速度和节约CPU资源。

2常用非标spi外设

常见的非标spi外设是DAC、ADC,ADI的器件最常见。

【1】ADC,常用12bit、14bit、24bit,如AD7684、MCP3202。
【2】DAC,常用12bit、14bit、24bit。
【3】其他,电机芯片、IO扩展芯片、LED驱动芯片,如TMC2660。

我所使用的芯片型号是 STM32H723VGT6

具体的芯片信息在网址

用户手册在下面

(1条消息) 【免费】STM32H743参考手册中文版资源-CSDN文库

STM32H723VGT6_(ST(意法半导体))STM32H723VGT6中文资料_价格_PDF手册-立创电子商城 (szlcsc.com)

现使用stm32芯片通讯DAC8512芯片

 芯片手册sxDAC8512 +5V, Serial Input Complete 12-Bit DAC (szlcsc.com)

 通过上图的时序图可知,该芯片只需要接受不需要发送,并非为标准的SPI总线,我们现在的思路是使用硬件spi,只是使用SPI1SCK和SPI1MOSI,即SPI单向输出数据到DAC芯片,SPI1MISO的线不使用,CS片选线使用软件io模拟,同时按照上面的时序图定义一个io口,对LD线进行io控制,发送信号时拉高,空闲时拉低。

SCK:SPI硬件

MOSI:SPI硬件

CS:软件模拟

LD:软件模拟

1、首先看stm32芯片手册支持的多字节数据格式

从芯片手册中可以知道,硬件SPI的数据大小可从 4 位到 32 位,该芯片支持多数据选择,必须要看手册的该项规格,有些可能不支持多数据位

2、在cubemx中配置硬件SPI

按照上面的配置进行选择 

 对于CPOL和CPHA的选择在手册中有说明

 

 实际上对应的是SPI的

 所以在cube中分别配置

 生成代码

 3、用户代码的编写

 直接使用底层函数调用发送,其中用户函数的数组定义为uint16类型

使用示波器观察波形

蓝色为sck线,黄色为MOSI线,每次发送的数据位是12位。

 4、同理,我们尝试发送17位数据位

cube中选择数据位17

 编写代码,一个32位整型数组

  1. uint32_t da[1]={0xaaaaa};
  2. DAC8512_LD_H; //MISO数据线拉高
  3. DAC8512_CS_WritePin(4,0); //片选拉低
  4. //硬件SPI传输17位数据格式
  5. st=HAL_SPI_Transmit(&hspi1, da, 1, 10); //硬件SPI的数据位设置为12
  6. DAC8512_CS_WritePin(4,1); //片选拉高
  7. DAC8512_LD_L; //MISO数据线拉低

 stm32    SPI的硬件底层会自动帮你处理数据格式,发送17位数据,不需要再来控制这个过程。

代码附件

https://download.csdn.net/download/qq_27699199/88268276

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号