Files
DS_Library_Docs/docs/DS_I2CScanner.md
T
2026-06-27 00:39:04 +03:00

2.6 KiB

Диагностическая утилита DS_I2CScanner

Программный модуль для автоматического сканирования шины I2C на микроконтроллерах STM32 (HAL). Позволяет определить 7-битные адреса всех физически подключенных к шине ведомых устройств (датчиков, дисплеев, памяти) без использования громоздких функций логирования вроде printf.

📌 Принцип работы

Утилита опрашивает устройства на шине I2C с помощью функции HAL_I2C_IsDeviceReady. Если устройство присутствует по запрашиваемому адресу, оно возвращает сигнал подтверждения (ACK). Найденные адреса заносятся в переданный пользователем массив.

💻 Пример использования в main.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 во избежание переполнения буфера.