STM32F4DISCOVERY: Работа с ARM Cortex M4

Stm32f4discovery является отладочной платой на микроконтроллере ARM Cortex M4 от ST Microelectronics. Я следил за Cortex M4 с момента его анонса и ждал, когда его можно будет испытать.  
Эта возможность появилась с появлением отладочной платы stm32f4discovery (см. характеристики). Я получил её от Farnell Electronics за €12.

За сумму чуть более €12 вы получаете довольно интересную плату. Вот что говорится в рекламе от ST:  
— микроконтроллер STM32F407VGT6 с частотой 168Mhz на 32-битном ядре ARM Cortex-M4F, 1 Мб флэш-памяти, 192 Кб оперативной памяти в корпусе  LQFP100.
— встроенный ST-LINK/V2 с возможностью использования ST-LINK/V2  как отдельного устройства(с SWD разъемом для программирования и отладки). Не уверен в нем, т.к. JTAG является проверенным методом отладки, и нужно увидеть, что можно делать с новым разъёмом.
— LIS302DL, ST MEMS датчик движения, 3-осевой акселерометр с цифровым выходом.
— MP45DT02, ST MEMS датчик звука, всенаправленный цифровой микрофон.
— CS43L22, аудио ЦАП со встроенным усилителем класса D.
— четыре светодиода, LD3 (оранжевый), LD4 (зеленый), LD5 (красный) и LD6 (синий).
— две кнопки (пользовательская и reset)
— порт USB OTG FS и коннектор micro-AB
— штырьки для быстрого соединения с другими устройствами подключенные ко всем выводам  LQFP100.

Набор инструментов

Инструменты и работа с ними описываются для операционной системы Windows. На Linux все должно быть аналогично.
Вот мой рабочий процесс и ПО:

Eclipse

Я пишу все свои проекты в Eclipse. Текущая версия Eclipse полностью совместима с плагином набора инструментов для ARM. Скачайте Eclipse здесь и убедитесь, что вы скачали версию для C++ разработчиков (Eclipse IDE for C/C++ Developers или CDT).

ARM GNU Eclipse Plugin

Перед началом работы с Eclipse, вам понадобится GNU ARM Eclipse Plugin. Официальный сайт с инструкциями по установке.

Sourcery Codebench Lite Edition

Ранее это называлось CodeSourcery, но видимо, она была куплена Mentor Graphics и была переименована.

Скачать последнюю версию EABI Lite Edition можно перейдя на сайт. GNU GCC создан для кросс-компиляции ARM.

Периферийная библиотека stm32f4

Можно разрабатывать программы для STM32 без периферийных библиотек, и многие люди так и делают. ST Microelectronics приложили значительные усилия, чтобы она хорошо работала, и мне она нравится. Нажмите здесь, чтобы загрузить архив с сайта ST Microelectronics. Выберите Design Support, и под заголовком Firmware есть STM32F4DISCOVERYboard firmware package

Распакуйте архив и вы найдите библиотеку в папке Libraries/STM32F4xx_StdPeriph_Driver

Библиотека CMSIS

Это библиотека от ARM. Это дает вам функции для доступа к основам Cortex M4. Она работает совместно со стандартной периферийной библиотекой. Вы можете найти её в папке LibrariesCMSIS где лежат стандартные периферийные библиотеки.

Я внес следующие изменения в CMSIS перед её использованием.

1. Убрал все STSTM32F4xxSourceTemplates. Эта папка содержит примеры загрузочного кода для разных компиляторов. Вместо этого я беру копию правильного загрузочного кода (в папке TrueSTUDIO) и добавляю его в свой проект. 

2. Вначале CMSISSTSTM32F4xxIncludestm32f4xx.h я добавляю следующую строку:
#define assert_param(a)((void)0)
Она отключает параметр проверки действительности периферийных библиотек.

Atollic TrueSTUDIO lite

Lite версия этого коммерческого проекта доступна для свободного скачивания. В нем есть несколько полезных элементов, которые мы будем использовать. Компоновщик (.ld) поможет нам создать работоспособный образ нашего проекта, и GDB сервер будет контролировать наши сеансы отладки между Eclipse и ST-Link оборудованием.

Тестовая программа

Имея все инструменты можно создать тестовое приложение. Я решил управлять маленьким QVGA ЖК-дисплеем от  Nokia 2730. После извлечения кода из stm32plus и портирования его для F4 я получил следующий код:
Скачать исходный код

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

Прошивка и отладка скомпилированного кода

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

Плата Stm32f4discovery поставляется с собственным встроенным аппаратным отладчиком ST-Link. Преимуществом ST-Link является использование гораздо меньшего количества контактов, чем традиционный разъем JTAG, но недостатком является то, что протокол Serial Debug Wire (SWD), который он использует, не имеет такой поддержки как JTAG с открытым исходным кодом.

Поддержка OpenOCD ST-Link

Я проверил последний исходный код OpenOCD, скомпилировал, и протестировали его на stm32f4discovery. Через несколько минут я мог использовать OpenOCD чтобы прошить плату, и похоже, отладка тоже работает.


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

К сожалению, отладка не работает достаточно хорошо, чтобы рассматривать её как подходящую для дальнейшего развития и работы. После перезагрузки я смог подключить Eclipse к openocd, и сеанс отладки был установлен.


К сожалению, часто бывает так.

Когда я внес изменения в свой код, оказалось, что отладчик не видит изменений. Единственный способ заставить его работать — это перезапустить OpenOCD. Это необходимо делать каждый раз, когда я хочу изменить код при отладке.

Atollic GDB сервер

Он лучше, чем OpenOCD тем, что я могу сделать несколько повторных сеансов отладки, без необходимости перезапуска платы. Но после Ctrl-C необходимо перезагружать сервер перед каждым сеанс отладки. Это не идеально, но это всего лишь мелкие неудобства, которые не стоят на пути продуктивного развития.

Atollic GDB сервер практически готов к использованию без настройки. Вот как запустить его:

1. Убедитесь, что плата подключена по USB и драйверы ST-Link были установлены правильно.
2. Запустите Cygwin или командную строку и перейдите в каталог (Возможно в вашем компьютере он может быть в другом месте) C:ProgramFiles (x86)AtollicTrueSTUDIOforARMLite 3.0.0ServersST-LINK_gdbserver
3. Отредактируйте config.txt и убедитесь что опция ‘-D’ в нижней части файла включена. По умолчанию она описана там, но не включена. -D позволяет работать с SWD протоколом. Без этого GDB сервер не увидит плату.
4. Запустите сервер с ST-LINK_gdbserver.exe-с config.txt

Если вы сделали всё правильно, то сервер должен ждать команды от Eclipse.

Отладка с помощью Eclipse

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

При создании конфигурации отладочного запуска необходимо указать действительный процесс инициализации. Вот мой:
target remote localhost:61234
monitor reset init
monitor debug_level 2
monitor soft_reset_halt
set mem inaccessible-by-default off
monitor debug_level 0
file c:/users/andy/src/stm32f407test/Debug/stm32f407test.elf
load
monitor reset init

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

stm32plus для Cortex m4?

Да, но не сейчас. Много чего можно сделать на F1 и пока я это делаю, появятся больше плат разработчика на F4 с большим количеством дополнительных возможностей, например внешней памятью.

Оригинал статьи

Добавить комментарий

Ваш адрес email не будет опубликован.