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