diff --git a/nucleo-wb55-i2c/Core/Src/main.c b/nucleo-wb55-i2c/Core/Src/main.c index 72dcffb..625bc1a 100644 --- a/nucleo-wb55-i2c/Core/Src/main.c +++ b/nucleo-wb55-i2c/Core/Src/main.c @@ -59,7 +59,21 @@ static void MX_I2C1_Init(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ +HAL_StatusTypeDef i2c_write(uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) { + //printf("I2C WRITE | address=0x%04x | size=0x%04x\n", DevAddress, Size); + return HAL_I2C_Master_Transmit(&hi2c1, DevAddress, pData, Size, Timeout); +} + +HAL_StatusTypeDef i2c_read(uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) { + //printf("I2C READ | address=0x%04x | size=0x%04x\n", DevAddress, Size); + return HAL_I2C_Master_Receive(&hi2c1, DevAddress, pData, Size, Timeout); +} +float getTemp(uint8_t * buf) { + int32_t ret = ((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | + ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]; + return (1.0 / (1UL << 16)) * ret; +} /* USER CODE END 0 */ /** @@ -105,10 +119,43 @@ int main(void) /* Infinite loop */ /* USER CODE BEGIN WHILE */ int index = 0; + HAL_StatusTypeDef i2c_status; + int ADAFRUIT_ADDR = 0x36 << 1; + const int BUF_LEN = 4; + uint8_t buf[BUF_LEN]; + uint8_t prefix[2]; + prefix[0] = 0x0; + prefix[1] = 0x4; + while (1) { - printf("test %d\n\r", index++); + //printf("test %d\n\r", index++); + //HAL_Delay(100); + + HAL_Delay(10); + + i2c_status = i2c_write(ADAFRUIT_ADDR, prefix, 2, 1000); + if (i2c_status != HAL_OK) { + printf("ERROR: %d\n", (int)i2c_status); + Error_Handler(); + } + HAL_Delay(100); + + i2c_status = i2c_read(ADAFRUIT_ADDR, buf, BUF_LEN, 1000); + if (i2c_status != HAL_OK) { + printf("ERROR: %d\n", (int)i2c_status); + Error_Handler(); + } + + //printf("Buffer: "); + for (int i = 0; i < BUF_LEN; i++) { + //printf("%d ", buf[i]); + } + //printf("\n"); + + printf("Temperature: %2.2f degree celsius\n", getTemp(buf)); + /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */