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

42 lines
2.6 KiB
Markdown

# Диагностическая утилита 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` во избежание переполнения буфера.