STM32F4xx_Поваренная книга анархиста

stm32

/*-------------------------------------------------------------------------------------------------
* Name: Поваренная книга анархиста программиста
* микроконтроллерных систем на базе микропроцессора ARM
* Cortex M4F (среда разработки Keil uVision4 v4.73.0.0)
*--------------------------------------------------------------------------------------------------
* Copyright © All rights reserved. Maltsev Alexey. 2014
* vk.com/id233978561
* winhackexe@yandex.ru
* 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.



УРА!!!
Продолжение следует…

26 комментариев

avatar
Я, кстати, предпочитаю хранить библиотеки прямо вместе с прошивкой. Таким образом, прошивка становится транспортабельной. Нет, конечно, можно таскать с собой и папочку libs, но это — не очень-то удобно. Лучше, когда все одной кучей можно перетащить. Да и если новая версия библиотеки будет несовместима со старой, не придется придумывать как разруливать версии.
avatar
Автор, с каким посылом Вы писали эту статью? Для себя чтоб не забыть — вопросов нет. Очередной Quick Start Guide — так миллионы их. Первая статья из циклакниги — так хоть бы оглавление добавили(не зачахнет ли как обычно после 2,3 серии???)
И еще — что за магические числа в настройках портов? Раз уж Вы подключили библиотеки, пользуйтесь удобствами, которые она предоставляет.
avatar
Что будет рассмотрено в следующей части?

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален
avatar
Отстраиваясь от темы оскорблений, большинство телодвижений описанных в статье не нужны, если использовать бесплатный Coocox. Хватит пиратить Keil. А вот скриптец для настройки клока есть Тыц вроде у меня когда-то работал…
Комментарий отредактирован 2014-06-07 14:08:51 пользователем faddistr
avatar
Есть еще крутая штука — EmBlocks. Я еще использую патч с сайта ravenium.ru/.
Еще можно настроить CodeBlocks, но это долго и сложно. Слышал даже в Sublime компилируют и прошивают.
avatar
В кокосе есть репозиторий с либами, которые скачиваются и ложатся в проект в 2 клика(даже юсб у меня поднялся минут за 20). Еклипс все таки более развит и распостранен чем кодеблокс… Недостаток то, что компилятор gcc немного отличается от кейловского, также среда тормозит на слабых машинах(хотя я уже пару лет таких не встречал). Emblocks попробую… В любом случае есть целая куча сред и бесплатный компилятор, пиратить кейл или иар смысла уже нету.
avatar
В кокосе есть репозиторий с либами, которые скачиваются и ложатся в проект в 2 клика

Это есть в EmBlocks.
avatar
Кстати, а кокос уже поддерживает C++?
avatar
Принципиально не пользуюсь плюсами при программировании на мк. Тут зоопарк стандартов обычного Си, а вы про ++ говорите))))
Комментарий отредактирован 2014-06-15 12:25:17 пользователем faddistr
avatar
да, недавно добавили (CooCox CoIDE V1.7.6 ): www.coocox.org/CoIDE/CoIDE_Updates.htm

Added: Support C++ in build and debug.

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален
avatar
А продолжение «STM32F4xx_Поваренная книга анархиста» непременно будет, но немного позже, ибо я сейчас архи как занят…
avatar
И тем не менее нужно отвлечься на продолжение, ибо идея важней))
avatar
Кстати, это книга или фотоальбом? Зачем столько картинок? Достаточно текстового описания и 1-2 картинки. И да, стрелочки криво нарисованы, для книги не канает.

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален

Warning: Undefined array key "bOneComment" in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42

Warning: Attempt to read property "value" on null in /var/www/tqfp.org/templates/compiled/bsvi/d763631550813d562933bc81b914956736cc6593_0.file.comment.tpl.php on line 42
комментарий был удален
avatar
В соответствии с пунктами 5, 8 и 10 правил сообщества, вся политика и переход на личности из комментариев и статьи вырезана. Это не из-за того, что я такой жесткий цензор, а потому, что начинается откровенный срач. Давайте не ссориться, а рисовать платы/паять/программить! Ведь именно для этого мы тут собрались :)
Комментарий отредактирован 2014-06-15 10:40:40 пользователем bsvi
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.