Опубликован: 24.11.2024 | Доступ: свободный | Студентов: 2 / 0 | Длительность: 05:47:00
Лекция 3:

Микроконтроллер

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >
Библиотека Freedom Metal

Все детали, которые мы до сих пор рассматривали в этом разделе, относятся к аппаратному обеспечению и низкоуровневым элементам, которыми вы будете управлять и взаимодействовать с помощью библиотеки встроенного ПО. Думайте об этой библиотеке как об API.

Так же, как и API, совершенно обычным делом является доступ к нескольким библиотекам встроенного ПО, разработанным разными организациями. Например, для Arduino UNO доступно несколько библиотек, включая ту, которая поставляется с Arduino IDE, драйвера, написанные Atmel (поставщиком микроконтроллеров), драйверы, написанные поставщиками устройств, такими как производитель ЖК-модуля, и даже библиотеки, написанные любителями.

Библиотека, которую мы будем использовать в этом курсе, легко доступна в Freedom Studio и написана SiFive. Она называется библиотека Freedom Metal и включена в пакет поддержки платы (или BSP) для платы HiFive1 Rev B.

Давайте представим эту библиотеку практическим, экспериментальным способом. Мы создадим проект, использующий исходные файлы из библиотеки Freedom Metal, включенной в BSP.

Создание проекта в Blinky

Мы начнем с создания проекта так, как вы узнали в предыдущем разделе. То есть создайте проект Freedom E SKD для платы HiFive1 Rev-B, используя программу hello Example, но назовите его Blinky, как показано ниже, на рисунке 2.7. Нажмите на кнопку Готово, когда будете готовы.

Мастер создания проекта Freedom Studio, показывающий рекомендуемые настройки для проекта Blinky

Рис. 2.7. Мастер создания проекта Freedom Studio, показывающий рекомендуемые настройки для проекта Blinky

Когда Freedom Studio завершит создание вашего проекта (что может занять некоторое время), примите ее предложение по сборке и запуску конфигурации JLink, чтобы упростить отладку. Нажмите на кнопку Отладки (рис.2.8).

Диалоговое окно настройки отладки

Рис. 2.8. Диалоговое окно настройки отладки

Не волнуйтесь, если вы увидите следующее окно с сообщением (рис.2.9). Это просто означает, что у вас плата не подключена к USB-порту. Не стесняйтесь отклонить это сообщение.

Сообщение об ошибке из-за того, что плата не подключена к USB-порту

Рис. 2.9. Сообщение об ошибке из-за того, что плата не подключена к USB-порту

После этого вы должны увидеть, что ваш вновь созданный проект открыт в среде IDE. Если вы наведете указатель мыши на кнопку отладки, вы увидите текст всплывающей подсказки, который гласит: Debug Blinky (или любое другое название, которое вы дали своему проекту) (рис.2.10). Это показывает, что конфигурация отладки J-Link доступна простым нажатием этой кнопки. Мы сделаем это вскоре, когда подключим плату к USB-порту. А пока мы добавим немного кода.

Debug Blinky tooltip

Рис. 2.10. Debug Blinky tooltip
Код Blinky

Программа будет мигать. То есть пользовательский светодиод на Red-V Thing Plus будет мигать с постоянной частотой 1 Гц, включаясь на полсекунды и выключаясь на полсекунды.

Следующий фрагмент кода был получен из руководства SparkFun по разработке Red-V и изменен в двух незначительных деталях:

  1. Временная шкала, используемая функцией задержки

    Команда SparkFun, которая тестировала это приложение, использовала плату, отличную от Red-V Thing Plus. В этом коде используется Redboard Red-V, также представленный в этом руководстве. Единицы времени, которые они использовали для достижения задержки в 1 секунду, составляли 2 000 000 единиц. Однако в конечном итоге код разделил эти единицы на 10, чтобы достичь задержки в 1 секунду. Наш случай был другим: функция delay предлагается для получения параметра задержки в микросекундах, и это именно то, что сработало в Red-V Thing Plus. Для задержки в 0,5 секунды в этом параметре было использовано значение 500 000.

  2. Некоторые комментарии были изменены, а некоторые удалены

    Комментарии и код, касающиеся адаптации шкалы времени, были удалены. Ссылки на контакты ввода-вывода платы также были изменены, поскольку первоначально они относились к плате Red-V Red Board, а не к Red-V Thing Plus.

Скопируйте этот код и вставьте его, чтобы заменить содержимое hello.c в вашем проекте Blinky. Кроме того, продолжайте бегло просматривать код, не останавливаясь, чтобы разобраться с каждой функцией. Просто попробуйте разобраться в этом. Мы перейдем к функциям позже.

/******************************************************************************
     Red-V Thing Plus Blinky,
     Minor modifications by Eduardo Corpe?o, June-9-2022
 
     This code was originally written by: Ho Yun "Bobby" Chan and "Tron Monroe"
     @ SparkFun Electronics
     DATE:  11/21/2019
 
     DEVELOPMENT ENVIRONMENT SPECIFICS:
       Firmware developed using Freedom Studio v4.18.0.2021-04-1
       on Windows 10
 
     ========== RESOURCES ==========
     Freedom E SDK
 
     ========== DESCRIPTION ==========
     Using the built-in LED. To test with different pin,
     simply modify the reference pin and connect a standard LED
     and 100Ohm resistor between the respective pin and GND.
 
     LICENSE: This code is released under the MIT License 
(http://opensource.org/licenses/MIT)
******************************************************************************/
 
#include <stdio.h>      // включить библиотеку Serial
#include <time.h>       //включить библиотеку таймера
#include <metal/gpio.h> //включить библиотеку GPIO, https://sifive.github.io/freedom-metal-docs/apiref/gpio.html
 
// Пользовательская функция задержки записи, поскольку у нас нет такой функции, как у Arduino
void delay(int number_of_microseconds){
 
  clock_t start_time = clock();  // Сохранение времени начала
 
  // Выполнение цикла до тех пор, пока не будет достигнуто требуемое время
  while (clock() < start_time + number_of_microseconds);
}
 
int main (void) {
  printf("RED-V Example: Blink\n");
 
  struct metal_gpio *led0; // Создайте образец GPIO
 
  // Примечание: Последовательность вызовов этих функций имеет значение!
 
  // Получите дескриптор устройства GPIO, т.е. определите вывод IC здесь, где GPIO IC = 5, вывод silkscreen = SCK/5
  // это индекс устройства GPIO, ссылка на который начинается с 0, обязательно проверьте схему
  led0 = metal_gpio_get_device(0);
 
  // Быстрая проверка, чтобы убедиться, правильно ли мы настроили metal_gpio, была основана на примере кода "sifive-welcome.c"
  if (led0 == NULL) {
    printf("LED is null.\n");
    return 1;
  }
 
  // Контакты устанавливаются при инициализации, поэтому мы должны отключить их, когда используем в качестве ввода / вывода
  metal_gpio_disable_input(led0, 5);
 
  // Установить gpio в качестве выходных данных
  metal_gpio_enable_output(led0, 5);
 
  // Контакты выполняют несколько функций, убедитесь, что мы отсоединяем все подключенное
  metal_gpio_disable_pinmux(led0, 5);
 
  // Включите вывод
  metal_gpio_set_pin(led0, 5, 1);



  while(1){
      metal_gpio_set_pin(led0, 5, 0);  // Выключите вывод
      delay(500000);  // 500мс в микросекундах
      metal_gpio_set_pin(led0, 5, 1);  // Включите вывод
      delay(500000);
  }
  return 0; // недостижимый код
}
< Лекция 2 || Лекция 3: 12345 || Лекция 4 >