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

Учебник stm32 – Учебник STM32 — описание, программирование, отличие от Arduino

Содержание

STM32 — Все для студента

Теги, соответствующие этому тематическому разделу

Файлы, которые ищут в этом разделе

Доверенные пользователи и модераторы раздела

Активные пользователи раздела

  • Без фильтрации типов файлов

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…

  • №1
  • 12,69 МБ
  • добавлен
  • изменен

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…

  • №2
  • 8,19 МБ
  • добавлен
  • изменен

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…

  • №3
  • 7,69 МБ
  • добавлен
  • изменен

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…

  • №4
  • 9,67 МБ
  • добавлен
  • изменен

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…

  • №5
  • 21,64 МБ
  • добавлен
  • изменен

www.twirpx.com

Изучайте STM8 и STM32 по методичкам на русском языке!

На сайте КОМПЭЛ размещены новые методические материалы на русском языке по программированию микроконтроллеров STM8 и STM32. Учебные материалы представляют собой инструкции к лабораторным работам на базе недорогих отладочных плат STM8SVLDISCOVERY, STM32F3DISCOVERY и STM32F4DISCOVERY. Рассчитанные на начинающих разработчиков, лабораторные работы пошагово учат работать с разнообразной периферией микроконтроллеров — портами ввода-вывода, таймерами, ШИМ, АЦП, компаратором, интерфейсами USART, I²C и SPI.

Лабораторные практикумы будут полезны тем инженерам, кто только осваивает новую архитектуру микроконтроллеров STMicroelectronics, а также студентам компьютерных специальностей, изучающим программирование встроенных систем.

Содержание методических материалов:

ЛАБОРАТОРНЫЙ ПРАКТИКУМ по изучению микроконтроллеров STM8 на базе отладочного модуля STM8SVLDISCOVERY
  • Лабораторная работа №1. Работа с портами ввода/вывода
  • Лабораторная работа №2. Использование внешних прерываний
  • Лабораторная работа №3. Использование таймеров. Организация задержек
  • Лабораторная работа №4. Использование таймеров Режим ШИМ
  • Лабораторная работа №5. Работа с UART
  • Лабораторная работа №6. Работа с SPI
  • Лабораторная работа №7. Работа с аналогово–цифровым преобразователем

Скачать

ЛАБОРАТОРНЫЙ ПРАКТИКУМ по изучению микроконтроллеров STM32 на базе отладочного модуля STM32F3DISCOVERY
  • Лабораторная работа №1. Работа с портами ввода/вывода
  • Лабораторная работа №2. Работа с внешними прерываниями
  • Лабораторная работа №3. Работа с АЦП. Устройства индикации
  • Лабораторная работа №4. Организация последовательной передачи информации. Интерфейс UART
  • Лабораторная работа №5. Использование аналогового компаратора
  • Лабораторная работа №6. Операционный усилитель

Скачать

ЛАБОРАТОРНЫЙ ПРАКТИКУМ по изучению микроконтроллеров STM32 на базе отладочных модулей STM32F3DISCOVERY и STM32F4DISCOVERY. Лабораторная работа №1. Изучение интерфейса SPI в STM32F3 Discovery
  • Лабораторная работа №2. Изучение интерфейса I2C. Работа с EEPROM-памятью
  • Лабораторная работа №3. Подключение матричной клавиатуры
  • Лабораторная работа №4. Использование датчиков. Работа с акселерометром

Скачать

Материалы на постоянной основе размещены по следующему адресу: Библиотека → Справочники → Литература производителя ST Microelectronics.

•••

Наши информационные каналы
О компании ST Microelectronics

Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство …читать далее

www.compel.ru

Обучение на STM32 в массы / Habr

Небольшая предыстория

Я очередной выпускник некоего московского вуза (не буду уточнять какого, но средненького). Полгода назад нам сообщили, что пора писать диплом. На тот момент я только-только начал осваивать микроконтроллеры и давалось мне это не то, чтобы нелегко, но со скрипом, который производит холодильник, когда ты, в одиночку, пытаешься аккуратно сдвинуть его, не повредив драгоценный ламинат (в моем случае линолеум).

