Обратите внимание, что вы запустили драйвер, выгрузили его, и вдруг начались неявные глюки вс, ваш путь перезагрузка. Если система жива, то командой 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.