STM32F103C6T6 — что делать если не работает I2C

Данный микроконтроллер является младшим братом гораздо более известного C8T6 и отличается от него уменьшенным размером памяти программ — 32 кб и отсутствием второго интерфейса I2C. Зато он более доступный и для большинства задач вполне себе заменяет C8T6.

Карта выводов (распиновка) STM32F103C6T6.

Но вот незадача: если работать с данным МК в среде STM32CubeIDE, то интерфейс I2C отказывается работать. Не торопитесь нести плату на замену — всё дело в ошибке CubeIDE, а не в микроконтроллере!

Ремонт I2C

Чтобы устранить проблему, ищем и открываем файл:

Папка проекта/Core/Src/stm32F1xx_hal_msp.c

Затем находим функцию HAL_I2C_MspInit и добавляем там одну строку, которая отвечает за настройку скорости работы интерфейса:

  /* USER CODE BEGIN I2C1_MspInit 0 */
	  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  /* USER CODE END I2C1_MspInit 0 */

Готово! Собираем проект и загружаем программу на МК.

Полезные мысли

Для проверки I2C могу порекомендовать программу для сканирования шины I2C.

Во первых, если по UART пошли данные, значит I2C поднялся. Во-вторых, если у подключаемой периферии адрес не тот, который мы ожидаем, мы сразу это увидим.

А ещё, если нравится работать с I2C, то пожалуйте набор унифицированных модулей от RobotClass специально для подключения по I2C. Называются они QIIC модули.


Изменено:

STM32F103C6T6 — что делать если не работает I2C: 3 комментария

  1. Благослови тебя господь!
    Я день убил, чтобы решить эту проблему. Проверял линии логическим анализатором — там ничего не дрыгается. Все статьи на форумах перечитал, errata и так далее — все предложенные способы перепробовал И НИЧЕГО!
    Хотел уж просто камень менять на другую серию (там еще прикольная плюшка, что нельзя использовать ремапнутый на PB5 SPI, если инициализирован I2C1) , но увидел твою статью.
    И ВСЕ ЗАРАБОТАЛО!

    • Всегда пожалуйста. Но сейчас особого смысла нет использовать C6T6, это было актуально во времена «чипокалипсиса». Лучше C8T6, наверное, ставить.

  2. Огромное спасибо за статью.
    Перечитал много всяких умных букв на разных форумах, но дело не сдвинулось с места до сего момента. Осциллоскопом видел, что ножки не дрыгаются. Все порты работают, а I2C ни в какую. Понимал, что что-то с инициализацией не то, но понять до Вашей статьи не мог. На F0, F7 все работает, а на F1 не хочет. Век живи, век учись.
    Еще раз спасибо, дай бог Вам здоровья.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарий
Имя
E-mail

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.