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)\Atollic\TrueSTUDIOforARMLite 3.0.0\Servers\ST-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 з більшою кількістю додаткових можливостей, наприклад зовнішньою пам'яттю.