拿到一个供应商给的传感器,正好是项目用的上,直接进行一手研究,顺便把封装和最近搞的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点了,完整的版本就看下一篇吧。 |
|