# Диагностическая утилита DS_I2CScanner Программный модуль для автоматического сканирования шины I2C на микроконтроллерах STM32 (HAL). Позволяет определить 7-битные адреса всех физически подключенных к шине ведомых устройств (датчиков, дисплеев, памяти) без использования громоздких функций логирования вроде `printf`. ## 📌 Принцип работы Утилита опрашивает устройства на шине I2C с помощью функции `HAL_I2C_IsDeviceReady`. Если устройство присутствует по запрашиваемому адресу, оно возвращает сигнал подтверждения (ACK). Найденные адреса заносятся в переданный пользователем массив. ## 💻 Пример использования в `main.c` ```c #include "DS_I2CScanner.h" extern I2C_HandleTypeDef hi2c1; // Создаем буфер для хранения найденных адресов #define MAX_I2C_DEVICES 10 uint8_t discovered_addresses[MAX_I2C_DEVICES]; int main(void) { // ... Автоматическая инициализация HAL, SystemClock, I2C ... /* Запуск сканирования шины I2C1 */ DS_I2CScan(&hi2c1, discovered_addresses, MAX_I2C_DEVICES); /* После выполнения в массиве discovered_addresses будут лежать адреса. Например, если подключен датчик TMP112, один из элементов будет равен 0x48. Конец списка ограничен нулевым значением. */ while (1) { // Основной цикл программы } } ``` ## 📋 Справочник API функций ### `void DS_I2CScan(I2C_HandleTypeDef *I2C, uint8_t *Result, uint8_t maxNumResults)` Выполняет полный цикл перебора адресов на выбранной аппаратной шине. * **`I2C`**: Указатель на структуру управления `I2C_HandleTypeDef` (например, `&hi2c1`). * **`Result`**: Указатель на массив `uint8_t`, куда будут записаны адреса найденных устройств. * **`maxNumResults`**: Размер массива `Result` во избежание переполнения буфера.