STM Урок 211. LL. STM32F4. I2C. Подключаем внешний EEPROM



В данном уроке мы попробуем с помощью библиотеки LL поработать с шиной I2C контроллера STM32F4. В качестве подопытного устройства мы возьмём микросхему EEPROM — AT24C32, которая установлена в модуле с часовой микросхемой DS3231 и также в часовом модуле с микросхемой DS1307. С данной микросхемой мы уже неоднократно работали, в том числе и с контроллером STM32, причём с применением библиотеки LL также работали, только с серией STM32F1. Причём микросхему мы использовали с часовым модулем на микросхеме DS1307. Данный модуль мы будем использовать и сегодня.

Шина I2C у контроллера линейки STM32F4 практически ничем не отличается от той же шины контроллера STM32F1, поэтому изучать нам аппаратную составляющую не придётся и даже в инициализации шины происходят те же действия. Единственное отличие — появление в линейке STM32F4 аналогового и цифрового фильтров, вследствие чего здесь также появился следующий новый регистр — регистр управления фильтрами

 

 

Рассмотрим назначение битов данного регистра.

 

ANOFF (Analog noise filter OFF)

0 — аналоговый фильтр включен,

1 — аналоговый фильтр отключен.

 

DNF[3:0] (Digital noise filter)

0000 — цифровой шумовой фильтр отключен

0001 — цифровой шумовой фильтр включен и возможность его фильтрации — 1 * tPCLK1

1111 — цифровой шумовой фильтр включен и возможность его фильтрации — 15 * tPCLK1

 

В остальном особых отличий не замечено, поэтому достигнуть цель нашего урока — записать во внешнюю память информацию, а затем считать её — будет несложно. Также данную информацию мы отобразим затем на нашем цветном дисплее, присутствующем в отладочной плате, с которой мы в данном уроке по-прежнему работаем — STM32F429I-Discovery.

Подключим к нашей плате модуль с микросхемой к соответствующим ножкам. Питание можно брать как 3,3 вольта, так и 5. Я взял 5 вольт, так как контакт находится ближе. Общий провод платы также соединяем с общим проводом модуля, а ножки для SDA и SCL используем соответственно PB7 и PB6, не забывая в дальнейшем о том, что в Cube MX мы должны будем задействовать также именно эти ножки.

После этого наша схема будет выглядеть так

 

 

Проект за основу мы возьмём из урока 209 с именем LL_SPI_ILI9341_DMA и присвоим ему имя LL_I2C_EEPROM.

 

 

Откроем наш проект в Cube MX и включим I2C1, оставив все настройки в нём по умолчанию

 

 

Мы видим, что именно нужные нам ножки задействованы для шины

 

 

В менеджере задействуем на I2C библиотеку LL

 

 

Сгенерируем проект и откроем его в Cube IDE.

Перейдём в файл main.c и объявим два глобальных массива. Один из них будет для хранения считанных из внешнего EEPROM значений, а другой будет состоять из заранее заданных 8-битных чисел для записи в микросхему

 

 

Добавим также некоторые макросы для работы с шиной, а именно адрес SLAVE микросхемы и переменные для инициализации бита записи/чтения в адресе

 

 

Нам нужно будет также написать две функции для работы с внешней энергонезависимой памятью подобно тому, как мы делали в уроке 150 для контроллера STM32F1.

 

 

К счастью, писать нам их не придётся, так как со времён 150 урока они совершенно не изменились. Вот их код

 

 

Перейдём в функцию main(), где сначала из бесконечного цикла удалим весь пользовательский код.

Затем объявим локальный символьный массив

 

 

Настроим цвет и размер шрифта, а также цвет фона

 

 

Попытаемся записать данные в EEPROM с какого-нибудь адреса

 

 

Затем просто зажжём светодиод, чтобы убедиться, что мы не повисли и дошли до этого места

 

 

Конечно, это не даёт нам право точно быть уверенными, что все данные передались и записались в память, полную картину мы получим, когда их прочитаем оттуда. Соберём код, прошьём контроллер и увидим, что светодиод наш светится

 

 

Теперь попробуем данные с того же адреса прочитать.

Закомментируем пока вызов функции записи

 

//AT24C_WriteBytes (0x024A, wr_value, 20);

 

Прочитаем наши данные в буфер чтения и отобразим их на дисплее

 

 

Соберём код, прошьём контроллер и посмотрим результат чтения на дисплее

 

 

Данные считаны верно и отображены.

Таким образом, на данном уроке мы научились работать с шиной I2C контроллера STM32F4 с использованием возможности библиотеки LL, что позволило нам записать и считать данные по данной шине в микросхему памяти EEPROM AT24C32. Конечно, научились — это громко сказано, можно сказать повторили работу с шиной I2C. Также нам удалось прочитанные данные отобразить на цветном дисплее.

Всем спасибо за внимание!

 

 

Предыдущий урок Программирование МК STM32 Следующий урок

 

Исходный код

 

 

Отладочную плату можно приобрести здесь STM32F429I-DISCO

Модуль RTC DS3231 с микросхемой памяти (3 шт)

Модуль RTC DS3231 с микросхемой памяти (1 шт) — так дороже

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM LL. STM32F4. I2C. Подключаем внешний EEPROM

Один комментарий на “STM Урок 211. LL. STM32F4. I2C. Подключаем внешний EEPROM
  1. что то я регистра фильтров не вижу?

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

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

*