Написать Свой Драйвер Для Stm32 Embedded Gui Library

Написать Свой Драйвер Для Stm32 Embedded Gui Library

Создание собственных драйверов под Linux Хабрахабр. Многие мои друзья и знакомые крутят пальцем у виска или задаются вопросом не жмт ли мне череп, когда узнают, что я пишу драйвера под Linux. Слово драйвер окутано каким то почти мистическим смыслом, и постичь Дао его написания способны лишь избранные гуру. К счастью это не так. Не знаю, как обстоят дела с написанием драйверов под другие операционные системы, в т. Для написания драйвера необходимы базовые знания языка си, представление о работе ОС линукс базовые, понимание того, что мы хотим получить, желание чтения документации и исходных кодов, ну и усидчивость. Вы хотите посмотреть как написать драйвер для своего устройстваЕсть у кого свои или может коммерческие embedded проекты. Mike Gorchak Graphics Device Driver Developer в QNX Software. Простой эксперимент попробуйте вместо резюме отправлять ссылку на свой непустой гитхаб. Prism GUI Toolkit от компании Blue Water Embedded emWin от компании SEGGER. Это значит, программисту придется написать реализацию нескольких. Каждый драйвер, входящий в состав uGFX, содержит шаблон. Тогда ныряйте под кат Лгкость написания драйверов объясняется тем, что исходный код linux великолепно задокументирован и доступен в исходниках, в сети множество примеров и куча литературы. А для создания драйвера вам нужен только любимый дистрибутив и исходники ядра, ну и компилятор под нужную вам архитектуру. Свой первый, не учебный, драйвер я писал для процессора Power. PC 8. 36. 0, он взаимодействовал с микросхемой ПЛИС и осуществлял сброс настроек по умолчанию. Как это ни странно звучит, я его сделал, немного переписав драйвер SPI для этой архитектуры. Я это говорю к тому, что единая стандартизация написания программ в ядре Linux позволяет проводить такие штуки. Настольная книга разработчика драйверов под Linux это Linux Device Drivers. Книжка является исчерпывающим руководством по разработке и если что то не хватает в книге, то это точно можно найти самостоятельно в исходниках ядра. Разумеется, данный пост не претендует на то, чтобы заменить эту замечательную книгу. Более того, написан он по мотивам прочтения оных трудов, но вс же не является кратким пересказом данной книги. Автор этих строк ставит собой цель заинтересовать читателя простотой и изяществом ОС Linux, и понизить порог вхождения людей в разработку драйверов. Поверьте это очень простоТо, для чего будем писать драйвер. Поскольку основная цель данной статьи написание драйверов, железу мы уделим минимум внимания. Я надеюсь все дружат с паяльником, а те кто не дружат настало время начать дружить, я кратко расскажу, что и как делалось. Мы будем писать драйвер для дисплея семейства HD4. LPT порт к компьютеру. Знаю, что порт древний, а типу дисплеев лет не меньше, чем мне, но вс же это красивый и простой пример написания драйверов под linux, не углубляясь в аппаратные подробности. И тем более, что переделать этот драйвер для этого экрана для других архитектур будет делом замены одной строчки Итак, нам понадобится LPT порт шнурок для старого принтера и опционально разъм CENTRONICS на 3. HD4. 47. 80, самое лучшее это минимум 4х. Ом, для регулировки контраста. Поскольку LPT порта у меня нет уже давным давно, я прикупил первую попавшуюся плату на PCI можно и PCI E. Причм плата попалась на столько китайская, что я даже не смог найти никакой документации по напаянному чипу на ней. Ничего, будем ещ и реверсить е. Аппаратные исходники. Будем считать, что достать эти компоненты не составило труда, и ваши руки горят от нетерпения вс сделать. Предупреждение Внимательно прочитатьХочу обозначить, что мы работаем в самых тяжлых условиях, с железом, да ещ и будем работать на уровне ядра. Живм, так сказать, внутри пациента. Любая ошибка в программе и ядро падает. При чм оно может даже не успеть помахать вам kernel. XL.jpg' alt='Написать Свой Драйвер Для Stm32 Embedded Gui Library' title='Написать Свой Драйвер Для Stm32 Embedded Gui Library' />Обратите внимание, что вы запустили драйвер, выгрузили его, и вдруг начались неявные глюки вс, ваш путь перезагрузка. Если система жива, то командой reboot. Если уже нет, то аппаратный reset. Хотя при тяжлых случаях иногда система может сама себя перезагрузить. Плюс, если вы не знаете что делаете пишете в порт, обращаетесь к областям памяти и т. Ибо вс это в лучшем случае может сбить настройки записанное неверное значение в порт 7. BIOS в х. 86 или даже попортить оборудование например посадив ножку GPIO на землю. Поэтому чтко понимайте что вы делаете, как на аппаратном, так на программном уровне Приступаем. Для счастливых обладателей встроенного lpt порта в свом компьютере скажу, что в вашем случае порт живт по стандартному адресу 3. Меня можно среди ночи разбудить и я скажу эту цифру, столько с ней связанно. Но ныне нам дали вражескую плату, и нам предстоит е победить Вставляем плату в слот PCI или PCI E, загружаемся и смотрим что у нас происходит на шине PCI следующей командой lspci v. Но нас более всего интересует адреса, на которых сидит данный порт. Это строки IO ports, а именно цифры c. Нам теперь нужно найти какие же адреса за что отвечают. Для этого к порту вывода подключим светодиоды с резисторами примерно по такой схеме резисторы примерно 3. Ом, или больше или меньше, не важноСхема проверки. Поскольку у меня уже есть заготовка светодиодов для теста такого рода, то я вставлял провода прямо в разъем CENTRONICS и у меня не влезло все 8 штук проводов, поэтому вставил только 6 первые 4 и последние два. Собранный тестер порта. И набросаем небольшую программку для проверки. Для работы с портом я взял пример отсюда www. Linux miniIO Port Programming. Единственное, что надо исправить строку include lt asmio. Делаем нормальные задержки в секунду вместо usleep1. BASEPORT. outb0x. AA, BASEPORT. outb0x. FF, BASEPORT. Дефайн define BASEPORT меняем на порт 0xc. Компилируем, запускаем из под рута светодиоды не горят. Меняем на другую цифру 0xc. Нуль. На выводах AAh. И, разумеется через секунду FFh. Результат налицо. LPT порт данной платы живт по адресу. Xc. 02. 0 Хочу обратить внимание программистов жестянщиков на магическое число 0x. AA это последовательность единиц и нулей. Вот так 1. 01. 01. Это очень удобно для всяких отладок. А вообще всякий кто работает с железом должен легко в уме переводить двоичное, десятичное, шестнадцатеричное туда сюда обратно. Таки дисплей. Барабанная дробь, настало время собрать железку воедино Для этого нам осталось вс спаять вместе. Вс собираем по следующей схеме. Знаю, что схема не по ГОСТу, но это и не журнал РадиоДля питания экрана я распатронил провод USB, и сейчас у меня к экрану идут два провода. Есть хитрый вариант, просто до него никак не доходят руки это пустить питание USB прямо в проводе LPT, отпаяв один из многочисленных земляных проводов. Как дойдут руки обязательно сделаю. Допишу только эту статью. В результате, после подачи питания, мы должны получить что то вроде этого. Подрегулируйте яркость резистором, чтобы появились две полоски. Они свидетельствуют нам о том, что дисплей не проинициализирован. Девайс в сборе. Фух, с аппаратной частью мы закончили, пришла пора переходить к программе. Приступаем злобным опытам с экраном в программе. В качестве готовой либы для работы с дисплеем использовал код от Arduino взятый отсюда. Я тоже не люблю эту платформу, но код годный для дисплеев, подключаемых по I2. C. Если последнее слово вам ни о чм не говорит, не пугайтесь. Суть такова, что тот же самый дисплей подключн по двум проводам как следует из названия шины, а далее там стоит регистр, который снова преобразует переданный байт в параллельную шину, прям как у нашего LPT порта. В результате выкинув часть работы с I2. C, получим годную либу. Для чистоты переписал на сях, добавил парочку нужных функций, переименовал некоторые конфликтные, сделал ещ какие то изменения не помню, много воды утекло и получил конфетку. К слову сказать код использовался на STM3. I2. C. А теперь мы его портируем уже на х. Вот она великая сила переносимости кода Потратив всего 1. Работа с портом осуществляется в одной единственной функции это непереносимый узел, и в зависимости от платформы способ вывода следует менять. Тут был вывод по I2. C void expander. Writeunsigned char Заменив е, код можно запустить в AVR, STM3. MIPS и т. Уже знакомый нам вывод в порт. Дефайн порта определяем в хедере lcd. Вс, теперь можно попробовать сделать вывод. Программа стала ещ проще и нагляднее. Для вывода на экран используется функция обртка print. STM3. 2F4 Начнем программировать Cube. MX Конкретно о подходах и программировании того или иного кристалла и его особенностей мы поговорим дальше, а сейчас просто рассмотрим этапы проектирования и реализации прошивок для микроконтроллеров, который почти одинаков, во многих видах микроконтроллерах с какими то малыми изменениями. Рассмотрим их. Оглавление. Этапы проектирование ПО для микроконтроллеров STM3. Установка компилятора. Начинаем работать с STM3. Cube. MX. Структура STM3. Cube. F4. Настройка системы в Cube. MX. Окно Настройки кристалла. Окно Схема тактирования МК. Окно Конфигурация Элементов МК. Программируем в Keil. Генерируем инициализационный код, наконец то. Начинаем программировать. Ура мы запустили Keil. HALLED. Используемые материалы. Этапы проектирование ПО для микроконтроллеров STM3. В этой статье мы покажем, какой необходимый набор программных средств и действий необходимо сделать для того, чтобы начать программировать и управлять ядром ARM производства ST. Наш Опыт программирования различных процессоров начиная с архитектуры х. С5. 1, AVR, Nios. II, Tiger. Shark, ну и конечно STM3. Конкретно о подходах и программировании того или иного кристалла и его особенностей мы поговорим дальше, а сейчас просто рассмотрим этапы проектирования и реализации прошивок для микроконтроллеров, который почти одинаков, во многих видах микроконтроллерах с какими то малыми изменениями. Рассмотрим их. Установка компилятора. Самих компиляторов очень много под архитектуру ARM, вот основные и наиболее популярные. Качаем его Ссылка https www. Или какой нить не ниже 5. Х. Установив переходим к установке системной вещи под названием Cube. MX. 3. STM3. 2Cube. Проект По Реконструкции. MXРис. 3. 1 Обзор прицепов работы с Cube. MXSTM3. 2Cube. MX это генератор инициализационного кода для семейства STM3. STM3. 2Cube является комплексным программным решением, комбинируя встроенное программное обеспечение элементов MCU на базе программного обеспечения STM3. Cube. MX. Встроенное программное обеспечение не только охватывает все микроконтроллеры STM3. RTOS, USB, TCP IP, файловая система или графика. STM3. 2Cube. MX помогает пользователю настроить STM3. MCU распиновку, цепи тактирования и периферию и программное обеспечение стеки. Она также может помочь оценить энергопотребление благодаря калькулятору расчета потребляемой мощности. В STM3. 2Cube встроены библиотеки программного обеспечения и STM3. Cube. MX генератор кода конфигуратор может быть использован независимо друг от друга, но их полный потенциал достигается когда они используются вместе как только MCU настроен, Пользователь может генерировать инициализационный C код, основанный на произведнных настройках в STM3. Cube. MX. Свои примеры мы будем показать на отладочной плате STM3. F4. 29. I DISCO. Рис. Вид отладочной платы STM3. F4. 29. I DISCOСсылка на страницу STM3. Cube. MX для всех семейств http www. FM1. 47CL1. 79. 4SC9. SS1. 53. 3PF2. 59. Ссылка на страницу STM3. Cube. MX для семейства STM3. F4 набор библиотек. Начинаем работать с STM3. Cube. MXОбщие принципы работы в STM3. Cube. MX создаем проект, выбираем микроконтроллер и нам сразу же предлагается большая схема со всеми выводами выбранного нами контроллера. Нажимая на выводы и заходя в разнообразные меню, мы легко настраиваем как периферию, так и режимы работы каждого конкретного вывода. Сразу же очевидные плюсы можно наглядно увидеть, какие выводы уже заняты, а какие еще свободны в крупных проектах более чем полезная фишка. Как все это работает мы еще увидим на примере, а пока обсудим в общих чертах Итак, мы выбрали все нужные нам выводы, ввели все настройки периферии например, частоты тактирования, режимы работы таймеров. То есть в итоге мы получаем готовый проект, с уже прописанными настройками, с подключенными библиотеками и с готовой инициализацией всей выбранной периферии. Базой для всего этого являются библиотеки CMSIS и HAL. В принципе, и структура и функции этих библиотек очень схожи, но HAL более заточена под принцип вызвал функцию и сразу заработало. Для тех, кому не особо хочется возиться с какими то низкоуровневыми настройками периферии то что надо Естественно, на данный момент библиотека еще сыровата, есть некоторые недоработки, но с каждым новым релизом ситуация все лучше и лучше. Перейдем к практике. И тут я решил остановить свой выбор на семействе STM3. F4, хотя это не имеет особого значения, поскольку мы всего лишь хотим ознакомиться с функционалом и принципом работы STM3. Cube. Mx. Итак ST предлагают нам во первых, собственно, сам STM3. Cube. Mx в скачанном архиве будет. STM3. 2Cube Firm. Ware F4. Несмотря на почти одинаковые названия архивов на сайте ST это абсолютно разные вещи. Cube. Mx готовый софт для конфигурирования периферии, Cube FW набор множества библиотек. Структура STM3. 2Cube. F4. Распаковываем архив и начинаем ковырять Рис. Структура папок STM3. Cube. F4. Количество примеров для определнных отладочных плат. Рис. Программные компоненты, реализованные в STM3. Cube. F4. Программная архитектура STM3. Cube. F4. Правило API именования BSP. Он обеспечивает общий, мульти экземпляр и функционально ориентированные интерфейсы, которые позволяют чтобы разгрузить реализацию пользовательского приложения, предоставляя готовые к использованию процессов. Для примера для периферийных устройств связи I2. S, UART он обеспечивает интерфейсы позволяющие инициализации и настройки периферийного уровня, управлять передачей данных на основе опроса, прерываниями или DMA процессом и управлять ошибками связи с которые могут возникать во время коммуникация. HAL Драйверы API делятся на две категории o общие интерфейсы API, которые обеспечивают общие и определенные функции на всех сериях расширения API,o STM3. Основные примеры периферийного использования этот слой содержит примеры основных операций в STM3. F4 периферии используя только ресурсы HAL и BSP. Например, Fat. Fs Реализует дисковый ввод вывод драйвер для доступа к диск Micro. SD или USB Mass Storage Класс. Основные особенности каждого компонента промежуточного программного таковы o USB Host и Device Библиотеки классы Несколько USB поддерживаются запоминающих, HID, CDC, DFU, аудио, MTP Поддержка мульти функции пакетной передачи позволяет отправлять большие объемы данныхбез разделения их на макс трансфертов размер пакета. Использует файлы конфигурации, чтобы изменить ядро и конфигурацию библиотеки без изменения кода библиотеки только чтение. Включает в себя 3. DMA основе в Highspeed Режимы. Поддержка мульти USB OTG основные экземпляры из пользовательского уровня через конфигурационный файл Позволяет работать с более чем одним USB хост устройство периферии. RTOS и Автономная работа Связь с низкоуровневым драйвером осуществляется через уровень абстракции, используя. Файл конфигурации, чтобы избежать каких либо зависимости между Библиотекой и низкого уровня драйвера. Стек STem. Win Графический Профессиональные решения для развития GUI на основе EMWIN Segger в решение Оптимизированные драйверы дисплея Программы для генерации кода и редактирования растрового STem. Win Builder. Настройка системы в Cube. MXПопробуем создать проект для нашей отладочной платы STM3. F4. 29. I DISCO Рис. Стартовое окно. Выбираем новый проект New. Project. Сразу же открывается окно с огромным количеством настроек, в котором нам необходимо выбрать микроконтроллер, который мы собираемся использовать в нашем проекте. Я выбрал STM3. 2F4. I. Появляется новое окно Рис. Окно выбора либо кристалла, либо отладочной платы. Выбираем закладку Board. Selector и видим следующее окно Рис. Окно выбора либо кристалла, либо отладочной платы с общим описанием платы. Далее двойным щелчком выбираем плату и видим опять новое окно J. Окно Настройки кристалла. Рис. Окно Настройки кристалла. В окне на рис. Показаны два поля 1 ое, позволяет настроить те или иные регистры в заданные состояния, а справа, во втором окне, задана цоколевка кристалла. Если заметить, то на многих пинах уже заданы определенные настойки. Допустим на пинах PC1.

Написать Свой Драйвер Для Stm32 Embedded Gui Library
© 2017