Микроконтроллеры GIGADEVICE. Инструкция по освоению

Микроконтроллеры GIGADEVICE. Инструкция по освоению

Статья была опубликована в журнале Компоненты и технологии №7 2017 г.
авторы: Хафизов Даян, Смирнов Григорий

На сегодняшний день рынок 32-битных микроконтроллеров на основе ядра Cortex-M3 довольно широк. Популярностью у разработчиков цифровых устройств на основе микроконтроллеров пользуется продукция таких производителей, как Microchip, ST Microelectronics, NXP и т.д. Однако, недавно появился еще один производитель, готовый составить им конкуренцию – GigaDevice со своей линейкой микроконтроллеров GD32. В данной статье будет рассказано о микроконтроллерах GD32, приведено сравнение с ближайшим конкурентом, а также представлены примеры работы с одним из представителей семейства GD32 в популярной IDE Keil MDK-ARM.

Рисунок 1. Логотип компании GigaDevice

Компания GigaDevice (рис.1) была создана в 2005 году в Пекине и вышла на китайский рынок с микросхемами памяти. В 2008 году GigaDevice начали выпуск микросхем памяти SPI NOR FLASH с напряжением питания 3,3 В по технологии 180 нм. Примечателен тот факт, что это первая полностью самостоятельная разработка в Китае. За последующие 5 лет GigaDevice укрепили свои позиции на рынке микросхем памяти и значительно улучшили технологии производства, быстро осваивая более высокие технологические нормы. Сейчас компания производит SPI NOR FLASH с напряжением питания 1,8 В по технологии 65 нм и занимает третье место в мире по объемам продаж в сегменте микросхем энергонезависимой памяти с объемом производства более 1 млрд микросхем в год. Компания GigaDevice в высокой степени сконцентрирована на инженерной работе, так в компании больше половины состава сотрудников – инженеры. Кроме этого, у компании GigaDevice более 100 патентов и около 500 заявок на патенты.
В 2013 году компания GigaDevice приобрела лицензию на ядро ARM Cortex-M3 и объявила о начале производства собственных 32-битных микроконтроллеров GD32. Внешнее сходство и сходство в наименованиях с микроконтроллерами от ST Microelectronics подталкивает к мысли о полном «копировании», но это не так. Несмотря на идентичность в расположении контактов и схожесть характеристик, отличия между GD32 и STM32 есть:

  • рабочая частота до 108 МГц для семейства GD32F1 (у STM32F1 до 72 МГц),
  • объем FLASH памяти до 3 Мб (у STM32F2 не более 1 Мб),
  • объем оперативной памяти до 256 Кб (у STM32 не более 128 Кб),
  • и проч.
    По сравнению с «одноклассником» STM32F1, микроконтроллеров GD32F1 обладают лучшим набором характеристик. В случае, когда не хватает flash-а для программы или хранения данных, или же не хватает быстродействия, оптимально использовать GD32F1. Также большим плюсом GD32 является более низкая, нежели у конкурентов, цена.
Конечно, микроконтроллеры GD32 не лишены своих слабых мест. Так, например, для начала работы требуется установка специального AddOn для IDE Keil, а объем технической документации на сайте производителя пока что не дотягивает до STM32, но тем не менее это не является серьезным препятствием на пути освоения микроконтроллеров GD32.

Ну что же, плюсы и минусы есть у всех. Проверим работоспособность микроконтроллеров GD32 на реальном железе. Возьмем отладочную плату GD32103E-EVAL (рис. 2) и рассмотрим несколько простых примеров.

Рисунок 2. Внешний вид отладочной платы GD32103E-EVAL

Начало начал. Помигаем светодиодами.
Несмотря на то, что микроконтроллеры GD32 и STM32 не являются абсолютно идентичными устройствами, они являются совместимыми как по выводам, так и по карте регистров в рамках одного семейства. Следовательно, микроконтроллер GD32F103ZET6 будет совместим по выводам с STM32F103ZET6. Таким образом, мы можем воспользоваться популярным среди разработчиков генератором исходного кода STM32CubeMX для создания демонстрационного проекта (рис. 3). В данном случае, ключевым отличием GD32F103ZET6 от «собрата» STM32F103ZET6 являются максимальная частоте работы ядра: 108 МГц у GD, против 72 МГц у STM. Также отметим, что микроконтроллеры серии GD32F103 могут иметь до 3 Мб встроенной Flash памяти против 1 Мб у STM32. Это может стать решающим преимуществом GD32F103 перед STM32.

Рисунок 4. Настройки RCC для GD32F10x

Далее генерируем исходный код для Keil. После установки AddON-ов от GigaDevice в закладке Device появилась возможность выбрать MCU GD32 (рис. 5). В нашем случае выбираем GD32F103ZE.

Рисунок 5. Конфигурирование Keil для работы с GD32

В файле main.c добавляем в цикл:
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_1);
HAL_Delay(1000);
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_0);
HAL_Delay(1000);
Затем собираем проект и приступаем к «прошивке» контроллера. На отладочной плате GD32103E-EVAL уже присутствует программатор GD-Link (так же, как и почти на всех отладочных наборах у STM). Так что после установки утилиты от GigaDevice, можем прошивать микроконтроллер и заниматься отладкой программы из Keil. В закладке Debug выбираем CMSIS-DAP Debugger (рис. 6) и в настройках указываем определившийся адаптер (рис. 7). Жмем «OK», прошиваем контроллер, перезапускаем контроллер, наблюдаем за двумя мигающими светодиодами ☺

Рисунок 6. Настройка программатора.
Рисунок 7. Окно выбора режима программатора

Итак, пока получается, что мало того, что для работы с GD32 можно использовать программное обеспечение от STM, так еще и библиотека HAL корректно работает.
Работа с UART, АЦП и таймерами.
Светодиодами помигали, теперь сделаем что-то посерьезнее. Будем снимать данные с АЦП и передавать их в UART. И делать это будем через прерывание от таймера.
Сделаем новый проект в STM32CubeMX. UART заведем на контакты PA9 (TX) и PA10 (RX), на PC3 заведем вход АЦП (рис. 8).

Рисунок 8. Конфигурирование входов-выходов для работы с UART и АЦП

Настроим UART как показано на рис. 9. Для этого перейдем на вкладку Configuration и выберем USART1.

Рисунок 9. Настройки UART

Также настроим ADC. Большая часть настроек остается по умолчанию.

.
Рисунок 10. Настройка АЦП

АЦП на входе PC3 подключен к потенциометру на 10 кОм (рис. 11). В новом проекте будем снимать значение напряжения с АЦП. Опрос АЦП будем производить в прерывании от таймера TIM6.

Рисунок 11. Подключение потенциометра к контакту РС3

Перейдем на вкладку Clock Configuration. В данном случае воспользуемся настройкой тактирования ядра и периферии, установленными по умолчанию: ядро тактируется частотой 48 МГц, тактирование периферии конфигуратор рассчитает автоматически (рис. 12).
Рисунок 12. Настройки тактирования
Рисунок 13. Конфигурирование таймера TIM6

Таймер TIM6 сконфигурируем так, чтобы прерывание от него срабатывало 1 раз в секунду. Поскольку периферия тактируется с частотой 48 МГц, то для получения периода в 1 секунду значение предделителя приравниваем к 47999, а регистр счетчика – к 999 (рис. 13).
Сгенерируем проект и откроем его в Keil. Все обработчики прерываний находятся в файле stm32f1xx_it.c. Находим обработчик прерывания от таймера TIM6 и вставляем туда функцию отправки данных в UART, как на рис. 14.
HAL_UART_Transmit – функция HAL для отправки данных в UART, сгенерированная STM32CubeMX. Эта и другие функции HAL для UART находятся в файле stm32f1xx_hal_uart.c
transmitBuffer – в данном случае массив, который мы объявили глобально и в который просто записали строчку, которую хотим передавать в UART.

Рисунок 14. Обработчик прерываний TIM6. Отправка данных в UART.

Для опроса АЦП задействуем таймер TIM3. Опрос АЦП сделаем в обработчике прерывания от таймера TIM3. В обработчике прерывания от таймера TIM3 запускаем АЦП, ждем окончания преобразования, складываем полученное значение отсчетов АЦП в переменную и останавливаем работу АЦП (рис. 15).

Рисунок 15. Код обработчика прерываний TIM3 для работы АЦП

Далее, заходим в обработчик прерывания от таймера TIM6, где у уже есть функция отправки данных в UART и добавляем отправку данных от АЦП, пересчитанных в вольты, как на рисунке 16.
Рисунок 16. Код обработчика прерываний TIM6

Подключив UART с микроконтроллера к компьютеру через преобразователь UART-USB, посмотрим на данные через терминал (в данном случае, terminal v1.9b). Изменяя положение регулятора на потенциометре, видим, как меняются измеренные значения с АЦП (рис. 17).
Рисунок 17. Вывод измеренных значений с АЦП

Заключение

Еще раз отметим, что микроконтроллеры GD32 - это не подделка под STM32 и не безымянный контрафакт, а полноценный микроконтроллер на Cortex-M3, предназначенный для разработки высокопроизводительных и надежных устройств. Совместимость инструментов и библиотек, предназначенных для работы с микроконтроллерами STM32, позволяет довольно легко начать процесс изучения и запустить новые разработки на GD32. Высокая степень «железной» совместимости между соответствующими семействами микроконтроллеров от GigaDevice c микроконтроллерами от ST Microelectronics позволяет создавать более гибкие по функциональности устройства, а так же не сильно зависеть от одного производителя. Необходимо учесть отличия в конфигурации отдельной периферии и тактирования.
В сочетании с бОльшим объемом встроенной flash-памяти и более высокой максимальной частотой микроконтроллеры GD32 открывают для разработчика возможности расширить функционал уже существующих устройств и задуматься об увеличении производительности в новых разработках.

Литература


  1. GD32103E-EVAL User Manual
  2. GD32F103xx DATASHEET Rev. 2.2
  3. UM1718 User manual. STM32CubeMX for STM32 configuration and initialization C code generation. Rev.20
  4. UM1850 User manual. Description of STM32F1xx HAL drivers. Rev.1
  5. User Manual GD-Link Adapter. Rev.1
  6. GD32F103xx – AN001. Software Migration Guide.