From 00bb72d7b77462aed385c02325e1f0ccec475a4f Mon Sep 17 00:00:00 2001 From: "Jasper v. Blanckenburg" Date: Thu, 17 Apr 2025 21:49:58 +0200 Subject: [PATCH] Error handling for PCA9535D? --- Core/Inc/PCA9535D_Driver.h | 1 + Core/Src/PCA9535D_Driver.c | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Core/Inc/PCA9535D_Driver.h b/Core/Inc/PCA9535D_Driver.h index dd0e235..d31bd7b 100644 --- a/Core/Inc/PCA9535D_Driver.h +++ b/Core/Inc/PCA9535D_Driver.h @@ -28,6 +28,7 @@ #define PCA_I2C_BASE_ADDRESS 0x40 void PCA9535_init(I2C_HandleTypeDef* hi2c, uint8_t subadr); +HAL_StatusTypeDef PCA9535_writeRegister(uint8_t reg, uint8_t data); void PCA9535_setGPIOPinDirection(uint8_t Port, uint8_t pin, uint8_t state); void PCA9535_setGPIOPinOutput(uint8_t Port, uint8_t pin, uint8_t state); diff --git a/Core/Src/PCA9535D_Driver.c b/Core/Src/PCA9535D_Driver.c index 5220ec5..0b41ef8 100644 --- a/Core/Src/PCA9535D_Driver.c +++ b/Core/Src/PCA9535D_Driver.c @@ -31,8 +31,23 @@ void PCA9535_init(I2C_HandleTypeDef* hi2c, uint8_t subadr) { pcai2c = hi2c; deviceadr = PCA_I2C_BASE_ADDRESS | (subadr << 1); - uint8_t initalizationconfig[7] = {0x02, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}; - HAL_I2C_Master_Transmit(pcai2c, deviceadr, initalizationconfig, 7, 1000); + if (PCA9535_writeRegister(2, 0) != HAL_OK) { + Error_Handler(); + } + if (PCA9535_writeRegister(3, 0) != HAL_OK) { + Error_Handler(); + } + if (PCA9535_writeRegister(6, 0) != HAL_OK) { + Error_Handler(); + } + if (PCA9535_writeRegister(7, 0) != HAL_OK) { + Error_Handler(); + } +} + +HAL_StatusTypeDef PCA9535_writeRegister(uint8_t reg, uint8_t data) { + uint8_t dataarray[2] = {reg, data}; + return HAL_I2C_Master_Transmit(pcai2c, deviceadr, dataarray, 2, 1000); } void PCA9535_setGPIOPinDirection(uint8_t Port, uint8_t pin, uint8_t state) {