8-900-374-94-44
[email protected]
Slide Image
Меню

Gcc stm32: STM32 Часть 1: Основы / Хабр

2.1. Почему выбирают Eclipse/GCC в качестве инструментария для STM32

Установка инструментария

51

случаев запускаются «из коробки». Однако при оценке данных инструментов необходимо учитывать несколько моментов. Прежде всего, CooCox IDE в настоящее время поддерживает только Windows; напротив, SWSTM32 также поддерживает Linux и MacOS, но в ней отсутствуют некоторые дополнительные функции, описанные в инструментарии, предлагаемом данной книгой. Более того, они уже поставляются со всеми необходимыми инструментами, предустановленными и настроенными. Хоть это может и быть преимуществом, если вы совершенно новичок в процессе разработки на процессорах Cortex-M, однако если вы хотите выполнять серьезную работу – это может быть значительным ограничением. Очень важно иметь полный контроль над инструментами, необходимыми для разработки вашей микропрограммы, особенно при работе с программным обеспечением с открытым исходным кодом (Open Source).

Таким образом, лучший выбор – создать полноценный инструментарий с нуля. Это позволяет вам ознакомиться с программами и процедурами их настройки, предоставляя полный контроль над вашей средой разработки. Это может раздражать, особенно в первый раз, но это единственный способ узнать, какая часть программного обеспечения задействована на определенном этапе разработки.

В данной главе я покажу необходимые шаги для установки полноценного инструментария для платформы STM32 в Windows, Mac OSX и Linux. Инструментарий основан на двух основных инструментах: Eclipse и GCC, а также на ряде внешних инструментов и плагинов Eclipse, которые позволяют эффективно создавать программы STM32. Хотя инструкции для данных трех платформ практически одинаковы, я адаптирую их для каждой ОС, показывая скриншоты и команды. Это упростит процедуру установки и позволит настроить полноценный инструментарий за меньшее время. Это также даст нам возможность детально изучить каждый компонент нашего инструментария. В следующей главе я покажу вам, как сконфигурировать простейшее приложение (мигающий светодиод – приложение Hello World в электронике), которое позволит нам протестировать наш инструментарий.

Перед тем, как приступить к установке нашего инструментария, нужно ответить на достаточно распространенный вопрос: какой инструментарий является лучшим для разработки приложений для платформы STM32? К сожалению, на данный вопрос не так просто ответить. Вероятно, лучший ответ заключается в том, что он зависит от типа приложения. Прежде всего, аудиторию следует разделить на профессионалов и любителей. Компании часто предпочитают использовать коммерческие IDE с ежегодными взносами, которые позволяют получать техническую поддержку. Вы должны понять, что в бизнесе время означает деньги, а иногда коммерческая среда IDE может уменьшить кривую обучения (особенно если учесть, что ST явно поддерживает эти среды). Тем не менее, я думаю, что даже компании (особенно небольшие организации) могут получить большие преимущества в использовании инструментария с открытым исходным кодом.

Я думаю, что это наиболее важные причины для использования инструментария Eclipse/GCC для разработки встраиваемых систем с микроконтроллерами STM32:

•Он основан на GCC: GCC, вероятно, лучший компилятор в мире, и он дает отличные результаты даже с процессорами на базе ARM. В настоящее время ARM

Установка инструментария

52

является самой распространенной архитектурой (благодаря повсеместному внедрению встроенных систем в последние годы), и многие производители аппаратного и программного обеспечения используют GCC в качестве базового инструмента для своей платформы.

•Он кроссплатформенный: если у вас есть ПК с Windows, новейший элегантный Mac или сервер с Linux, вы сможете без каких-либо различий успешно разрабатывать, компилировать и загружать микропрограмму на свою отладочную плату. В настоящее время это обязательное требование.

•Распространенность Eclipse: многие коммерческие IDE для STM32 (такие как TrueSTUDIO и другие) также основаны на Eclipse, которая стала своего рода стандартом. Существует множество полезных плагинов для Eclipse, которые вы можете скачать одним щелчком мыши. И это развивающийся день ото дня продукт.

•Он с открытым исходным кодом: ну ладно. Я согласен. Для таких огромных программ действительно сложно попытаться понять их внутреннее устройство и изменить код, особенно если вы инженер по аппаратным средствам, приверженный управлению транзисторами и прерываниями. Однако если у вас возникли проблемы с вашим инструментом, проще попытаться понять, что не так с инструментом с открытым исходным кодом, чем с закрытым.

