Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2739
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

Hello, Nucleo!

90

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

Window → Perspective → Open Perspective → Other….

Начиная с Eclipse 4.6 (она же Neon), панель инструментов переключения перспективы больше не показывает имя перспективы по умолчанию, а только значок, связанный с перспективой. Это приводит в замешательство начинающих пользователей. Вы можете отобразить имя перспективы рядом с ее значком, щелкнув правой кнопкой мыши на панели инструментов и выбрав пункт Show Text, как показано ниже.

Рисунок 6: Как включить имя перспективы на панели инструментов переключения перспектив

По мере продвижения по темам данной книги у нас будет возможность увидеть другие возможности Eclipse.

3.2. Создание проекта

Давайте создадим наш первый проект. Мы создадим простое приложение, которое заставит мигать светодиод LD2 (зеленый) на плате Nucleo.

Перейдите в меню File → New → C Project. Eclipse покажет мастера проекта, который позволит нам создать наш тестовый проект (см. рисунок 7).

Рисунок 7: Мастер проекта – ШАГ 1

Hello, Nucleo!

91

В поле Project name впишите hello-nucleo (вы можете свободно выбирать какое вам нравится название проекта). Действительно важной частью является раздел Project type. Здесь мы должны выбрать семейство STM32 нашей платы Nucleo. Например, если у нас

NUCLEO-F401RE, мы должны выбрать STM32F4xx C/C++ Project.

К сожалению, Ливиу Ионеску до сих пор не реализовал шаблоны проектов для семейств STM32L0/1/4. Более того, шаблоны проектов для некоторых плат Nucleo отсутствуют. Если ваша Nucleo основана на одной из этих серий, вам нужно перейти к следующей главе, где мы узнаем более общий способ создания проектов для платформы STM32. Однако может случиться так, что к моменту чтения данной главы плагин будет обновлен новыми шаблонами.

Теперь нажмите кнопку Next. На данном шаге мастера очень важно выбрать правильный размер ОЗУ и Flash-памяти (если эти поля не соответствуют количеству ОЗУ и Flashпамяти оснащающего вашу Nucleo микроконтроллера, запустить пример приложения будет невозможно)2. Воспользуйтесь таблицей 1, чтобы выбрать правильные значения для вашей платы Nucleo3.

Таблица 1: Размеры ОЗУ и Flash-памяти для выбора в соответствии с имеющейся Nucleo

Итак, заполните поля шага 2 мастера проекта следующим образом4 (см. рисунок 8):

Chip Family: Выберите подходящий вашей Nucleo микроконтроллер (см. таблицу 1). Flash size: выберите правильное значение из таблицы 1.

RAM size: выберите правильное значение из таблицы 1. External clock (Hz): можно оставить данное поле как есть.

Content: Blinky (blink a LED).

2Владельцы отладочных плат STM32F4 и STM32F7 не найдут пункт для указания объема ОЗУ. Не жалуйтесь на это, так как мастер проекта предназначен для правильной настройки нужного объема ОЗУ, если вы выберете правильный тип семейства чипов Chip family.

3В случае, если вы используете другую отладочную плату (например, плату Discovery), проверьте на вебсайте ST правильные значения ОЗУ и Flash-памяти.

4Обратите внимание, что в зависимости от фактического семейства STM32 вашей отладочной платы, некоторые из данных полей могут отсутствовать на втором шаге. Не беспокойтесь об этом, потому что это означает, что генератор проектов знает, как их заполнить.

Hello, Nucleo!

92

Use system calls: Freestanding (no POSIX system calls).

Trace output: None (no trace output).

Check some warnings: Выбрать.

Check most warnings: Не выбирать.

Enable -Werror: Не выбирать.

Use -Og on debug: Выбрать.

Use newlib nano: Выбрать.

Exclude unused: Выбрать.

Use link optimizations: Не выбирать.

Те из вас, у кого STM32F3 Nucleo, найдут дополнительное поле на шаге мастера. Оно называется CCM RAM Size (KB) и связано с Core Coupled Memory (CCM) – специальной внутренней и быстродействующей памятью, которую мы изучим в Главе 20. Если у вас плата Nucleo-F334 или Nucleo-F303, заполните поле значением из таблицы 1. Для других плат на основе STM32F3 поместите ноль в данное поле.

Рисунок 8: Мастер проекта – ШАГ 2

Теперь нажмите кнопку Next. На следующих двух шагах мастера оставьте все параметры по умолчанию. Наконец, на последнем шаге вы должны выбрать путь к инструментарию GCC. В предыдущей главе мы установили GCC в папке /STM32Toolchain/gccarm (в Windows это была папка C:\STM32Toolchain\gcc-arm). Итак, выберите эту папку, как показано на рисунке 9 (введите путь или воспользуйтесь кнопкой Browse), и убедитесь,

что в поле Toolchain name содержится GNU Tools for ARM Embedded Processors (arm-none- eabi-gcc), в противном случае выберите его из выпадающего списка. Нажмите кнопку