Мое обучение началось, когда я два года назад заинтересовался темой микроконтроллеров и инженер, у которого поинтересовался насчет них, выдал мне плату 300х200мм и сказал, что в ней стоит контроллер STM32F217ZGT6 и на этой плате есть все необходимое для обучения. «В общем, освоишь ее — все остальное покажется фигней» (он, правда, не сказал, что для моргания светодиодом надо настроить SPI, о котором на тот момент я даже не слышал). Спустя три не очень напряженных месяца бесплотных попыток, осознания слабости навыков программирования и огромного количества прочитанных статей пришлось все же раскошелится на STM32VLDISCOVERY и способом копирования программ и экспериментов с ними дело наконец-то пошло, но все равно медленно.

За полтора года успел поработать разработчиком, искал вакансии, где работают с STM32 (так как считаю, что сейчас это наиболее перспективные микроконтроллеры своего класса), нахватался опыта и когда дело дошло до диплома, вспомнил о своих наболевших мозолях. Идея с темой пришла мгновенно: «Отладочная плата на STM32 и (полноценный) обучающий курс (для самых маленьких) к ней».

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


Я в курсе, что существует множество статей, где написано, что, где и как. И как работать с регистрами, как понимать, что они делают и т.д. и т.п. Для меня (может, от большого ума) многие такие статьи были все равно не понятны и выбраться за пределы моргания светодиодом без примеров рабочего кода я не мог довольно долго. Плюс ко всему в даже циклах (по 6-7 штук) статей не всегда прослеживалась система, многое не разжевывалось (чего мне сильно не хватало), а самое главное — они заканчивались, не закрыв тему до конца, оставив после себя еще больше вопросов.

Именно по этому захотел написать цельный и законченный курс, чтобы так сказать другие не мучились и самому разобраться. Так что придя в институт и понимая, что для быстрого освоения и понимания нужен стимул (а точнее — хороший такой пинчище), я стал бить себя пяткой в грудь (рыть себе могилу), что не только напишу обучающий курс (в нашем универе пришлось назвать его методическим пособием), но и макет работающий предоставлю. Тему приняли, задание написал (могилу вырыл, надгробие заказал), дело было за малым, все написать и разработать (лечь в могилу, закопаться и поставить надгробие).

Жизнь показала, что времени у меня было отнюдь не полгода, но все же все время, отведенное на диплом, почти закончилось, совсем скоро защита, но как не удивительно все не только готово, но и почти на 100% протестировано (на живых людях в том числе).

На выходе получилось следующее:

1. Сам курс (методическое пособие по-научному)

Вкратце о нем можно сказать, что на мой взгляд и по отзывам тестировщиков он полноценный, но немного суровый и не доработанный. Так как я решил, что не буду писать учебник по программированию на СИ, следовательно, и в курсе отсутствуют объяснения операторов, оттого и сказали, что местами курс суров. По поводу недоработанности честно скажу, я не все успел отладить к сдаче, чтобы об этом писать не только здесь, но и в методическом пособии к сдаче. Так же считаю, что можно лучше, но об этом чуть позже.
2. Отладочная плата на контроллере STM32F103RET6

Здесь все немного лучше, чем в первом пункте, плата разработана, заказана (из-за обстоятельств заказывать пришлось срочно) в Резоните, компоненты заказаны, спаяна ручками (честно скажу, никакое видео не передаст ощущения первой пайки LQFP64) и протестирована (большее ее часть заработала сразу же). Но это макет и, конечно, не обошлось без накладок: проводков, переходников и других различных «костылей», но заказать вторую ревизию я, к несчастью, не успею, да наверно и не стал бы, для защиты диплома, уверен и этого хватит. Так что ниже я расскажу более подробно об этой отладочной плате.

Придя на первую работу в качестве разработчика электроники, я столкнулся с одним интересным мнением и, как оказалось, оно весьма распространено. Это мнение звучало примерно так: «Вот я программист и программирую микроконтроллеры, схемотехнику не знаю и знать не хочу, паять, кстати, тоже не умею». Пообщавшись с группой программистов вне фирмы, понял, что человек с моей работы далеко не одинок в своем мнении и хоть я его и не поддерживаю, понять и уважать мнение окружающих стоит, тем более это отлично вписывалось в тогдашнюю концепцию отладочной платы «все на борту». В связи с этим плата получилось достаточно «жирненькая», получила название 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

STM32F4xx_Поваренная книга анархиста / stm32 / Сообщество разработчиков электроники


/*————————————————————————————————-
* Name: Поваренная книга анархиста программиста
* микроконтроллерных систем на базе микропроцессора ARM
* Cortex M4F (среда разработки Keil uVision4 v4.73.0.0)
*—————————————————————————————————
* Copyright © All rights reserved. Maltsev Alexey. 2014
* vk.com/id233978561
* [email protected]
* ICQ: 457-568-689
*————————————————————————————————*/

Буэнос диас!
Итак, что у нас в меню:

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

STM32F4DISCOVERY

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

На плате установлен 32-битный ARM-микроконтроллер STM32F407VGT6 семейства Cortex-M4F со следующими характеристиками:
• Корпус LQFP100 (100 ножек)
• Напряжение питания: 1.8 — 3.6 В
• Частота: до 168 МГц
• Память программ (Flash): 1 МБайт
• ОЗУ (RAM): 196 Кбайт
• 4 Кбайт backup SRAM (аналог EEPROM)
• Поддержка инструкций DSP и чисел с плавающей точкой
• 16-битные таймеры: 2 базовых таймера, 8 таймеров общего назначения, 2 продвинутых таймера, 2 watchdog
• 2 32-битных таймера общего назначения
• USB 2.0 full-speed device/host/OTG со своим PHY на борту
• USB 2.0 high-speed/full-speed device/host/OTG с отдельным DMA, со своим full-speed PHY на борту, есть поддержка ULPI
• 10/100 Ethernet MAC с отдельным DMA, поддержка PHY-микросхем с интерфесами IEEE 1588v2, MII/RMII
• 3x SPI (37.5 МБит/с), 2 из них с мультиплексированными полнодуплексными I2S для качественной передачи звука
• 3x I2C с поддержкой SMBus/PMBus
• 4x USART, 2x UART: 10.5 МБит/с, интерфейс ISO 7816, LIN, IrDA, modem control
• 2x CAN (2.0B Active)
• SDIO (для SD-карт)
• DCMI — [от 8 до 14]-битный параллельный интерфейс камеры (до 54 МБайт/с)
• Аналоговый генератор случайных чисел
• Встроенный модуль расчёта CRC
• 82x GPIO (выводы I/O)
• RTC (Real-Time Clock)
• 3 12-битных АЦП, 2.4 миллиона выборок в секунду, 16 каналов, 7.2 миллиона выборок в секунду в режиме тройного чередования
• 2 12-битных ЦАП
• Контроллер DMA с 16 каналами и поддержкой FIFO и пакетной передачи
• Параллельный интерфейс LCD, режимы 8080/6800
• FSMC — контроллер статической памяти с поддержкой Compact Flash, SRAM, PSRAM, NOR и NAND
• Возможность отладки по JTAG или SWD


Что ещё установлено на плате:
• Отладчик ST-Link для отладки и прошивки МК, выведен разъём SWD для программирования других плат и контролллеров
• Есть выводы для внешнего питания 5 и 3 В
• Есть кнопка сброса
• Четыре светодиода и одна кнопка, доступные для программирования
• Все 100 выводов МК выведены по бокам платы штырьками по два ряда
• LIS302DL — MEMS-датчик движения, 3х-осевой цифровой акселерометр
• MP45DT02 — цифровой MEMS-микрофон
• CS43L22 — аудио-ЦАП со встроенным драйвером динамиков класса D
• Для USB OTG выведен разъём micro-USB. Если плату с заводской прошивкой подключить через этот разъём к компьютеру, то она будет вести себя как джойстик класса USB HID.

STM32 ST-LINK Utility

Данную программу удобно использовать для прошивки микроконтроллера при помощи hex файла.
Подсоединяем плату к ПК при помощи кабеля USB – miniUSB. Нажимаем на панели инструментов Connect.



Выбираем hex файл для прошивки (можно просто перетащить файл в основное окно программы).



Прошиваем плату


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

Keil uVision4

Монстр программирования. Умеет делать абсолютно все, даже то, что не умеет 😉

Создадим новую папку, куда будем помещать все наши проекты. Например, 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

Микроконтроллеры STM32 — более сложные и высокоуровневые устройства, чем привычные PIC и AVR. Разработка программ под эти контроллеры сложнее, особенно для новичков — настолько, что некоторые боятся даже приступать к их изучению. Гораздо легче будет, если составить некий план изучения, и двигаться в соответствии с ним. Я покажу, что ничего сложного в этом нет, и не стоит из-за страха неудачи лишать себя радостей прогресса

1. С чего начать/отладочная плата

Наверняка у вас уже есть одна из отладочных плат STM32 — какая-то из семейства DIscovery: STM32VLDiscovery (раньше она называлась STM32-Discovery), STM32F**Discovery, STM32F3Discovery, или STM32F4Discovery. Я бы рекомендовал начать с самой младшей платы — STM32VL**Discovery, а если у вас её ещё нет, и вы собираетесь её покупать — обязательно прочитайте мой обзор плат STM32Discovery.

Как я уже сказал, лучше начинать с STM32VLDiscovery — она самая старая, простая, дешёвая и доступная, а небольшие изменения в более новых версиях библиотек не страшны.

Она питается и программируется через USB, но имеет и возможность питания от внешнего источника 5 или 3.3 вольт — так что вы сможете поставить её напрямую в своё устройство, если по каким-то причинам не хотите или не можете сделать плату и паять микроконтроллер на неё. На самом деле, пайка TQFP-48 не так сложна, как кажется.

На плате есть одна пользовательская кнопка, и кнопка Reset. Также здесь распаяны два светодиода, а наружу выведен 51 контакт ввода-вывода. Кварц на плате можно менять на другой, но для нас с вами это пока не так важно.

Когда вы начнёте делать свои платы с контроллерами STM32 — вам понадобится программатор. Очень удобно не покупать его, а использовать программатор с платы дискавери — контакты программатора выведены на разъём с названием SWD, нужно лишь переключить программатор в режим внешнего устройства, сняв джамперы с разъёма CN3.

2. Первые опыты с платой Discovery

Я считаю, что изучение в любом случае нужно начинать с примеров, предлагаемых производителем. В обзоре отладочных плат можно скачать архив с примерами к каждой плате. На плате по умолчанию прошит хороший пример демонстрации возможностей — включите плату, посмотрите на то, что она может. Правда, в начале вам это мало поможет, хотя можете посмотреть код этого примера (лежит в папке примеры -> project -> Master_Workspace).

Я рассматриваю разработку в среде IAR, поэтому смотрите внимательно — в каждом примере есть папка «EWARM» — там лежит проект именно под среду IAR. Запускайте файл с расширением eww — если у вас установлен IAR, это будет единственный файл с иконкой.

Самое первое, что нужно сделать с платой Discovery — это воплотить на ней стандартный электронный Hello world, помигать светодиодами. Для этого предназначен пример project -> IO_Toggle. Обязательно попробуйте что-нибудь в нём изменить, к примеру частоту мигания светодиодов.

А теперь — помигаем светодиодом, поуправляем светодиодом из USART-консоли и поуправляем из той же консоли сервомоторчиком. Если всё получилось — настроим яркость светодиода с помощью ШИМ.

Особенно советую прочитать мой цикл статей «STM32 с нуля».

catethysis.ru

STM32F4: Немного о стандартных библиотеках для новичков

Когда только начинаешь программировать микроконтроллеры или давно не занимался программированием, то разбираться в чужом коде довольно не легко. Вопросы «Что это такое?» и «Откуда это взялось?» возникают чуть ли не на каждом сочетании букв и цифр. И чем быстрее приходит понимание логики «что? зачем? и откуда?», тем легче проходит изучение чужого кода, в том числе и примеров. Правда иногда для этого приходиться не один день «попрыгать по коду» и «полистать мануалов».

У всех микроконтроллеров 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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *