Estoy usando una placa de desarrollo STM32 NUCLEO-F042K6 para interactuar con un potenciómetro digital MCP4451. Quiero poder ajustar los valores del limpiaparabrisas a través de i2c. Estoy usando STM32CubeIDE y la biblioteca HAL para interactuar.
static const uint8_t POT_ADDRESS = 0x58;
static const uint8_t INCREMENT = 0x94;
while (1) {
buf[0] = INCREMENT;
ret = HAL_I2C_Master_Transmit(&hi2c1, POT_ADDRESS, buf, 2, HAL_MAX_DELAY);
if (ret != HAL_OK) {
strcpy((char*)buf, "Error Tx\r\n");
} else {
strcpy((char*)buf, "YEET\r\n");
}
HAL_UART_Transmit(&huart2, buf, strlen((char*)buf), HAL_MAX_DELAY);
HAL_Delay(200);
}
Tengo la configuración correcta, pero sigo recibiendo "Error Tx" en el monitor serial. Me aseguré de alimentar las líneas i2c con resistencias pull-up a 3.3V. Estoy un poco perdido en cuanto a qué hacer.
Mi supervisor encontró el problema. El potenciómetro digital funciona con 5 V, pero como la línea i2c funciona con 3,3 V, no estaba registrando el nivel alto digital correctamente. Dado que los pines STM32 en mi placa de desarrollo son de 5 V, tan pronto como ejecuté todo en 5 V, obtuve un estado correcto.
usuario103380
if (ret != HAL_OK) { strcpy((char*)buf, "Error Tx\r\n");
¿Qué le dice eso?Ron Beyer
Manoj Kumar
coreanomaníaco101
Sólo yo
coreanomaníaco101
coreanomaníaco101
coreanomaníaco101
Sólo yo
usuario103380
if
declaración, debería poder señalar qué salió mal. Puede leer lo queHAL_I2C_Master_Transmit
necesita y compararlo conHAL_OK
. También con respecto a lo que dijo Justme, verifique sus pines en el dispositivo esclavo para verificar que los pines de su dirección coincidan con lo que dice su código. Revise la hoja de datos de su dispositivo esclavo.coreanomaníaco101
Sólo yo
coreanomaníaco101