赞
踩
一般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:软件模拟
从芯片手册中可以知道,硬件SPI的数据大小可从 4 位到 32 位,该芯片支持多数据选择,必须要看手册的该项规格,有些可能不支持多数据位
按照上面的配置进行选择
对于CPOL和CPHA的选择在手册中有说明
实际上对应的是SPI的
所以在cube中分别配置
生成代码
直接使用底层函数调用发送,其中用户函数的数组定义为uint16类型
使用示波器观察波形
蓝色为sck线,黄色为MOSI线,每次发送的数据位是12位。
cube中选择数据位17
编写代码,一个32位整型数组
- uint32_t da[1]={0xaaaaa};
-
- DAC8512_LD_H; //MISO数据线拉高
- DAC8512_CS_WritePin(4,0); //片选拉低
- //硬件SPI传输17位数据格式
- st=HAL_SPI_Transmit(&hspi1, da, 1, 10); //硬件SPI的数据位设置为12
- DAC8512_CS_WritePin(4,1); //片选拉高
- DAC8512_LD_L; //MISO数据线拉低
stm32 SPI的硬件底层会自动帮你处理数据格式,发送17位数据,不需要再来控制这个过程。
代码附件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。