Finish.

Hello, Nucleo!

93

Рисунок 9: Мастер проекта – ШАГ 5

Наш тестовый проект почти завершен. Нам нужно всего лишь изменить одну вещь, чтобы она работала на Nucleo.

Однако, прежде чем завершить пример, лучше взглянуть на то, что было сгенерировано плагином GNU MCU.

На рисунке 10 показано то, что появляется в Eclipse IDE после создания проекта. В представлении Project Explorer отображается структура проекта. Вот содержимое папок первого уровня (сверху вниз):

Includes: эта папка показывает все включаемые папки, которые являются включаемыми папками GCC5.

src: эта папка Eclipse содержит файлы с исходным кодом .c6, составляющие наше приложение. Одним из этих файлов является main.c, который содержит процедуру

int main(int argc, char* argv[]).

system: эта папка Eclipse содержит заголовочные файлы и файлы с исходным кодом (header and source files) многих используемых библиотек (например, ST-HAL и CMSIS). Мы увидим их более подробно в следующей главе.

5Каждый компилятор C/C++ должен знать, где искать включаемые файлы, англ. include files (файлы, заканчивающиеся на .h). Эти папки называются включаемыми (include folders), и их путь должен быть указан в GCC с помощью параметра -I. Однако, как мы увидим позже, Eclipse может сделать это для нас автоматически.

6Точный тип и количество файлов в данной папке зависит от семейства STM32. Не беспокойтесь, если вы увидите дополнительные файлы, отличные от тех, которые показаны на рисунке 10, и сосредоточьте свое внимание исключительно на файле main.c.

Hello, Nucleo!

94

include: эта папка содержит заголовочные файлы нашего основного приложения. ldscripts: эта папка содержит некоторые специальные файлы, которые заставляют наше приложение работать на микроконтроллере. Это файлы скриптов компоновщика LD (GNU Link eDitor), и мы подробно изучим их в Главе 20.

Рисунок 10: Содержимое проекта после его генерации

Как уже было сказано, нам нужно изменить еще одну вещь, чтобы пример проекта работал на нашей плате Nucleo. Плагин GNU MCU генерирует пример проекта, который соответствует аппаратной схеме Discovery. Это означает, что светодиод задан на другом выводе I/O микроконтроллера. Нам нужно изменить его.

Как нам узнать, к какому выводу подключен светодиод? ST предоставляет схемы7 платы Nucleo. Схемы сделаны с использованием CAD Altium Designer – довольно дорогого программного обеспечения, используемого в профессиональном мире. Однако, к счастью для нас, ST предоставляет удобный PDF-файл со схемами. Глядя на страницу 4, мы увидим, что светодиод подключен к выводу PA58, как показано на рисунке 11.

7 http://www.st.com/st-web- ui/static/active/en/resource/technical/layouts_and_diagrams/schematic_pack/nucleo_64pins_sch.zip

8 За исключением Nucleo-F302RB, на которой LD2 подключен к выводу PB13. Подробнее об этом дальше.

Hello, Nucleo!

95

Рисунок 11: Подключение LD2 к PA5

PA5 является сокращением от «вывод PIN5 порта GPIOA», который является стандартным способом обозначения ввода/вывода общего назначения (GPIO) в мире STM32.

Теперь мы можем приступить к изменению исходного кода. Откройте файл Include/BlinkLed.h и перейдите к строке 30. Здесь мы найдем определение макроса для GPIO, связанного со светодиодом. Нам нужно изменить код следующим образом:

 

Имя файла: include/BlinkLed.h

 

 

 

 

30

#define BLINK_PORT_NUMBER

(0)

31

#define BLINK_PIN_NUMBER

(5)

 

 

 

BLINK_PORT_NUMBER определяет порт GPIO (в нашем случае GPIOA=0), а BLINK_PIN_NUMBER

номер вывода.

Nucleo-F302R8 – единственная плата Nucleo, имеющая другую аппаратную конфигурацию вывода, используемого для светодиода LD2, поскольку он подключен к выводу PB13, как видно на схемах. Это означает, что правильная конфигурация выводов:

30

#define

BLINK_PORT_NUMBER

(1)

31

#define

BLINK_PIN_NUMBER

(13)

Теперь мы можем скомпилировать проект. Зайдите в меню Project → Build Project. Через некоторое время мы увидим нечто похожее на это в консоли вывода

[^ch3-flash-image-size].

Invoking: Cross ARM GNU Create Flash Image

arm-none-eabi-objcopy -O ihex "hello-nucleo.elf" "hello-nucleo.hex" Finished building: hello-nucleo.hex

Invoking: Cross ARM GNU Print Size

 

 

 

 

arm-none-eabi-size --format=berkeley "hello-nucleo.elf"

 

 

text

data

bss

dec

hex

filename

5697

176

416

6289

1891

hello-nucleo.elf

Finished building: hello-nucleo.siz 09:52:01 Build Finished (took 6s.704ms)