Первая итерация
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# Диагностическая утилита 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` во избежание переполнения буфера.
|
||||
Reference in New Issue
Block a user