分享

对一款国产的3D霍尔传感器的SPI封装.上

 云深无际 2023-08-15 发布于内蒙古

拿到一个供应商给的传感器,正好是项目用的上,直接进行一手研究,顺便把封装和最近搞的SPI用起来。

嵌入式系统低速接口-SPI

嵌入式系统低速接口-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点了,完整的版本就看下一篇吧。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多