2 Commits
Author SHA1 Message Date
Mikhail 46d623cd4d Merge pull request 'Исправлено:' (#5) from Dev into main
Reviewed-on: #5
2026-06-30 09:49:15 -04:00
Mikhail 18771f535d Исправлено:
Переполнение буфера
Неполная очистка массива
2026-06-30 16:28:03 +03:00
3 changed files with 23 additions and 42 deletions
-1
View File
@@ -1 +0,0 @@
46d623cd4ddc5fedceaebbb5663a8c12e3c7f9a4
-23
View File
@@ -1,23 +0,0 @@
# 🤖 Технический контекст проекта (Сгенерировано ИИ)
# 🤖 Технический контекст проекта
### README для репозитория
**1. Краткое назначение проекта.**
Проект содержит реализацию сканера устройств по интерфейсу I2C (DS_I2CScanner.c). Назначение — обнаружение и идентификация подключённых к шине I2C устройств путём последовательного перебора адресов и проверки наличия отклика.
**2. Тип стека.**
Драйверная библиотека для микроконтроллеров с поддержкой шины I2C (STM32/ARM Cortex-M).
**3. Архитектурный разбор:**
* **Src/** — директория исходного кода проекта.
* **DS_I2CScanner.c** — реализация сканера I2C: функции для инициализации шины, перебора адресов 0x08–0x77, проверки наличия отклика на каждом адресе, вывода результатов в консоль/лог.
<!-- USER_CUSTOM_CONTEXT_START -->
# ✍️ Заметки разработчика
Библиотека для поиска устройств на шине i2c.
+22 -17
View File
@@ -2,24 +2,29 @@
void DS_I2CScan(I2C_HandleTypeDef *I2C, uint8_t *Result, uint8_t maxNumResults)
{
HAL_StatusTypeDef HAL_result = HAL_ERROR;
uint8_t NumOfResult = 0;
HAL_StatusTypeDef HAL_result = HAL_ERROR;
uint8_t NumOfResult = 0;
for (uint8_t i = 0; i < maxNumResults - 1; i++)
{
Result[i] = 0;
}
for (uint8_t addr = 0; addr < 0xFF; ++addr)
{
HAL_result = HAL_I2C_IsDeviceReady(I2C, addr, 3, 1000);
if (HAL_result == HAL_OK)
for (uint8_t i = 0; i < maxNumResults; i++)
{
Result[NumOfResult] = addr;
if (NumOfResult < maxNumResults - 1)
{
NumOfResult++;
}
Result[i] = 0;
}
// 2. Перебор стандартных 7-битных адресов (от 1 до 127)
for (uint8_t addr = 1; addr < 128; addr++)
{
if (NumOfResult >= maxNumResults)
{
break;
}
// Передаем адрес со сдвигом влево (addr << 1)
HAL_result = HAL_I2C_IsDeviceReady(I2C, (addr << 1), 3, 50);
if (HAL_result == HAL_OK)
{
Result[NumOfResult] = (addr << 1);
NumOfResult++;
}
}
}
}