•Большое и растущее сообщество: к данным инструментам к настоящему времени присоединилось большое международное сообщество, которое постоянно разрабатывает новые функции и исправляет ошибки. Вы найдете множество примеров и блогов, которые могут помочь вам во время вашей работы. Кроме того, многие компании, которые приняли данное программное обеспечение в качестве официальных инструментов, вносят экономический вклад в основное развитие. Это гарантирует, что программное обеспечение не исчезнет внезапно.

•Он бесплатный: ага. Я поставил эту причину в качестве последнего пункта, но это не последняя причина. Как было сказано ранее, коммерческая среда разработки может стоить целое состояние для небольшой компании или любителя/студента.

А наличие бесплатных инструментов является одним из ключевых преимуществ платформы STM32.

Eclipse5 является ПО с открытым исходным кодом и бесплатной средой разработки на основе Java. Несмотря на это (к сожалению, программы на Java, как правило, потребляют много ресурсов компьютера и замедляют его работу), Eclipse является одной из наиболее распространенных и готовых сред разработки. Eclipse поставляется в нескольких предварительно сконфигурированных версиях, настроенных для конкретных целей. Например, Eclipse IDE для разработчиков Java поставляется предварительно настроенной для работы с Java и всеми инструментами, используемыми в данной платформе разработки (Ant, Maven и т. д.). В нашем случае Eclipse IDE для разработчиков C/C++ – это то, что нам нужно.

Eclipse разработана с возможностью расширения плагинами. В Eclipse Marketplace доступно несколько плагинов, которые и в самом деле полезны для разработки программного обеспечения для встраиваемых систем. Мы установим и используем большинство из них в данной книге.

Кроме того, Eclipse очень персонализируемый. Я настоятельно

5 http://www.eclipse.org

Установка инструментария

53

рекомендую вам взглянуть на его настройки, которые позволяют адаптировать его к вашим потребностям и вкусу.

2.1.2. … и о GCC

GNU Compiler Collection6 (GCC) является полноценным и широко распространенным набором компиляторов. Это единственный инструмент разработки, способный скомпилировать несколько языков программирования (верхний уровень, front-end) в десятки аппаратных архитектур, которые представлены в нескольких вариантах. GCC – действительно сложное программное обеспечение. Он предоставляет несколько инструментов для выполнения задач компиляции. К ним, помимо самого компилятора, относятся ассемблер, компоновщик, отладчик (известный как GNU Debugger – GDB), несколько инструментов для исследования, дизассемблирования и оптимизации бинарных файлов. Кроме того, GCC также оснащен средой выполнения для языка Си, настроенной для целевой архитектуры.

В последние годы несколько компаний, даже во встроенном мире, приняли GCC в качестве официального компилятора. Например, ATMEL использует GCC в качестве кросскомпилятора для среды разработки AVR Studio.

Что такое кросс-компилятор?

Обычно мы называем термином «компилятор» инструмент, способный генерировать машинный код для процессора на нашем ПК. Компилятор – это просто «переводчик языка» с определенного языка программирования (в нашем случае Си) на низкоуровневый машинный язык, также известный как язык ассемблера. Например, если мы работаем на компьютере Intel x86, мы используем компилятор для генерации ассемблерного кода x86 из языка программирования Си. Для полноты картины мы должны сказать, что в настоящее время компилятор является более сложным инструментом, который предназначен как для конкретного целевого аппаратного процессора, так и для операционной системы, которую мы используем (например, Windows 7).

Кроссплатформенный компилятор – это компилятор, способный генерировать машинный код для аппаратного обеспечения машины, отличной от той, что мы используем для разработки наших приложений. В нашем случае встроенный компилятор GCC ARM генерирует машинный код для процессоров Cortex-M при компиляции на компьютере x86 с какой-либо ОС (напри-

мер, Windows или Mac OSX).

В мире ARM, GCC является наиболее используемым компилятором, особенно в связи с тем, что он используется основным инструментом разработки для операционных систем на основе Linux для процессоров ARM Cortex-A (микроконтроллеры ARM, которыми оснащены практически каждое мобильное устройство). Инженеры ARM активно сотрудничают в разработке GCC ARM. ST Microelectronics не предоставляет среды разработки, но явно поддерживает инструментарии на основе GCC. По этой причине относительно просто настроить полноценный и работающий инструментарий для разработки встроенных приложений при помощи GCC.

