Данный микроконтроллер является младшим братом гораздо более известного C8T6 и отличается от него уменьшенным размером памяти программ — 32 кб и отсутствием второго интерфейса I2C. Зато он более доступный и для большинства задач вполне себе заменяет C8T6.
Но вот незадача: если работать с данным МК в среде 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 модули.