實不相瞞,我覺得這個芯片就有毛病設計的,寄存器也不多,數據輸出也不是走數字接口,但是就要用SPI接口。尤其腦電這種東西兩個芯片能夠?真的裂開了。。。

2個KS1092掛在同一個SPI上面,然后使用不同的CS控制
KS1092 采用帶通放大器。由于高通濾波特性的超低截止頻率,信號可能需要幾秒鐘才能穩定下來。當電極首次連接時,此穩定時間可能會給用戶帶來不受歡迎的延遲。
為了解決這個問題,KS1092 的快速恢復引腳 (PIN8: FR) 可以由外部信號控制。通過將 PIN8: FR 設置為高狀態,將激活快速恢復模式。

這個是STM32 上面的兩個SPI接口

然后圍繞下面的空余IO設置一下,完全使用IO模擬,不用硬件。

設置情況

大概就是這樣

寄存器也就這樣的

設計這樣的函數,SPI單獨的和封裝的傳感器讀取寫入,以及快速穩定

首先是初始化函數,按照數據手冊的順序開關對應的引腳,最后控制SPI

這個功能也簡單,就是IO控制就行

還有關

因為是多個器件,所以寫了這樣的函數,來手動控制對應的器件
void KS1029_Write_One_Byte(uint8_t Bytein){uint8_t Byte = Bytein;uint8_t len = 0;HAL_GPIO_WritePin(KS1092_1_SCLK_GPIO_Port, KS1092_1_SCLK_Pin, GPIO_PIN_SET); // SCLK Highfor (len = 0; len < 8; len++){if ((Byte & 0x80)){HAL_GPIO_WritePin(KS1092_1_SDI_GPIO_Port, KS1092_1_SDI_Pin, GPIO_PIN_SET); // SDI High}else{HAL_GPIO_WritePin(KS1092_1_SDI_GPIO_Port, KS1092_1_SDI_Pin, GPIO_PIN_RESET); // SDI Low}Byte = Byte << 1;Delay_us(5);HAL_GPIO_WritePin(KS1092_1_SCLK_GPIO_Port, KS1092_1_SCLK_Pin, GPIO_PIN_RESET); // SCLK LowDelay_us(5);HAL_GPIO_WritePin(KS1092_1_SCLK_GPIO_Port, KS1092_1_SCLK_Pin, GPIO_PIN_SET); // SCLK HighDelay_us(5);}}
uint8_t SPI_ReadWriteByte(uint8_t byte){uint8_t receivedByte = 0;for (int i = 0; i < 8; i++){// Generate clock rising edge for readingHAL_GPIO_WritePin(KS1092_1_SCLK_GPIO_Port, KS1092_1_SCLK_Pin, GPIO_PIN_SET);Delay_us(1);// Read MISO and store it in the lowest bit of the received bytereceivedByte <<= 1;if (HAL_GPIO_ReadPin(KS1092_1_SDO_GPIO_Port, KS1092_1_SDO_Pin) == GPIO_PIN_SET){receivedByte |= 0x01;}// Write data bit to MOSIif (byte & 0x80){HAL_GPIO_WritePin(KS1092_1_SDI_GPIO_Port, KS1092_1_SDI_Pin, GPIO_PIN_SET);}else{HAL_GPIO_WritePin(KS1092_1_SDI_GPIO_Port, KS1092_1_SDI_Pin, GPIO_PIN_RESET);}byte <<= 1; // Prepare the next bit to sendDelay_us(1);// Generate clock falling edge for writingHAL_GPIO_WritePin(KS1092_1_SCLK_GPIO_Port, KS1092_1_SCLK_Pin, GPIO_PIN_RESET);Delay_us(1);}return receivedByte;}
KS1029_Write_One_Byte函數實現了單字節的寫操作
SPI_ReadWriteByte函數則實現了雙向數據傳輸,既可以發送數據,也可以接收數據
? ?----------------------------------------------------------------------
軟件SPI:通過軟件控制GPIO引腳實現SPI通信,靈活性高,但效率較低。
硬件SPI:使用微控制器內部的硬件SPI模塊進行通信,效率高,速度快,但靈活性相對較低。

在代碼里面運行這個就行
為了應對上面的情況,我也設計了一個MSPM0L1106+KS1092的單獨方案,使用一顆MCU,將SPI轉換為IIC,做到多個傳感器一次掛在一個接口上面,節省IO以外還可以擴展多通道檢測通道。至于什么時候寫,看我時間。
