Dein Warenkorb ist gerade leer!
I2C …
I2C-Scan Beispiel
------------------------------------------------------------------
I2C Bus Scan:
------------------------------------------------------------------
#include "stm32h7xx_hal.h"
#include <stdio.h>
extern I2C_HandleTypeDef hi2c2;
void I2C_BusScan(I2C_HandleTypeDef *hi2c) {
printf("I2C-Scan gestartet (Bus: %s)...\r\n", (hi2c == &hi2c1) ? "I2C1" :
(hi2c == &hi2c2) ? "I2C2" : "Unbekannt");
for (uint8_t addr = 1; addr < 128; addr++) {
if (HAL_I2C_IsDeviceReady(hi2c, addr << 1, 2, 10) == HAL_OK) {
printf(" - Gerät gefunden bei 0x%02X (7bit)\r\n", addr);
}
}
printf("I2C-Scan abgeschlossen.\r\n");
}
------------------------------------------------------------------
Anwendungsbeispiel:
------------------------------------------------------------------
...
void StartDefaultTask(void *argument) {
HAL_Delay(500); // Warten bis alles hochgefahren
I2C_BusScan(&hi2c2); // Oder &hi2c1, je nach Bus
for (;;) {
osDelay(1000);
}
}
...
------------------------------------------------------------------
I2C MUX Scan:
------------------------------------------------------------------
#include "pca9545.h"
#include "stm32h7xx_hal.h"
#include <stdio.h>
extern I2C_HandleTypeDef hi2c2;
void I2C_Scan_MuxChannel(PCA9545_HandleTypeDef *mux, uint8_t channel) {
if (channel > 3) {
printf("Ungültiger Kanal: %d\r\n", channel);
return;
}
// Aktiviere nur diesen einen Kanal
if (PCA9545_SelectChannel(mux, channel) != HAL_OK) {
printf("Fehler beim Aktivieren von Kanal %d\r\n", channel);
return;
}
HAL_Delay(2); // kleine Pause nach Umschaltung
printf("🔍 Scan auf PCA9545-Kanal %d gestartet...\r\n", channel);
for (uint8_t addr = 1; addr < 128; addr++) {
if (HAL_I2C_IsDeviceReady(mux->hi2c, addr << 1, 2, 10) == HAL_OK) {
printf(" - Gerät gefunden bei 0x%02X\r\n", addr);
}
}
printf("✅ Scan auf Kanal %d abgeschlossen.\r\n", channel);
}
------------------------------------------------------------------
Anwendungsbeispiel:
------------------------------------------------------------------
...
void StartDefaultTask(void *argument) {
PCA9545_HandleTypeDef mux = {
.hi2c = &hi2c2,
.address = 0x70 // Je nach Verdrahtung A0-A2
};
HAL_Delay(500);
for (uint8_t ch = 0; ch < 4; ch++) {
I2C_Scan_MuxChannel(&mux, ch);
HAL_Delay(100);
}
while (1) {
osDelay(1000);
}
}
...
Tags:

Schreibe einen Kommentar