
拿到一個供應商給的傳感器,正好是項目用的上,直接進行一手研究,順便把封裝和最近搞的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點了,完整的版本就看下一篇吧。
編輯:黃飛
標簽: