Главная страница
Навигация по странице:

  • Лабораторная работа, «Последовательный интерфейс UART» Задание

  • Общие сведения

  • Передача и прием данных по UART

  • Варианты заданий

  • Лабораторная работа, «I 2 C и OLED дисплей» Модуль OLED, общие сведения

  • Учебное-пособие-SDK-1.1M_beta_02_10_2019. Учебное пособие (черновой вариант) фпи и кт университет итмо санктПетербург 2019 г


    Скачать 1.52 Mb.
    НазваниеУчебное пособие (черновой вариант) фпи и кт университет итмо санктПетербург 2019 г
    Дата30.03.2023
    Размер1.52 Mb.
    Формат файлаpdf
    Имя файлаУчебное-пособие-SDK-1.1M_beta_02_10_2019.pdf
    ТипУчебное пособие
    #1025580
    страница3 из 4
    1   2   3   4
    Варианты заданий
    Вариант 1.
    Сымитировать работу светофора пешеходного перехода. В режиме по умолчанию светофор переключает цвета в следующем режиме: зелёный-мигающий зелёный-жёлтый-карсный- зелёный…, при этом период красного значительно больше. При нажатии кнопки происходит переключение с красного на зелёный, но два включения «зелёных» не могут идти сразу друг за другом – между ними должен быть период, больше или равный ¼ периода красного.
    Вариант 2.
    Реализовать простой имитатор гирлянды с переключением режимов. Должно быть реализовано не менее 4х последовательностей переключения диодов, обязательно с разной частотой мигания. Нажатие кнопки реализует переключение на другой режим. Если режим последний в списке, нажатие кнопки должно переключать на первый режим. После повторного включения режимы должны запускаться с того места, на котором были прерваны.
    Вариант 3.
    Реализовать «передатчик» азбуки Морзе. Последовательность из нажатий кнопки (короткое – точка, длинное – тире) запоминается, и после сигнала окончания ввода (долгая пауза) начинает
    «отправляться» при помощи зелёного светодиода, последовательностью быстрых (точка) и долгих (тире) мерцаний. Во время ввода последовательности после каждого нажатия двуцветный диод должен коротким мерцанием индицировать, какой сигнал был введён
    (мигание жёлтым – точка, мигание красным – тире).
    Вариант 4.
    Реализовать двоичный двухразрядный счётчик на светодиодах, с возможностью вычитания.
    Быстрое нажатие кнопки должно прибавлять 1 к отображаемому на диодах двоичному числу, по переполнению счётчика должна отображаться простая анимация: мигание обоими светодиодами, затем количество миганий зелёным светодиодом, равное количеству переполнений. Долгое нажатие кнопки должно вычитать 1 от отображаемого на диодах двоичного числа, если происходит вычитание из нуля – уменьшается на 1 количество переполнений, и отображается анимация, аналогичная анимации при переполнении.
    Вариант 5.
    Реализовать «кодовый замок». После ввода единственно верной последовательности из не менее чем восьми коротких и длинных нажатий должен загореться зелёный светодиод,

    Быковский С.В., Ключев А.О., Кустарев П.В., Платунов А.Е. ФПИ и КТ университета ИТМО
    25 индицирующий «открытие» замка. Светодиод горит некоторое время, потом гаснет и система вновь переходит в «режим ввода». Каждый неправильно введённый элемент последовательности должен сопровождаться миганием красного светодиода и сбросом в
    «начало», каждый правильный – миганием жёлтого. После трёх неправильных вводов начинает мигать красный диод, и через некоторое время возвращается в «режим ввода».

    Быковский С.В., Ключев А.О., Кустарев П.В., Платунов А.Е. ФПИ и КТ университета ИТМО
    26
    Лабораторная работа, «Последовательный интерфейс UART»
    Задание
    Разработать и написать драйверы UART для учебно-лабораторного стенда SDK-1.1M,
    с использованием и без использования прерываний. Написать тестовую программу для разработанных драйверов, которая выполняет определенную вариантом задачу.
    Общие сведения
    Интерфейс UART(USART) широко применяется в вычислительной технике для связи между цифровыми устройствами и фактически является стандартом «де-факто» для подключения периферийных устройств (самый распространённый пример – различные беспроводные модемы).
    С помощью UART соединяются отдельные микросхемы, физически располагающиеся близко, как правило – на одной плате. Для передачи сигналов между конструктивно самостоятельными устройствами и на большие расстояния сигнал UART необходимо пропустить через приёмопередатчик, преобразующий передаваемый сигнал в сигналы таких стандартов, как RS-232 (позволяет передавать сигнал на расстояние порядка
    15м) или RS-485 (осуществляет передачу сигнала на километры, при соблюдении некоторых условий и подключении ретрансляторов).
    Современные микроконтроллеры практически всегда имеют в своём составе отдельную функциональную единицу, контроллер UART(USART), аппаратно реализующую данный интерфейс. Такие контроллеры самостоятельно переключают соответствующие входы/выходы микроконтроллера, формируют и считывают сигналы. Управление контроллера процессором осуществляется через запись/чтение в соответствующие регистры, подключённые к системной шине.
    UART – последовательный интерфейс передачи данных. Это предполагает одну сигнальную линию (провод, дорожку на плате) для передачи данных в одном направлении, по которой информационные биты передаются друг за другом, последовательно.
    Стандарт UART является чисто асинхронным интерфейсом, но реализующий его контроллер, как правило, может настраиваться в широких пределах и функционировать как в синхронном, так и асинхронном режимах.
    Синхронный режим предполагает наличие средств синхронизации передатчика и приемника. Как правило, для синхронизации используют специальную линию для передачи тактовых импульсов. Информация в канале данных считывается приемником только в те моменты, когда на линии синхронизации сигнал активный.
    В асинхронном режиме посылке очередного байта информации предшествует специальный старт-бит, сигнализирующий о начале передачи (обычно логический «0»).
    Затем следуют биты данных (их обычно 8), за которыми может следовать дополнительный бит
    (его наличие зависит от режима передачи, обычно этот бит выполняет функцию контроля четности). Завершается посылка стоп-битом (логическая «1»), длина которого (длительность единичного состояния линии) может соответствовать длительности передачи 1, 1.5 («полтора стоп-бита») или 2 бит. Стоп-бит гарантирует некоторую выдержку между соседними посылками, при этом пауза между ними может быть сколь угодно долгой (без учета понятия
    «тайм-аута»). Для асинхронного режима предусмотрен ряд стандартных скоростей обмена: 50,
    75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 и 115200 bps.

    Быковский С.В., Ключев А.О., Кустарев П.В., Платунов А.Е. ФПИ и КТ университета ИТМО
    27
    Рис. 14. Временная диаграмма передачи сообщения через UART
    Скорость изменения передатчиком состояния сигнальной линии измеряется в бодах (baud) – количестве изменений состояния линии за одну секунду. В простейшем случае в линии имеется всего два состояния сигнала, т.е. одним состоянием кодируется один бит, и тогда скорость изменения состояния в бодах совпадает со скоростью передачи двоичной информации, bps (bit per second, бит/с). Однако, при использовании других методов модуляции возможны несколько состояний сигнала, что позволяет одним состоянием кодировать сразу несколько передаваемых бит, и здесь скорость передачи данных bps превышает скорость изменения сигнала baud.
    Интерфейс UART является дуплексным каналом передачи данных. Вообще, обмен данными бывает:
    1. Дуплексным – предполагает прием и передачу данных одновременно (UART, RS-
    232);
    2. Полудуплексным – данные передаются в одном направлении с возможностью смены направления (RS-485);
    3. Симплексным – данные передаются только в одном направлении.
    Передача и прием данных по UART
    Сперва, необходимо произвести настройку Pinout в STM32CubeMX:
    UART/USART подключается в разделе Connectivity со следующими параметрами:
    • Режим (Mode) – асинхронный (asynchronous);
    • Скорость (Baud Rate) – 115200 bps;
    • Длина сообщения – 8 бит;
    • Четность (Parity) – None;
    • Стоп-бит – 1;
    • Направление передачи (Data direction) – Receive and Transmit.

    Быковский С.В., Ключев А.О., Кустарев П.В., Платунов А.Е. ФПИ и КТ университета ИТМО
    28
    Рис. 15. Окно настройки pinout UART
    Для работы с UART на микроконтроллерах STM32 используется библиотека HAL (Hardware
    Abstract Layer). STM32CubeMX при генерации проекта добавляет в код функцию инициализации UART MX_UART4_Init(). static void MX_UART4_Init(void)
    { huart4.Instance = UART4; huart4.Init.BaudRate = 115200; huart4.Init.WordLength = UART_WORDLENGTH_8B; huart4.Init.StopBits = UART_STOPBITS_1; huart4.Init.Parity = UART_PARITY_NONE; huart4.Init.Mode = UART_MODE_TX_RX; huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart4.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart4) != HAL_OK)
    {
    Error_Handler();
    }
    В библиотеке HAL существует две стандартных функции, отвечающих за прием и передачу информации:
    HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t
    Timeout);

    Быковский С.В., Ключев А.О., Кустарев П.В., Платунов А.Е. ФПИ и КТ университета ИТМО
    29
    HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t
    Timeout);

    *huart
    – указатель на структуру UART_HandleTypeDef, которая содержит информацию о конфигурации для указанного модуля UART;

    *pData
    указатель на буфер данных;

    Size
    – размер данных которые будут переданы или приняты;

    Timeout
    – длительность времени ожидания.
    Варианты заданий
    Для всех вариантов реализуется два варианта программы: с использованием прерываний и без.
    Драйвер UART должен каждый принимаемый контроллером символ отсылать назад – так называемое «эхо». Каждое новое сообщение от стенда должно выводиться с новой строки.
    Связь между стендом и персональным компьютером (ПК) осуществляется с использованием терминальной программы – например, putty. Физически связь между ПК и стендом осуществляется через тот же кабель USB, через который происходит прошивка и отладка – со стороны SDK находится микросхема, которая управляется с помощью USB и формирует последовательные сигналы UART, которые подаются на входы контроллера.
    Вариант 1.
    Доработать программу «светофор», добавив возможность отключения кнопки и задание величины таймаута (период, в течение которого горит красный).
    Должны обрабатываться следующие команды, посылаемые через UART:
    ? – в ответ контроллер должен прислать состояние, которое отображается в данный момент на диодах: red, yellow, green, blinking green, режим – mode 1 или mode 2, величину таймаута (сколько горит красный) – timeout …, и задействованы ли прерывания или нет – символ I или P;
    set mode 1 или set mode 2 – установить режим работы светофора, когда обрабатываются или игнорируются нажатия кнопки;
    set timeout X – установить таймаут;
    set interrupts on или set interrupts off – включить или выключить прерывания в драйвере.
    Вариант 2.
    Доработать программу «гирлянда», включив возможность добавления четырёх новых последовательностей миганий светодиодов, и задающейся для каждой последовательности индивидуально частоты переключения состояний. Каждая вводимая последовательность должна иметь от двух до восьми состояний. В один момент времени может гореть только один диод (или не гореть ни один). Смена отображаемой в данный момент последовательности должна осуществляться нажатием кнопки или командой, посылаемой через UART.
    Должны обрабатываться следующие команды, посылаемые через UART:

    Быковский С.В., Ключев А.О., Кустарев П.В., Платунов А.Е. ФПИ и КТ университета ИТМО
    30
    • new xx – ввести новую последовательность, где x – это одна из букв g, r, y, n; «g» соответствует включению зелёного светодиода, «r» - красного, «y» - жёлтого, «n» означает, что ни один светодиод не горит; количество вводимых значений может быть от двух до восьми, ввод завершается либо по нажатию enter, либо после ввода восьми значений; после окончания ввода последовательности мерцаний стенд должен послать сообщение произвольного содержания, приглашающее ввести частоту мерцаний светодиодов (должны предусматриваться минимум три градации); ввод частоты мерцаний заканчивается по нажатию enter;
    set х – сделать активной последовательность мерцаний х, где х – порядковый номер;
    set interrupts on или set interrupts off – включить или выключить прерывания в драйвере.
    Вариант 3.
    Доработать программу, посылающую сигналы азбуки Морзе для латинского алфавита.
    Последовательность точек и тире, полученных нажатием кнопки стенда, должна дешифроваться и отправляться через последовательный канал.
    Символы, получаемые стендом через последовательный канал, должны шифроваться и
    «проигрываться» с помощью светодиода. Должна быть возможность ввода до восьми символов – они должны запоминаться стендом и проигрываться последовательно. Если в момент «мигания» приходят новые символы – они добавляются в очередь.
    Считывание нажатий кнопки и отправка дешифрованных символов должна функционировать одновременно с приёмом через последовательный канал и миганием светодиода.
    Включение/выключение прерываний должно осуществляться отправкой с ПК символа «+».
    Вариант 4.
    Доработать программу счётчика до калькулятора.
    Ввод значений производится через последовательный порт из терминальной программы, запущенной на компьютере: xxxxxyxxxxx=, где x – десятичные цифры, y – знак (+, -, *, /).
    Ввод чисел завершается либо знаком операции (для первого числа), либо знаком равно (для второго числа), либо после ввода пяти цифр.
    Размерность результата и обоих операндов должна быть short int, и должна быть предусмотрена защита от переполнения. В случае выполнения недопустимых операций
    (ответ или вводимые числа больше, чем размер переменных в памяти) должен загораться красный диод, а в последовательный канал вместо ответа выводиться слово error.
    Включение/отключение прерываний должно осуществляться нажатием кнопки на SDK и сопровождаться отправкой в последовательный порт сообщения произвольного содержания, сообщающего, какой режим (с прерываниями или без) включен.

    Быковский С.В., Ключев А.О., Кустарев П.В., Платунов А.Е. ФПИ и КТ университета ИТМО
    31
    Вариант 5.
    Доработать программу кодового замка.
    После ввода единственно верной последовательности из не более чем восьми латинских букв без учёта регистра и цифр должен загореться зелёный светодиод, индицирующий
    «открытие» замка. Светодиод горит некоторое время, потом гаснет и система вновь переходит в «режим ввода». Каждый неправильно введённый элемент последовательности должен сопровождаться миганием красного светодиода и сбросом в «начало», каждый правильный – миганием жёлтого. После трёх неправильных вводов начинает мигать красный диод, и через некоторое время система вновь возвращается в «режим ввода».
    Должно быть предусмотрено изменение отпирающей последовательности, что производится следующей последовательностью действий:
    • ввод символа +;
    • ввод новой последовательности, который завершается либо по нажатию enter, либо по достижению восьми значений;
    • стенд отправляет сообщение произвольного содержания, спрашивая сделать ли последовательность активной, и запрашивает подтверждение вводом символа y;
    • после ввода y введённая последовательность устанавливается как активная.
    Включение/отключение прерываний должно осуществляться нажатием кнопки на SDK и сопровождаться отправкой в последовательный порт сообщения произвольного содержания, сообщающего, какой режим (с прерываниями или без) включен.

    Быковский С.В., Ключев А.О., Кустарев П.В., Платунов А.Е. ФПИ и КТ университета ИТМО
    32
    Лабораторная работа, «I
    2
    C и OLED дисплей»
    Модуль OLED, общие сведения
    Дисплейный модуль WEO012865D имеет диагональ 0.96 дюйма и разрешение 128x64 точек.
    За работу модуля отвечает микросхема SSD1306BZ, обменивающаяся данными с микропроцессором через интерфейс I
    2
    C.
    Рис. 16. Формат данных, передающихся через шину I
    2
    C.
    Co – бит продолжения;
    D/C# – бит выбор данных или команды;
    ACK – подверженнее;
    SA0 – бит адреса подчиненного устройства;
    R/W# – бит выбора чтения или записи;
    S – начальное состояние;
    P – конечное состояние;
    Режим записи I
    2
    C:
    1. Ведущее устройство инициализирует передачу данных через состояние Start. Это состояние достигается сменой SDA с 1 в 0, пока SCL остается 1. (Рис. 4).
    2. Адрес подчиненного устройства соответствует состоянию Start. Адрес может быть
    «b0111100» или «b0111101» при изменении SA0 с 0 на 1.
    3. Режим записи устанавливается путем установки бита R/W в логический 0.
    4. Сигнал подтверждения будет сгенерирован после получения одного байта данных, включая ведомый адрес и бит R/W#. (Рис. 3).
    5. После передачи адреса подчиненного устройства управляющий байт или байт данных могут быть отправлены через SDA. Управляющий байт состоит из битов Co и D/C#, за которыми следуют шесть нулей. a. Если бит Co установлен как логический «0», передача следующей информации будет содержать только байты данных. b. Если бит D/C# установлен на логической «0», он определяет следующий байт данных как команду. Если бит D/C # установлен в логическую «1» определяет следующий байт данных как данные, которые будут храниться в GDDRAM.
    Указатель адреса столбца GDDRAM будет увеличиваться на единицу автоматически после каждой записи данных.
    6. Бит подтверждения будет генерироваться после получения каждого управляющего байта или байта данных.
    7. Режим записи будет завершен, когда будет применено состояние Stop. Это состояние достигается сменой SDA из 0 в 1, пока SCL остается 1. (Рис. 4).

    Быковский С.В., Ключев А.О., Кустарев П.В., Платунов А.Е. ФПИ и КТ университета ИТМО
    33
    Рис. 17. Определение состояний Start и Stop.
    Рис. 18. Определение состояния подтверждения.
    Рис. 19. Определение состояния передачи данных.
    GDDRAM – это статическое ОЗУ с битовой привязкой, содержащее отображаемый битовый массив. Размер оперативной памяти составляет 128х64 бита, и ОЗУ разделено на восемь

    Быковский С.В., Ключев А.О., Кустарев П.В., Платунов А.Е. ФПИ и КТ университета ИТМО
    34 страниц, от PAGE0 до PAGE7, которые используются для монохромного матричного дисплея
    128x64. (Рис. 7).
    Когда один байт данных записывается в GDDRAM, все данные изображения строк на одной и той же странице текущего столбца заполняются (то есть заполняется весь столбец (8 бит), на который указывает указатель адреса столбца). Бит данных D0 записывается в верхний ряд, а бит данных D7 записывается в нижний ряд.
    Рис. 20. Структура страниц GDDRAM.
    1   2   3   4


    написать администратору сайта