6 https://gcc.gnu.org/

Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC » Vtome.ru

Vtome.ru — электронная библиотека

Название: Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC
Автор: Warren Gay
Издательство: Apress
Год: 2018
Страниц: 409
Формат: PDF, EPUB
Размер: 15 Mb
Язык: English

Using FreeRTOS and libopencm3 instead of the Arduino software environment, this book will help you develop multi-tasking applications that go beyond Arduino norms.

In addition to the usual peripherals found in the typical Arduino device, the STM32 device includes a USB controller, RTC (Real Time Clock), DMA (Direct Memory Access controller), CAN bus and more.

Each chapter contains clear explanations of the STM32 hardware capabilities to help get you started with the device, including GPIO and several other ST Microelectronics peripherals like USB and CAN bus controller. You’ll learn how to download and set up the libopencm3 + FreeRTOS development environment, using GCC. With everything set up, you’ll leverage FreeRTOS to create tasks, queues, and mutexes. You’ll also learn to work with the I2C bus to add GPIO using the PCF8574 chip. And how to create PWM output for RC control using hardware timers.

You’ll be introduced to new concepts that are necessary to master the STM32, such as how to extend code with GCC overlays using an external Winbond ?W25Q32 flash chip. Your knowledge is tested at the end of each chapter with exercises. Upon completing this book, you’ll be ready to work with any of the devices in the STM32 family.

Beginning STM32 provides the professional, student, or hobbyist a way to learn about ARM without costing an arm!
What You’ll Learn
Initialize and use the libopencm3 drivers and handle interrupts
Use DMA to drive a SPI based OLED displaying an analog meter
Read PWM from an RC control using hardware timers
Who This Book Is For

Experienced embedded engineers, students, hobbyists and makers wishing to explore the ARM architecture, going beyond Arduino limits.


НЕ РАБОТАЕТTURBOBIT.NET? ЕСТЬ РЕШЕНИЕ, ЖМИ СЮДА!

ПРАВООБЛАДАТЕЛЯМ

СООБЩИТЬ ОБ ОШИБКЕ ИЛИ НЕ РАБОЧЕЙ ССЫЛКЕ


Внимание
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Список категорий

  • КНИГИ
  • ГАЗЕТЫ И ЖУРНАЛЫ
  • АУДИОФАЙЛЫ

