拿到一个供应商给的传感器,正好是项目用的上,直接进行一手研究,顺便把封装和最近搞的SPI用起来。
关于SPI的相关知识可以先去看我写的两个文章。
【资料图】
这个是国产的传感器框图
国外的一款
这个地方是使用协议时候一些要注意的地方
标准的CMOS器件
测量时候的一些点参数,算功耗的时候有用
灵敏度有点小
这个是几倍于国产芯片的灵敏度
芯片安装时候的方向
方向
我们先从测量法方式开始封装
SPI的通讯使用的是模式3
主机一开始发送的0001就是一个COMMAND,连续测量的意思,接着就是对里面的ZYXT进行测量,接着把发送的权力交给我们的从机,从机开始工作。
对应的把里面的一个项设置1就是对这个通道进行测量。
OK,这就是第一步,我们把commad做好
第二个也是这样的封装
我们这个在使用SPI信号的时候需要有一个拉低信号线的操作
这两行宏定义是对SPI通信中的片选信号引脚进行控制的。
#define CS_Clr() HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET)
CS_Clr()定义了拉低片选信号的操作。
它调用了HAL库的GPIO写引脚函数,将CS_GPIO_Port端口的CS_Pin引脚写入GPIO_PIN_RESET低电平。
#define CS_Set() HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET)
CS_Set()定义了拉高片选信号的操作。
同样通过HAL库GPIO函数,将同一片选引脚写入GPIO_PIN_SET高电平。
这样,在代码中可以通过简单调用CS_Clr()和CS_Set()两个宏来控制SPI的片选信号,不需要每次都写一长串GPIO控制代码。
这个时序图就是我们的读寄存器
读这个0x16寄存器的位置,这个数值
22->88,这个确实是要移动2位
可以按照上面封装的样子把读取的传感器地址写好
把这个操作合并在一起第一个八位是操作,后一个八位是寄存器的地址,但是要注意移位。
我们发送两个字节,所以这里就是2,接着回收的数据的数据是3个字
这个地方就是一个字节
data这里就要连续传输了,要2个字节
数据在此
查资料看见的
文章应该还有很长的,马上要12点了,完整的版本就看下一篇吧。
编辑:黄飞
标签: