42 lines
2.6 KiB
Markdown
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` во избежание переполнения буфера.
|