Реклама на сайте

    stm32-base/arm-gcc.cmake на мастере · ryankurte/stm32-base · GitHub

    Постоянная ссылка

    владелец

    Тег с указанным именем ветви уже существует. Многие команды Git принимают имена как тегов, так и веток, поэтому создание этой ветки может привести к неожиданному поведению. Вы уверены, что хотите создать эту ветку?

    Перейти к файлу

     

    В настоящее время не удается получить участников

    Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован не так, как показано ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode. Узнайте больше о двунаправленных символах Unicode

    Показать скрытые символы

    #ARM нет Конфигурация цепочки инструментов eabi gcc
    # Мы выполняем кросс-компиляцию, поэтому не хотим запускать тесты компилятора, так как они не пройдут
    включает (CMakeForceCompiler)
    # Указать, что мы не компилируем для ОС
    набор (общий CMAKE_SYSTEM_NAME)
    # Установить тип процессора
    набор (рука CMAKE_SYSTEM_PROCESSOR)
    # Переопределить компилятор
    НАБОР (CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
    набор (CMAKE_C_COMPILER arm-none-eabi-gcc)
    набор (CMAKE_CXX_COMPILER arm-none-eabi-g++)
    # Набор других инструментов
    set(OBJSIZE ${COMPILER_PREFIX}рука-нет-размера eabi)
    набор(OBJCOPY ${COMPILER_PREFIX}arm-none-eabi-objcopy)
    набор(OBJDUMP ${COMPILER_PREFIX}arm-none-eabi-objdump)
    набор (DEBUGGER $ {COMPILER_PREFIX} arm-none-eabi-gdb)
    # Удалить предустановленные флаги компоновщика
    набор (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS «»)
    набор (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS «»)
    набор (CMAKE_SHARED_LIBRARY_LINK_ASM_FLAGS «»)
    # Установить параметры библиотеки
    установить (SHARED_LIBS ВЫКЛ. )
    установить (STATIC_LIBS ON)

    Компиляция кода сборки с помощью gcc для STM32

    Я попытался скомпилировать простую программу сборки для STM32, чтобы проверить, правильно ли работает GCC:

     .syntax unified
    .процессор коры-м3
    .большой палец
    .слово 0x20000400
    .слово 0x080000ed
    .пробел 0xe4
    нет
     
     arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb main.s
     

    Компилятор выдает следующее сообщение:

     /usr/lib/gcc/arm-none-eabi/10.3.1/../../../arm-none-eabi/bin/ld: /usr/ lib/gcc/arm-none-eabi/10.3.1/../../../arm-none-eabi/lib/thumb/v7-m/nofp/crt0.o: в функции `_mainCRTStartup':
    /build/newlib-pB30de/newlib-3.3.0/build/arm-none-eabi/thumb/v7-m/nofp/libgloss/arm/semihv2m/../../../../../ ../../../libgloss/arm/crt0.S:545: неопределенная ссылка на `main'
    /usr/lib/gcc/arm-none-eabi/10.3.1/../../../arm-none-eabi/bin/ld: /usr/lib/gcc/arm-none-eabi/10.3 .1/../../../arm-none-eabi/lib/thumb/v7-m/nofp/libc. a(lib_a-exit.o): в функции `exit':
    /build/newlib-pB30de/newlib-3.3.0/build/arm-none-eabi/thumb/v7-m/nofp/newlib/libc/stdlib/../../../../../ ../../../newlib/libc/stdlib/exit.c:64: неопределенная ссылка на `_exit'
    collect2: ошибка: ld вернул 1 статус выхода
     

    Мне не удалось определить возникшую проблему, даже после проведения некоторых исследований по этому поводу. Я понял основные принципы компилятора, но не умею работать с GCC.

    • в сборе
    • gcc
    • рычаг
    • stm32

    2

    Если ваша цель — просто убедиться, что ваш gcc работает, вы можете создать исполняемый файл с помощью следующей команды — ваша программа была немного изменена, чтобы у нее была точка входа (Reset_Handler) и .space 0xe4 теперь .space 0xf8 , чтобы код был выровнен по границе 4 байта. Я решил, что программа будет начинаться с адреса 0x00080100 , но в зависимости от количества векторов прерываний на вашей цели это могло бы быть другое значение.

     .синтаксис унифицирован
        .процессор коры-м3
        .большой палец
        .слово 0x20000400
        .слово 0x08000100
        .пробел 0xf8
        .текст
        .global ResetHandler
    Обработчик сброса:
                  нет
                 .конец
     

    Компиляция/связывание:

     arm-none-eabi-gcc -o main.elf main.s -nostartfiles -nostdlib -e ResetHandler -Wl,-Ttext,0x080000
     

    Дамп содержимого памяти/разборка:

     arm-none-eabi-objdump -D -s -j .text main.elf
    main.elf: формат файла elf32-littlearm
    Содержимое раздела .text:
     80000 00040020 00010008 00000000 00000000 ... ............
     80010 00000000 00000000 00000000 00000000 ................
     80020 00000000 00000000 00000000 00000000 ................
     80030 00000000 00000000 00000000 00000000 ................
     80040 00000000 00000000 00000000 00000000 ................
     80050 00000000 00000000 00000000 00000000 ................
     80060 00000000 00000000 00000000 00000000 ................
     80070 00000000 00000000 00000000 00000000 . ...............
     80080 00000000 00000000 00000000 00000000 ................
     80090 00000000 00000000 00000000 00000000 ................
     800a0 00000000 00000000 00000000 00000000 ................
     800b0 00000000 00000000 00000000 00000000 ................
     800c0 00000000 00000000 00000000 00000000 ................
     800d0 00000000 00000000 00000000 00000000 ................
     800e0 00000000 00000000 00000000 00000000 ................
     800f0 00000000 00000000 00000000 00000000 ................
     80100 00бф ..
    Разборка раздела .text:
    00080000 :
       80000: 20000400 и cs r0, r0, r0, lsl #8
       80004: 08000100 stmdaeq r0, {r8}
            ...
    00080100 <Обработчик сброса>:
       80100: bf00 нет
     

    В идеале вам теперь необходимо: