Indiana University, 2016 — 244p. This book is intended as a hands-on manual for learning how to design systems using the STM32 F1 family of micro-controllers. It was written to support a junior-level computer science course at Indiana University. The focus of this book is on developing code to utilize the various peripherals available in STM32 F1 micro-controllers and in…
Apress, 2018. — 409 p. 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…
Apress, 2018. — 409 p. 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…
PE Press, 2015. — 137 p. This book helps you how to get started with STM32 Nucleo board development. Several illustration samples are provided to accelerate your learning using Eclipse C/C++, GNU ARM, OpenOCD, and mbed development. The following is highlight topics in this book: Preparing Development Environment Setup Development Environment Digital Input/Output Serial…
McGraw-Hill Education, 2018. — 304 p. Create your own STM32 programs with ease! Get up and running programming the STM32 line of microcontrollers from STMicroelectronics using the hands-on information contained in this easy-to-follow guide. Written by an experienced electronics hobbyist and author, Programming with STM32: Getting Started with the Nucleo Board and C/C++ features…
На сайте КОМПЭЛ размещены новые методические материалы на русском языке по программированию микроконтроллеров STM8 и STM32. Учебные материалы представляют собой инструкции к лабораторным работам на базе недорогих отладочных плат STM8SVLDISCOVERY, STM32F3DISCOVERY и STM32F4DISCOVERY. Рассчитанные на начинающих разработчиков, лабораторные работы пошагово учат работать с разнообразной периферией микроконтроллеров — портами ввода-вывода, таймерами, ШИМ, АЦП, компаратором, интерфейсами USART, I²C и SPI.
Лабораторные практикумы будут полезны тем инженерам, кто только осваивает новую архитектуру микроконтроллеров STMicroelectronics, а также студентам компьютерных специальностей, изучающим программирование встроенных систем.
Скачать
Скачать
Скачать
Материалы на постоянной основе размещены по следующему адресу: Библиотека → Справочники → Литература производителя ST Microelectronics.
•••
Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство …читать далее
www.compel.ru
Мое обучение началось, когда я два года назад заинтересовался темой микроконтроллеров и инженер, у которого поинтересовался насчет них, выдал мне плату 300х200мм и сказал, что в ней стоит контроллер STM32F217ZGT6 и на этой плате есть все необходимое для обучения. «В общем, освоишь ее — все остальное покажется фигней» (он, правда, не сказал, что для моргания светодиодом надо настроить SPI, о котором на тот момент я даже не слышал). Спустя три не очень напряженных месяца бесплотных попыток, осознания слабости навыков программирования и огромного количества прочитанных статей пришлось все же раскошелится на STM32VLDISCOVERY и способом копирования программ и экспериментов с ними дело наконец-то пошло, но все равно медленно.
За полтора года успел поработать разработчиком, искал вакансии, где работают с STM32 (так как считаю, что сейчас это наиболее перспективные микроконтроллеры своего класса), нахватался опыта и когда дело дошло до диплома, вспомнил о своих наболевших мозолях. Идея с темой пришла мгновенно: «Отладочная плата на STM32 и (полноценный) обучающий курс (для самых маленьких) к ней».
Да, знаю, знаю, от многих инженеров слышал, что с темой «отладочная плата» «будь я преподавателем, я бы тебя завалил на защите», но все же считаю, любая идея имеет право на жизнь, так что всем, кому интересно, прошу читать далее.
Именно по этому захотел написать цельный и законченный курс, чтобы так сказать другие не мучились и самому разобраться. Так что придя в институт и понимая, что для быстрого освоения и понимания нужен стимул (а точнее — хороший такой пинчище), я стал бить себя пяткой в грудь (рыть себе могилу), что не только напишу обучающий курс (в нашем универе пришлось назвать его методическим пособием), но и макет работающий предоставлю. Тему приняли, задание написал (могилу вырыл, надгробие заказал), дело было за малым, все написать и разработать (лечь в могилу, закопаться и поставить надгробие).
Жизнь показала, что времени у меня было отнюдь не полгода, но все же все время, отведенное на диплом, почти закончилось, совсем скоро защита, но как не удивительно все не только готово, но и почти на 100% протестировано (на живых людях в том числе).
На выходе получилось следующее:
Придя на первую работу в качестве разработчика электроники, я столкнулся с одним интересным мнением и, как оказалось, оно весьма распространено. Это мнение звучало примерно так: «Вот я программист и программирую микроконтроллеры, схемотехнику не знаю и знать не хочу, паять, кстати, тоже не умею». Пообщавшись с группой программистов вне фирмы, понял, что человек с моей работы далеко не одинок в своем мнении и хоть я его и не поддерживаю, понять и уважать мнение окружающих стоит, тем более это отлично вписывалось в тогдашнюю концепцию отладочной платы «все на борту». В связи с этим плата получилось достаточно «жирненькая», получила название STM32SB (SB-StudyBoard) V1.0b. Ниже разберем, что в нее вошло.
1. Микроконтроллер
Исходя из того, что я работал с микроконтроллером STM32F103RET6, он и был выбран для проекта.
2. Схема питания и аппаратный USB контроллера
В этом микроконтроллере есть встроенный USB, который было решено вывести на отдельный разъем.
3. Спикер
Было решено ввести для освоения ШИМ модуляции и обучению написанию мелодий.
4. Цифровой индикатор и сдвиговый резистор
Для одновременного освоения динамической индикацией и сдвиговым регистром было решено их совместить.
5. Светодиоды
Светодиоды, что может быть лучше? Только трехцветные светодиоды, на которых можно освоить плавную смену цветов.
6. ЖК-дисплей
Стандартный ЖК-дисплей на 2 строки по 16 символов для освоения параллельного интерфейса.
7. Клавиатура
Матричная клавиатура, это нужно знать и уметь.
8. Расширитель портов ввода-вывода
Много портов ввода-вывода не бывает, а тут еще и I2C освоить можно.
9. Электронный термометр
Датчик температуры по 1-Wire, полезная вещь и ценный опыт работы с ним может пригодиться.
10. Электронный потенциометр
На этой вещице можно освоить полноценный SPI и попробовать сделать замеры изменения напряжения через АЦП.
11. Реле
Хоть это и на уровне поморгать светодиодом, но все же приятно услышать знакомый щелчок, правда?
12. Ключевые транзисторы
Так же на уровне моргания светодиодом, но вдруг кому принцип не понятен.
13. Дублирование свободных пинов на внешних выводах
Ну это естественная конструкция для любой отладочной платы, вдруг все, что в ней есть никому не пригодилось, а подключить, что то свое все же нужно.
14. Преобразователь WIFI-UART(esp8266)
В схеме преобразователь участвует как разъем, также он указан и здесь. Используется уже довольно нашумевший модуль esp8266.
15. Преобразователь USB-UART
USB это всегда круто, сдесь используется чип CP2102.
16. JTAG и SWD
Ну куда же без этих вещей.
Такой широкий набор внешних устройств даст возможность освоить большинство приемов и попробовать поработать с большинством интерфейсов, не заморачиваясь закупкой элементов и не отходя от стола, что согласуется с концепцией не только «все на борту», но и «для самых маленьких» (не умеющих паять).
Конечно, не обошлось без накладок, но, как говорит один знакомый инженер, «мастерство инженера измеряется в количестве перерезанных дорожек на первой итерации платы».
Вот список моих «косяков», того, чего я не заметил, забыл или даже не знал при разработке этой платы:
1. Понял, что пины SWD расположены с странном порядке и хоть работе платы это не мешает. Услышал, на мой взгляд, правильное мнение, что их стоит располагать так, как они расположены на STM32VLDISCOVERY, чтобы избежать недоразумений у нового пользователя.
2. Так подключать одноцветные светодиоды, как на данной плате, не стоит, по причине того, что для моргания ими необходимо отремапить JTAG, но получился неожиданный для меня эффект индикации процесса загрузки прошивки.
3. Я разработал свой логотип для этой платы, который хотел перевести в PCB и разместить на плате, но забыл.
4. Для экономии места во второй ревизии платы я бы разместил некоторые не используемые пользователем SMD компоненты на нижней стороне платы.
5. Понял, что для более удобной разводки цепей с кварцевыми резонаторами было бы удобно заменить их на SMD.
6. Забыл подписать, где JTAG и SWD, так же у них не показано, как их подключать и если для JTAG и его разъемом BH-20 все не так сложно, то с SWD ситуация несколько опасней.
7. При разработке футпринта ЖК-дисплея вышел казус и отверстия оказались слишком малы для болтов М3.
8. У преобразователя CP2102 перепутаны выводы RX и TX. Так как я привык, что в документации приводится пример подключения относительно микроконтроллера, а не внешнего устройства, пришлось перерезать таки 2 дорожки.
9. На данной плате расстояние между гребенками выводов не нормировано по дюймам, в связи с этим есть проблема для подключения к беспаечной макетной плате методом втыкания в нее.
10. Вышла накладка с резисторами ограничения тока в цепи индикации включения реле, номинал оказался слишком большой для того, чтобы реле могло коммутироваться.
11. Ну и, как водится, «хорошая мысля приходит опосля». Так, уже после получения платы я понял, что стоило сделать размер ее подходящий хоть под какой-нибудь корпус — видимо придется доработать во второй ревизии.
12. Изначально был заложен маленький цифровой индикатор, так как занимал не большую площадь и был доступен в магазинах, однако оказалось, что на самом деле он везде доступен при заказе от 520 штук, так что пришлось ваять переходник на стандартный цифровой индикатор.
Напоследок покажу вам 3D модель этой платы:
И для сравнения фотографии ее же, как она получилась «в живую», вид с верху:
И вид с боку, чтоб было видно побольше «костылей»:
Извините, но весь проект до сдачи диплома выкладывать мне бы не хотелось, но после этой работы у меня встал вопрос, а стоит ли данный проект развивать? Меня посетила идея написать цикл статей, посвященных обучению, где был бы представлен такой вот полноценный курс по этой отладочной плате, где все написано простыми словами и объяснено на пальцах. Хотелось бы услышать от вас в комментариях насколько это было бы полезно и необходимо на настоящее время.
Спасибо за внимание!
habr.com
Буэнос диас!
Итак, что у нас в меню:
• Keil uVision4 (последняя версия на момент написания статьи v4.73.0.0)
rutracker.org/forum/viewtopic.php?t=2305709
• STM32 ST-LINK utility
www.st.com/web/catalog/tools/FM146/CL1984/SC720/SS1454/PF219866
• Дрова на плату STM32F4DISCOVERY под Windows
www.st.com/web/en/catalog/tools/FM146/CL1984/SC724/SS1677/PF251168
• Тестовая плата STM32F4DISCOVERY
• Библиотека STM32F4xx_DSP_StdPeriph_Lib_V1.3.0
Что ещё установлено на плате:
• Отладчик ST-Link для отладки и прошивки МК, выведен разъём SWD для программирования других плат и контролллеров
• Есть выводы для внешнего питания 5 и 3 В
• Есть кнопка сброса
• Четыре светодиода и одна кнопка, доступные для программирования
• Все 100 выводов МК выведены по бокам платы штырьками по два ряда
• LIS302DL — MEMS-датчик движения, 3х-осевой цифровой акселерометр
• MP45DT02 — цифровой MEMS-микрофон
• CS43L22 — аудио-ЦАП со встроенным драйвером динамиков класса D
• Для USB OTG выведен разъём micro-USB. Если плату с заводской прошивкой подключить через этот разъём к компьютеру, то она будет вести себя как джойстик класса USB HID.
Выбираем hex файл для прошивки (можно просто перетащить файл в основное окно программы).
Прошиваем плату
Результаты прошивки отображаются в командной строке.
Создадим новую папку, куда будем помещать все наши проекты. Например, STM32. В этой папке создадим папку для первого проекта. Назовем ее 00_Test. Так же в папке STM32 создадим папку _Lib – сюда мы поместим фалы библиотек CMSIS и Standard Peripheral Library, и каждый новый проект будет ссылаться на эту папку в поиске библиотек.
В папке 00_Test создадим папки:
Project – здесь будут служебные файлы, которые будет создавать программа Keil uVision4 для данного, конкретного проекта.
user – файлы пользовательского кода (программа, которая будет зашиваться в микроконтроллер). В этой папке создаем текстовый файл main.c. Напишем в нем коротенький код
#include «stm32f4xx.h»
int main(void)
{
while(1) {}
}
Этот код нам понадобится потом.
P.S.: имена папок, а так же структура проекта – личное дело программиста, но надо стремиться к упорядоченному структурированию, чтобы проект был “читабельным” для других программистов. Папку Project можно и не создавать, но тогда все служебные файлы будут “замусоривать” корневой каталог папки 00_Test.
Вот, что должно получится:
Теперь разберемся с библиотеками.
Будем использовать 2 библиотеки:
1. CMSIS (выпускает фирма ARM)
2. Standard Peripheral Library (выпускает фирма STMicroelectronics)
Обе библиотеки бесплатны и доступны для скачивания (эти две библиотеки объединены в одном архиве) на www.st.com/
Причем есть два варианта библиотеки.
1. Библиотека для микроконтроллера STM32F407VGT6 вообще STM32F4xx_DSP_StdPeriph_Lib_V1.3.0 (stm32f4_dsp_stdperiph_lib.zip)
www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140?s_searchtype=partnumber#
2. Библиотека конкретно для тестовой платы STM32F4DISCOVERY STM32F4 -Discovery_FW_V1.1.0 (stsw-stm32068.zip)
www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/PF257904?s_searchtype=keyword
Мы будем пользоваться библиотекой STM32F4xx_DSP_StdPeriph_Lib_V1.3.0
Заходим в папку
STM32F4xx_DSP_StdPeriph_Lib_V1.3.0
↓
Libraries
↓
И копируем две папки CMSIS и STM32F4xx_StdPeriph_Driver в нашу папку _Lib
Удаляем в папке CMSIS (которую мы скопировали в _Lib) все, кроме папки Device.
Заходим в папку
STM32F4xx_DSP_StdPeriph_Lib_V1.3.0
↓
Project
↓
STM32F4xx_StdPeriph_Examples
↓
ADC
↓
ADC_DMA
↓
Копируем файл stm32f4xx_conf.h в нашу папку STM32F4xx_StdPeriph_Driver
Далее проделаем следующие манипуляции:
_Lib
↓
CMSIS
↓
Device
↓
ST
↓
STM32F4xx
↓
Include
↓
В свойствах файлов stm32f4xx.h и system_stm32f4xx.h снимаем галочку “Только чтение”
Запускаем программу Keil uVision4 и создаем новый проект.
Путь для проекта указываем:
STM32
↓
00_Test
↓
Project
↓
Имя проекта Test
Далее программа предлагает автоматически создать файл конфигурации данного микроконтроллера – startup_stm32f40xx.s. Соглашаемся.
В итоге получили:
Переименуем папку Source Group 1 (в которую программа поместила файл конфигурации микроконтроллера startup_stm32f40xx.s) в startup. Для этого щелкаем один раз левой кнопкой мыши по имени папки и нажимаем F2 – имя папки теперь доступно для переименования. Аналогичным образом переименовываем имя проекта из Target 1 в 00_Test.
Добавляем в проект папку user:
Добавим ранее созданный файл main.c. в папку user. Для этого дважды щелкаем левой кнопкой мыши по заголовку папки (или при помощи правой кнопки вызываем контекстное меню).
Итак, мы создали на жестком диске папку проекта 00_Test. В этой папке создали еще две папки: Project и user.
Project – тут программа будет размещать свои служебные файлы и главный файл проекта Test.uvproj
user – тут мы будем размещать файлы кода, который будем загружать в микроконтроллер.
В среде программирования Keil uVision4 создали новый проект 00_Test. В структуре проекта сейчас две папки: startup и user
startup – в этой папке находится файл конфигурации микроконтроллера
user – в этой папке содержатся файлы из папки user, которая была создана ранее на жестком диске.
На жестком диске больше никаких папок создавать не будем. Но в среде программирования в структуре проекта создадим еще две папки: CMSIS и StdPeriphLib. В этих папках будут содержаться наши библиотеки.
Подключим к этим папкам необходимые файлы из папки _Lib.
Для CMSIS:
_Lib
↓
CMSIS
↓
Device
↓
ST
↓
STM32F4xx
↓
Source
↓
Templates
↓
system_stm32f4xx.c
Для StdPeriphLib:
_Lib
↓
STM32F4xx_StdPeriph_Driver
↓
src
↓
все файлы (кроме файла stm32f4xx_fmc.c)
В опциях проекта необходимо указать пути к этим папкам библиотек
В папке user откроем файл main.c, щелкаем правой кнопкой мыши по #include «stm32f4xx.h», и выбираем Open…
Далее снимаем комментарии в тех местах кода, как показано ниже
Далее необходимо настроить проект:
Запускаем компиляцию проекта – F7.
Если все правильно, то ошибок не должно быть.
Напишем несложный код для мигания светодиодом
Обращаю внимание, что код должен заканчиваться пустой строкой (строка №45).
Запустим компиляцию (F7). Теперь можно “зашить” проект в микроконтроллер:
Если все было сделано правильно, то на тестовой плате должен мигать зеленый светодиод. Чтобы выйти из окна отладчика, нажимаем Ctrl+F5.
УРА!!!
Продолжение следует…
tqfp.org
Микроконтроллеры STM32 — более сложные и высокоуровневые устройства, чем привычные PIC и AVR. Разработка программ под эти контроллеры сложнее, особенно для новичков — настолько, что некоторые боятся даже приступать к их изучению. Гораздо легче будет, если составить некий план изучения, и двигаться в соответствии с ним. Я покажу, что ничего сложного в этом нет, и не стоит из-за страха неудачи лишать себя радостей прогресса
Наверняка у вас уже есть одна из отладочных плат STM32 — какая-то из семейства DIscovery: STM32VLDiscovery (раньше она называлась STM32-Discovery), STM32F**Discovery, STM32F3Discovery, или STM32F4Discovery. Я бы рекомендовал начать с самой младшей платы — STM32VL**Discovery, а если у вас её ещё нет, и вы собираетесь её покупать — обязательно прочитайте мой обзор плат STM32Discovery.
Как я уже сказал, лучше начинать с STM32VLDiscovery — она самая старая, простая, дешёвая и доступная, а небольшие изменения в более новых версиях библиотек не страшны.
Она питается и программируется через USB, но имеет и возможность питания от внешнего источника 5 или 3.3 вольт — так что вы сможете поставить её напрямую в своё устройство, если по каким-то причинам не хотите или не можете сделать плату и паять микроконтроллер на неё. На самом деле, пайка TQFP-48 не так сложна, как кажется.
На плате есть одна пользовательская кнопка, и кнопка Reset. Также здесь распаяны два светодиода, а наружу выведен 51 контакт ввода-вывода. Кварц на плате можно менять на другой, но для нас с вами это пока не так важно.
Когда вы начнёте делать свои платы с контроллерами STM32 — вам понадобится программатор. Очень удобно не покупать его, а использовать программатор с платы дискавери — контакты программатора выведены на разъём с названием SWD, нужно лишь переключить программатор в режим внешнего устройства, сняв джамперы с разъёма CN3.Я считаю, что изучение в любом случае нужно начинать с примеров, предлагаемых производителем. В обзоре отладочных плат можно скачать архив с примерами к каждой плате. На плате по умолчанию прошит хороший пример демонстрации возможностей — включите плату, посмотрите на то, что она может. Правда, в начале вам это мало поможет, хотя можете посмотреть код этого примера (лежит в папке примеры -> project -> Master_Workspace).
Я рассматриваю разработку в среде IAR, поэтому смотрите внимательно — в каждом примере есть папка «EWARM» — там лежит проект именно под среду IAR. Запускайте файл с расширением eww — если у вас установлен IAR, это будет единственный файл с иконкой.
Самое первое, что нужно сделать с платой Discovery — это воплотить на ней стандартный электронный Hello world, помигать светодиодами. Для этого предназначен пример project -> IO_Toggle. Обязательно попробуйте что-нибудь в нём изменить, к примеру частоту мигания светодиодов.
А теперь — помигаем светодиодом, поуправляем светодиодом из USART-консоли и поуправляем из той же консоли сервомоторчиком. Если всё получилось — настроим яркость светодиода с помощью ШИМ.
Особенно советую прочитать мой цикл статей «STM32 с нуля».
catethysis.ru
Когда только начинаешь программировать микроконтроллеры или давно не занимался программированием, то разбираться в чужом коде довольно не легко. Вопросы «Что это такое?» и «Откуда это взялось?» возникают чуть ли не на каждом сочетании букв и цифр. И чем быстрее приходит понимание логики «что? зачем? и откуда?», тем легче проходит изучение чужого кода, в том числе и примеров. Правда иногда для этого приходиться не один день «попрыгать по коду» и «полистать мануалов».
У всех микроконтроллеров STM32F4xx довольно много периферии. За каждым периферийным устройством микроконтроллеров закреплена определённая, конкретная и неперемещаемая область памяти. Каждая область памяти состоит из регистров памяти, причём эти регистры могут быть 8-разрядными, 16-разрядными, 32-разрядными или ещё как, зависит от микроконтроллера. В микроконтроллере STM32F4 эти регистры 32-разрядные и каждый регистр имеет своё назначение и свой конкретный адрес. Ничто не мешает в своих программах обращаться к ним напрямую, указывая адрес. По какому адресу размещен тот или иной регистр и к какому периферийному устройству он относиться указывается в карте памяти. Для STM32F4 такая карта памяти есть в документе DM00031020.pdf, который можно найти на сайте st.com. Документ называется
RM0090
Reference manual
STM32F405xx/07xx, STM32F415xx/17xx, STM32F42xxx and STM32F43xxx advanced ARM-based 32-bit MCUs
В разделе 2.3 Memory map на странице 64 начинается таблица с адресами областей регистров и их принадлежностью к периферийному устройству. В той же таблице есть ссылка на раздел с более подробным распределением памяти для каждой периферии.
Слева в таблице указан диапазон адресов, в середине название периферии и в последнем столбце — где находиться более подробное описание распределения памяти.
Так для портов ввода-вывода общего назначения GPIO в таблице распределения памяти можно найти что для них выделены адреса начиная с 0х4002 0000. Порт ввода-вывода общего назначения GPIOA занимает диапазон адресов от 0х4002 000 до 0х4002 03FF. Порт GPIOB занимает диапазон адресов 0х4002 400 — 0х4002 07FF. И так далее.
Для того чтобы посмотреть более подробное распределение в самом диапазоне, нужно просто пройти по ссылке.
Здесь также находиться таблица, но уже с картой памяти для диапазона адресов GPIO. Согласно этой карте памяти первые 4 байта принадлежат регистру MODER, следующие 4 байта принадлежат регистру OTYPER и так далее. Адреса регистров считаются от начала диапазона, принадлежащему конкретному порту GPIO. То есть каждый регистр GPIO имеет конкретный адрес, который можно использовать при разработке программ для микроконтроллера.
Но использование адресов регистров для человека неудобно и чревато большим количеством ошибок. Поэтому производители микроконтроллеров создают стандартные библиотеки, которые облегчают работу с микроконтроллерами. В этих библиотеках физическим адресам ставиться в соответствие их буквенное обозначение. Для STM32F4xx эти соответствия заданы в файле stm32f4xx.h. Файл stm32f4xx.h принадлежит библиотеке CMSIS и лежит в папке Libraries\CMSIS\ST\STM32F4xx\Include\.
Посмотрим как определяется в библиотеках порт GPIOA. Аналогично определяется и всё остальное. Достаточно понять принцип. Файл stm32f4xx.h довольно большой и поэтому лучше использовать поиск или возможности, которые предоставляет ваш toolchain.
Для порта GPIOA находим строку в которой упоминается GPIOA_BASE
GPIOA_BASE определяется через AHB1PERIPH_BASE
AHB1PERIPH_BASE в свою очередь определяется через PERIPH_BASE
А в свою очередь PERIPH_BASE определяется как 0х4000 0000. Если посмотреть карту рапределения памяти периферийных устройств (в разделе 2.3 Memory map на странице 64), то увидим этот адрес в самом низу таблицы. С этого адреса начинаются регистры всей периферии микроконтроллера STM32F4. То есть PERIPH_BASE — это начальный адрес всей периферии микроконтроллеров STM32F4xx вообще, и микроконтроллера STM32F407VG в частности..
AHB1PERIPH_BASE определяется как сумма (PERIPH_BASE + 0x00020000). (см.картинки обратно). Это будет адрес 0х4002 0000. В карте памяти с этого адреса начинаются порты ввода-вывода общего назначения GPIO.
GPIOA_BASE определяется как (AHB1PERIPH_BASE + 0x0000), то есть это начальный адрес группы регистров порта GPIOA.
Ну а сам порт GPIOA определяется как структура из регистров, размещение которых в памяти начинается с адреса GPIOA_BASE (см строку #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE).
Структура каждого порта GPIO определяется как тип GPIO_TypeDef.
Таким образом, стандартные библиотеки, в данном случае файл stm32f4xx.h, просто очеловечивают машинную адресацию. Если вы увидите запись GPIOA->ODR = 1234, то это означает, что по адресу 0х40020014 будет записано число 1234. GPIOA имеет начальный адрес 0х40020000 и регистр ODR имеет адрес 0х14 от начала диапазона, поэтому GPIOA->ODR имеет адрес 0х40020014.
Или например, вам не нравиться запись GPIOA->ODR, то можно определить #define GPIOA_ODR ((uint32_t *) 0x40020014) и получить тот же самый результат, записав GPIOA_ODR = 1234;. Только вот насколько это целесообразно? Если действительно хочется ввести свои обозначения, то лучше просто переназначить стандартные. Как это делается, можно посмотреть в файле stm32f4_discovery.h Например, вот так там определяется один из светодиодов:
#define LED4_PIN GPIO_Pin_12
#define LED4_GPIO_PORT GPIOD
#define LED4_GPIO_CLK RCC_AHB1Periph_GPIOD
Более детальное описание периферии портов находиться в stm32f4xx_gpio.h
firsthand.ru