Продолжаем программирование линейки контроллеров STM32F4 с использованием библиотеки LL.
Я решил немного перескочить некоторые части привычного алгоритма изучения библиотек и перейти сразу к шине SPI.
Данное решение принято было потому, что в плате STM32F429I-DISCOVERY, с которой мы работаем, установлен дисплей TFT разрешением 240×320 пикселей на контроллере ILI9341, который подключен к контроллеру как по интерфейсу LTDC, так и по шине SPI. Насчёт LTDC пока вопрос остаётся открытым, так как для него пока, видимо, библиотека LL ещё не написана, по крайней мере в последней на данный момент версии Cube MX мы при всём желании не можем задействовать на интерфейс LTDC данную библиотеку. Поэтому с дисплеем поработаем пока с использованием шины SPI. Дисплей нам постоянно будет требоваться в работе для мониторинга тех или иных состояний и значений, поэтому и было принято данное решение. Заодно и шину SPI рассмотрим.
Модуль SPI у контроллеров серии F4 устроен аналогично серии F1, практически без отличий, а вернее он вообще абсолютно такой же
STM32F429 Discovery board — TouchGFX demo Running using only one framebuffer (internal RAM)
Это даёт нам также возможность использовать материалы данного урока для подключения аналогичного дисплея к контроллерам серии F1 по шине SPI.
Что касается регистров, то там из изменений лишь наличие бита FRF (Frame format) в регистре CR2.
С дисплеем TFT разрешением 240×320 на контроллере ILI9341 мы неоднократно работали, в том числе и с использованием шины SPI, правда с использованием библиотеки HAL и с контроллером F1. Но то, что шина устроена точно так же, а также то, что с шиной SPI мы также с использованием библиотеки LL работали, применяя контроллер F1, то нам это значительно облегчит задачу.
Исходя из схемы к плате, подключен наш дисплей к шине SPI5, а ножки, в том числе и управляющие распределились следующим образом
PD12 — RESET
PC2 — CS
PD13 — DC
PF7 — SCK
PF9 — MOSI
Значит с таким учётом и будем настраивать наш проект в Cube MX, который мы сделаем из проекта прошлого занятия с именем LL_TIMER и присвоим ему новое имя LL_SPI_ILI9341.
Откроем наш проект в Cube MX и первым делом отключим таймер, он нам не потребуется
Включим SPI и настроим битрейт
STM32 и FSMC. Часть 2. Вывод изображения на дисплей.
Совсем недавно мы познакомились с работой FSMC в STM32, подключили дисплей и раскрасили его разными цветами (вот). И пока еще не забыли все, что обсуждали в прошлой статье, давайте выведем на дисплей, что-нибудь поинтереснее, а именно какую-нибудь картинку.
Что же нам для этого понадобится?
Ну во-первых сама картинка. Находим какое-нибудь изображение размером 320*240. Я секунд за 20 нагуглил подходящую картинку — кадр из фильма Железный Человек, реклама которого, кстати, последние пару недель находится абсолютно везде что в интернете, что на улице )
STM32F429I-DISCO & TouchGFX Setup
Время традиционной вставки: поскольку компания STMicroelectronics прекратила поддержку библиотеки SPL, которая использовалась в этом курсе, я создал новый, посвященный работе уже с новыми инструментами, так что буду рад видеть вас там — STM32CubeMx. Кроме того, вот глобальная рубрика по STM32, а также небольшая подборка на смежную тему из нового курса:
- Подключение дисплея на базе ST7735 к микроконтроллеру STM32.
- Дисплей на базе ST7735 и STM32. Вывод изображения.
- Дисплей на базе контроллера SSD1306. Библиотека для STM32.
- STM32 и семисегментный индикатор. Динамическая индикация.
Итак, мы подготовили то, что надо загрузить в память дисплея. Необходимо как-то преобразовать готовую картинку в массив чисел, соответствующих каждому отдельному пикселю. Но для начала конвертируем наш файл в формат bmp, это нам понадобится для дальнейших махинаций. Для того, чтобы получить необходимые данные из bmp файла воспользуемся отличнейшей утилитой от Segger под названием Segger Bitmap Converter. Дружно скачиваем ее, устанавливаем и запускаем.
Давайте разбираться как с помощью этой программы конвертировать изображение в нужный нам вид. А довольно-таки просто. Заходим в меню File->Open и первым делом загрузим нашу картинку. Кстати, ее необходимо еще повернуть на 90 градусов, чтобы она легла на дисплей как надо. Получаем вот что:
В меню Image видим интересный пункт Convert To. Но я, честно говоря, не понял практического смысла этой кнопки, поскольку даже при адском тыкании на разные выходные форматы ничего так и не произошло ) Поэтому идем снова в меню File и жмем на Save As. В появившемся диалоговом окне задаем имя файла, а в поле тип файла выбираем ”C” bitmap file:
Появляется еще одно окно и вот тут то уже мы можем выбрать требуемый формат. Выбираем High Color (565), red and blue swapped и, нажав ОК, получаем готовый .с файл с сохраненным массивом данных для нашего изображения.
Далее я последовал следующий путем. В проект из предыдущей статьи (ссылка была в начале) я добавил еще один файл fsmc.h, в котором объявил массив и просто скопировал в него значения, которые выдала утилита Segger Bitmap Converter. Получилось вот что:
/***************************************************************************************/ const unsigned short picture[] = < 0x0021, 0x0021, 0x0021, 0x0021, 0x0042, 0x0042, 0x0042, 0x0042, 0x0063, 0x0063, 0x0063, 0x0063, 0x0084, 0x0084, 0x0084, 0x0084, 0x0085, 0x00A5, 0x00A5, 0x00C5, 0x00C6, 0x00C6, 0x00E6, 0x00E7, 0x00E7, 0x0107, 0x0108, 0x0108, 0x0128, 0x0128, 0x0129, 0x0129, 0x0149, 0x0149, 0x0149, 0x0149, 0x014A, 0x014A, 0x014A, 0x014A, 0x014A, 0x014A, 0x014A, 0x014A, 0x014B, 0x016B, 0x014B, 0x014B, 0x014B, 0x014B, 0x012B, 0x010A, 0x00E9, 0x00E9, 0x00C9, 0x00A8, 0x00A9, 0x00A8, 0x00A8, 0x00A8, 0x00A8, 0x00A8, 0x00C9, 0x00C9, 0x00EA, 0x00EA, 0x012B, 0x014B, 0x014C, 0x016C, 0x016C, 0x014B, 0x012B, 0x010B, 0x010A, 0x010A, 0x010A, 0x010B, 0x014B, 0x016C, 0x018C, 0x016C, 0x016C, 0x018C, 0x018C, 0x018C, 0x016B, 0x016B, 0x016B, 0x016C, 0x018C, 0x016C, 0x014B, 0x010B, 0x010B, 0x010B, 0x012B, 0x012B, 0x012B, 0x012B, 0x012B, 0x010A, 0x010A, 0x012B, 0x00EA, 0x010A, 0x00C8, 0x00A8, 0x0108, 0x00E8, 0x0149, 0x224D, 0x094A, 0x0108, 0x096A, 0x098A, 0x0129, 0x0129, 0x0109, 0x0129, 0x0108, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x0108, 0x0109, 0x0108, 0x0108, 0x00E8, 0x00E7, 0x00E8, 0x00E8, 0x0108, 0x00E8, 0x00C7, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x00E8, 0x0108, 0x0108, 0x0108, 0x0108, 0x0129, 0x0129, 0x0149, 0x0149, 0x0149, 0x0149, 0x016A, 0x016A, 0x016A, 0x016A, 0x016A, 0x016A, 0x018A, 0x018A, 0x018A, 0x018B, 0x018B, 0x01AB, 0x01AB, 0x01AB, 0x01AB, 0x01AB, 0x01CB, 0x01CB, 0x01CB, 0x01CB, 0x01CB, 0x01EC, 0x01CC, 0x01CC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01EC, 0x01ED, 0x01ED, 0x01ED, 0x01ED, 0x01ED, 0x020D, 0x020D, 0x020D, 0x020D, 0x020D, 0x020D, 0x020D, 0x020D, 0x022D, 0x022D, 0x022D, 0x022D, 0x022D, 0x022D // . и дальше еще море различных значений. /***************************************************************************************/
Теперь еще пара небольших правок в функции main():
/***************************************************************************************/ int main() < int i; initAll(); initLCD(); // Начальный и конечный адреса по горизонтали writeLCDCommand(0x0050, 0); writeLCDCommand(0x0051, 239); // Начальный и конечный адреса по вертикали writeLCDCommand(0x0052, 0); writeLCDCommand(0x0053, 319); writeLCDCommand(32, 0); writeLCDCommand(33, 0); *(uint16_t *) (LCD_REG) = 34; for (i = 0; i < 76800; i++) < writeLCDData(picture[i]); >delay(0x0FFFFF); while(1) < >> /***************************************************************************************/
И вот, в принципе, все готово. Заливаем программу в контроллер и получаем результат:
В дальнейшем думаю еще что-нибудь замутим с STM32 и дисплеем, что-то мне понравилось это дело )
Источник: microtechnics.ru
STM32F429I-DISC1, Отладочная плата на базе MCU STM32F429ZIT6 (ARM Cortex-M4), ST-LINK/V2-B, gyroscope, 2.4″ LCD
STM32F429I-DISC1 – это отладочная плата из популярной серии Discovery производства ST Microelectronics для изучения возможности высокопроизводительного микроконтроллера STM32F429 с ядром ARM Cortex-M4.
Плата включает в себя все необходимое для быстрого старта разработки: внутрисхемный программатор ST-LINK/V2-B, 2.4″ QVGA TFT LCD, 64-Мбит SDRAM, ST MEMS гироскоп, разъем USB OTG micro-AB, светодиоды и кнопки.
Особенности:
— Микроконтроллер STM32F429ZIT6, ARM Cortex-M4, Flash 2 Мбайт, RAM 256 Кбайт;
— Встроенный программатор/отладчик ST-LINK/V2-B;
— Доступен ресурс ARM mbed — (http: //mbed.org);
— Функции USB: отладочный порт, виртуальный COM порт,
— USB функции: порт отладки, виртуальный COM порт с ST-LINK/V2-B, устройство хранения (Mass storage) с ST-LINK/V2-B;
— Питание платы: через USB или от внешнего источника 3 или 5В;
— 2.4″ QVGA TFT LCD;
— 64-Мбит SDRAM
— ST MEMS 3-осевой цифровой гироскоп L3GD20;
— 6 светодиодов: LD1 (красный/зеленый) для USB коммуникаций, LD2 (красный) для индикация питания 3.3В, 2 пользовательских светодиода (LD3 (зеленый), LD4 (красный)), 2 USB OTG светодиода (LD5 (зеленый) VBUS и LD6 (красный) перегрузка по току);
— Две кнопки (пользовательская и сброс);
— USB OTG с micro-AB разъемом;
— Разъем расширения с доступом ко всем выводам микроконтроллера;
— Комплекс бесплатного программного обеспечения, в том числе различные примеры, часть пакета STM32CubeF4 или STSW-STM32138 для использования устаревших стандартных библиотек.
Технические параметры
Серия оценочной/отладочной платы | discovery | |
Ядро базового компонента | Cortex-M4 | |
Разрядность шины данных, Бит | 32 | |
Наименование базового компонента | stm32f429zi | |
Наличие USB интерфейса | да | |
Наличие установленного (в комплекте) дисплея | да | |
Наличие макетной области | нет | |
Особенности | st-link/v2-b, gyroscope, 2.4 inch lcd | |
Вес, г | 119 | |
Показать похожие |
Источник: www.chipdip.ru