Ich verwende ein STM32 NUCLEO-F042K6-Entwicklungsboard, um mit einem digitalen MCP4451-Pot zu interagieren. Ich möchte in der Lage sein, die Wischerwerte über i2c anzupassen. Ich verwende die STM32CubeIDE und die HAL-Bibliothek als Schnittstelle.
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);
}
Ich habe die richtige Konfiguration, aber ich erhalte immer wieder "Error Tx" auf dem seriellen Monitor. Ich habe darauf geachtet, die i2c-Leitungen mit Pull-up-Widerständen auf 3,3 V zu versorgen. Ich bin etwas ratlos, was ich tun soll.
Mein Vorgesetzter hat das Problem gefunden. Der Digitalpoti läuft mit 5 V, aber da die i2c-Leitung mit 3,3 V läuft, hat sie Digital High nicht richtig registriert. Da die STM32-Pins auf meinem Entwicklungsboard 5 V haben, bekam ich einen OK-Status, sobald ich alles auf 5 V lief.
Benutzer103380
if (ret != HAL_OK) { strcpy((char*)buf, "Error Tx\r\n");
Was sagt Ihnen das?Ron Beyer
ManojKumar
Koreanisch101
Nur ich
Koreanisch101
Koreanisch101
Koreanisch101
Nur ich
Benutzer103380
if
Aussage verstehen, sollten Sie in der Lage sein, darauf hinzuweisen, was schief gelaufen ist. Sie können lesen, wasHAL_I2C_Master_Transmit
benötigt wird, und es mit vergleichenHAL_OK
. Überprüfen Sie auch in Bezug auf das, was Justme gesagt hat, Ihre Pins auf dem Slave-Gerät, um sicherzustellen, dass Ihre Adress-Pins mit dem übereinstimmen, was Ihr Code sagt. Überprüfen Sie das Datenblatt Ihres Slave-Geräts.Koreanisch101
Nur ich
Koreanisch101