GPIO
Подключение внешнего оборудования к плате микроконтроллера
Если вы следите за оборудованием, то именно в этот момент необходимо выполнить некоторые электрические подключения. Это слегка опасно, поэтому вы должны оставаться сосредоточенными и стараться делать все как можно тщательнее и безопаснее.
Вот несколько советов по технике безопасности при работе с оборудованием:
- Снимите все украшения со своих рук и запястий. Вы же не хотите повредить свой микроконтроллер, случайно удерживая его во время ношения кольца. То же самое касается часов, браслетов и ожерелий.
- Всегда работайте на изолированной поверхности. Никогда не ставьте свое оборудование на металлическую столешницу.
- Мойте руки до и после прикосновения к электронным деталям, так как они могут содержать свинец или другие опасные материалы.
- Всегда подключайтесь к сети при выключенном питании.
- Всегда трижды проверяйте свои подключения.
- Если сомневаешься, не делай этого.
Если у вас есть какие-либо вопросы, перейдите на форум курса.
Пайка
Если вы хотите подключить внешнее оборудование к вашему Red-V Thing Plus, первым шагом является припаивание разъемов к плате.
Имейте в виду, что пайка опасна по целому ряду причин: вы можете случайно обжечься, повредить паяемые детали, вдохнуть пары, вызвать пожар, и этот список можно продолжать. Вы всегда должны соблюдать все меры предосторожности при пайке.
Если у вас нет большого опыта пайки, возможно, вы захотите ознакомиться с руководством от SparkFun Electronics.
Установка разъемов на Red-V Thing Plus
Учитывая, что Red-V Thing Plus имеет 16 накладок с одной стороны и 12 с другой, у вас есть множество вариантов. Вот 3 варианта, упомянутые в списке запчастей:
1. Вы можете использовать короткие штыревые разъемы. В этом случае вам придется использовать пару 8-контактных разъемов с одной стороны и пару 6-контактных разъемов с другой стороны. Этот комплект используется в плате, которую вы увидите в следующих видео и фотографиях.
2. Возможно, вы предпочтете удлиненные штифтовые разъемы. Длинно штырьковые разъемы популярны в дополнительных платах, таких как Arduino shields, которые предназначены для установки поверх других плат.
3. Вы также можете использовать двойные разъемы. Это 40-контактная полоска, поэтому вам придется разделить ее на 16-контактную и 12-контактную секции. Если вы используете их, имейте в виду, что для штекерных разъемов требуются соединительные провода с внутренним концом.
Red-V Thing Plus с разъемами
В попытке дать вам справочный пример, здесь мы приводим несколько фотографий нашей платы до и после пайки правильно припаянных гнездовых разъемов с короткими контактами. Не стесняйтесь увеличивать их для лучшей детализации.
Вот как выглядит плата без припаянных разъемов:
На следующих рисунках показаны установленные разъемы и их припаянные площадки:
Что насчет вводных пинов?
До этого момента мы работали только с цифровыми выходами. Теперь мы увидим приложение, в котором также используются цифровые входные контакты. На этот раз вы не увидите каждый шаг процесса разработки. Вместо этого мы сосредоточимся на аппаратном обеспечении и коде.
В этой демонстрации будут использоваться два входных переключателя для управления встроенным светодиодом. Вот принципиальная схема:
Кнопка 0 выключит светодиод, а кнопка 1 включит его.
Уделите минутку, чтобы обратить внимание на следующие сведения об этих кнопках:
Кнопка 0 подключена к выводу GPIO 0, а кнопка 1 подключена к выводу GPIO 1.
Они являются низкоактивными, нормально открытыми кнопками, что означает, что при их нажатии на подключенные контакты вводится значение 0.
Когда они не нажаты, вывод остается плавающим, поэтому для того, чтобы каждый из этих входов имел значение по умолчанию 1, требуется внутренний подтягивающий резистор.
Эти кнопки являются единственными внешними элементами платы Red-V Thing Plus, поэтому они будут соединены соединительными проводами и макетной платой.
Это контакты ввода-вывода, которые будут подключены к кнопкам:
![Red-V Thing Plus, вид сверху и снизу, показывающий контакты, которые будут использоваться в демонстрационном приложении GPIO (Взято с SparkFun Electronics в рамках CC BY 2.0)](/EDI/13_02_25_2/1739398847-5454/tutorial/1372/objects/4/files/03-33.jpg)
Рис. 3.33. Red-V Thing Plus, вид сверху и снизу, показывающий контакты, которые будут использоваться в демонстрационном приложении GPIO (Взято с SparkFun Electronics в рамках CC BY 2.0)
Здесь у нас есть две фотографии реальных аппаратных подключений:
Код демонстрационного приложения GPIO
Вот код для этого приложения. Если вы продолжаете, создайте новый проект на основе примера проекта hello (как и предыдущий) и скопируйте следующий код, чтобы заменить содержимое hello.с.
/****************************************************************************** Red-V Thing Plus GPIO_Demo, by Eduardo Corpe?o Using the built-in LED and two external buttons to control it. Date: June 20, 2022 Developed using Freedom Studio v4.18.0.2021-04-1 on Windows 10 LICENSE: This code is released under the CC BY-SA 4.0 License (https://creativecommons.org/licenses/by-sa/4.0/) ******************************************************************************/ #include <metal/gpio.h> //include GPIO library, https://sifive.github.io/freedom-metal-docs/apiref/gpio.html #include <stdint.h> #define Red_V_enable_output(x) *((uint32_t *) 0x10012008) |= (1<<(x)) #define Red_V_set_pin(x) *((uint32_t *) 0x1001200C) |= (1<<(x)) #define Red_V_clear_pin(x) *((uint32_t *) 0x1001200C) &= ~(1<<(x)) #define Red_V_read_pin(x) (*((uint32_t *) 0x10012000) & (1<<(x))) #define Red_V_enable_pullup(x) *((uint32_t *) 0x10012010) |= (1<<(x)) int main (void) { struct metal_gpio *gpio_0; //Make instance of GPIO gpio_0 = metal_gpio_get_device(0); // Pins are set when initialized so we must disable it when we use it as an input/output metal_gpio_disable_input(gpio_0, 5); // Set as gpio as output //metal_gpio_enable_output(gpio_0, 5); Red_V_enable_output(5); // Pins have more than one function, make sure we disconnect anything connected metal_gpio_disable_pinmux(gpio_0, 5); metal_gpio_enable_input(gpio_0, 0); // enable input 0 metal_gpio_enable_input(gpio_0, 1); // enable input 1 metal_gpio_disable_output(gpio_0, 0); // disable output 0 metal_gpio_disable_output(gpio_0, 1); // disable output 1 metal_gpio_disable_pinmux(gpio_0, 0); // disable alternate functions for pin 0 metal_gpio_disable_pinmux(gpio_0, 1); // disable alternate functions for pin 1 Red_V_enable_pullup(0); // enable pull-up for pin 0 Red_V_enable_pullup(1); // enable pull-up for pin 1 while(1){ if(Red_V_read_pin(0) == 0) // Read input pin 0 Red_V_clear_pin(5); // Turn LED OFF else if(Red_V_read_pin(1) == 0) // Read input pin 1 Red_V_set_pin(5); // Turn LED ON } return 0; // Unreachable code }
Обратите внимание, что у нас есть наши собственные макрофункции Red_V_read_pin() и Red_V_enable_pullup():
Red_V_read_pin()считывает входные контакты в качестве альтернативы функции библиотеки Freedom Metal.
В библиотеке Freedom Metal нет функции для включения подтягивающих резисторов (по крайней мере, не в sifive_gpio0.c). Вот почему у нас есть макрос Red_V_enable_pullup() в этом примере кода.
Бесконечный цикл просто проверяет значение входных контактов и соответствующим образом включает или выключает светодиод.
Продолжайте и попробуйте приложение, чтобы убедиться, что кнопки работают правильно.
GPIO Демо(Видео)
[Эдуардо Корпеньо] Итак, давайте посмотрим, как это работает. Вот оборудование. Кнопка слева - это кнопка ноль, а кнопка справа - кнопка один. Помните, что крайняя левая кнопка выключает светодиод, а крайняя правая кнопка включает его. И обратите внимание, как встроенный светодиод реагирует на мои нажатия клавиш. Все работает именно так, как мы ожидали. Итак, вот оно, что у вас есть. Наше приложение GPIO работает хорошо.
Подведение итогов лекции
Вы прошли через глубокое приключение с аппаратным и программным обеспечением. Похлопайте себе!
Давайте подытожим то, что мы рассмотрели в этой лекции:
- Мы рассмотрели, как обычно работает ввод-вывод с отображением памяти в микроконтроллерах.
- Мы изучили руководство по FE310, чтобы узнать об аппаратном обеспечении GPIO и регистрах конфигурации.
- Мы углубились в библиотеку Freedom Metal.
- Мы написали наши собственные макрофункции для функций, не реализованных в библиотеке Freedom Metal.
- Для этого мы извлекли некоторые адреса и смещения из руководства по микроконтроллеру FE310.
- Вы также узнали, как углубиться в код, используя 2 специальные функции Freedom Studio.
- Вы узнали, как подключить оборудование к вашей плате.
Не стесняйтесь возвращаться к этому материалу, если вам понадобится освежить его в памяти в будущем.