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 модули.


Изменено:

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

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

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