Iar stm32 примеры программ

В статье «Программное обеспечение для STM32F4DISCOVERY (http://firsthand.ru/node/298)» я уже писал, что примеры которые идут вместе с IAR EWARM (IAR Embedded Workbench for ARM) для микроконтроллеров STM32F4 не работают с STM32F4Discovery, потому что они ориентированы на их собственную отладочную плату IAR KickStart Kit for STM32F407ZG.

Для того чтобы работать в IAR EWARM с STM32F4Discovery нужны примеры именно для STM32F4-Discovery и именно для среды разработки или toolchain IAR EWARM (IAR Embedded Workbench for ARM).

Такие примеры есть у самой компании STMicroelectronics и их можно свободно использовать.

Скачать примеры можно с сайта «www.st.com» компании «STMicroelectronics» со страницы с названием

STSW-STM32068
STM32F4DISCOVERY board firmware package, including 22 examples (covering USB Host, audio, MEMS accelerometer and microphone) (AN3983)

Попасть на неё легче через поиск. Можно и по другому, но мне нравиться через поиск. Так быстрее. Просто набираешь «STSW-STM32068» и первая ссылка ведет куда надо.

IAR Создаем проект

Ищем внизу на странице раздел «Get Software» и жмем на кнопочку «Download» напротив STSW-STM32068. После этого загружается zip-архив stsw-stm32068.zip.

В данном архиве, после распаковки, видим папку STM32F4-Discovery_FW_V1.1.0. Эта папка и содержит примеры для STM32f4discovery. Эту папку можно теперь перенести в папку с проектами IAR EWARM, оставить там где она есть или перенести в, специально созданную для экспериментов, свою папку. У меня такой папкой является E:PROJSTM32F4, вот туда я и перенес папку STM32F4-Discovery_FW_V1.1.0. со всем её содержимым.

Практически во всех примерах от официальных изготовителей микроконтроллеров и изготовителей отладочных плат файлы проектов для IAR EWARM (IAR Embedded Workbench for ARM) размещаются в папках с названием EWARM. Например, есть папка «Demonstration» с файлами проекта демонстрации некоторых основных возможностей отладочной платы, а в ней есть папка EWARM, в которой находятся файлы проекта для IAR EWARM.

Пример работы с портами ввода/вывода GPIO я нашел в папке «E:PROJSTM32F4STM32F4-Discovery_FW_V1.1.0ProjectPeripheral_ExamplesIO_Toggle» и файлы проекта для IAR EWARM соответственно в папке «E:PROJSTM32F4STM32F4-Discovery_FW_V1.1.0ProjectPeripheral_ExamplesIO_ToggleEWARM»

Далее находим файл с расширением «.eww» — это IO_Toggle.eww. Это основной файл для проекта в IAR EWARM. Щелкаем по нему мышкой и если toolchain IAR EWARM установлен правильно, то вскоре откроется IAR Embedded Workbench for ARM с загруженным проектом IO_Toggle.

Слева отображается состав проекта, а внизу две строчки сообщают что проект создан для STM32F407VG.

STM32 — программирование для начинающих. Пошагово. CubeMX CubeIDE

В папке User находиться файл main.c в котором содержиться основной код программы и откуда всегда стоит начинать изучать примеры. Но сейчас мы этот шаг изучения пропустим, потому что основная цель — это проверить работоспособность примеров для STM32F4discovery в среде разработки IAR Embedded Workbench for ARM.

Для этого просто откомпилируем пример работы с портом ввода/вывода GPIO. Для этого в меню выбираем «Project», затем «Rebuild All». Так проверим наличие ошибок, все ли файлы присутствуют и, если всё хорошо, откомпилируем пример.

После компиляции проекта выходит сообщение о том, что ошибок нет и замечаний нет.

Теперь загрузим полученную прошивку в микроконтроллер в режиме отладки. Если отладочная плата STM32F4discovery ещё не подключена, то самое время её подключить. В меню выбираем «Project», затем «Download and Debug».

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

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

Теперь можно остановить отладку. При этом программа в микроконтроллере никуда не изчезает, а спокойно продолжает работать.

И как итог, получаем что примеры для STM32F4-Discovery с сайта st.com для IAR EWARM вполне рабочие и ими можно пользоваться для изучения и освоения микроконтроллера STM32F407VG.

Книги:

Источник: www.firsthand.ru

Программирование STM32. Часть 2: IAR + CMSIS

Это вторая часть цикла статей про микроконтроллеры STM32F1xxx, начало тут. Здесь мы поговорим о библиотеке CMSIS, зачем она нужна, где взять и как ее подключить к своему проекту. Все стати цикла будут находиться здесь: http://dimoon.ru/category/obuchalka/stm32f1

Введение

Cortex Microcontroller Software Interface Standard (CMSIS) содержит описание всех регистров микроконтроллера, таблицу векторов прерываний и некоторый стартовый код, который выполняется перед передачей управления функции main(). Вообще говоря, СMSIS является необязательным компонентом проекта, однако, в этом случае придется самому заботиться об огромном количестве вещей. Кроме того, эта библиотека позволяет писать в некоторой степени переносимый код с одного микроконтроллера, на другой.

Качаем CMSIS

В данный момент CMSIS поставляется совместно с STM32Cube MCU Package. Скачать его можно на странице выбранного микроконтроллера (там, где качали даташит, Reference manual и так далее), называется STM32CubeF1:

Для скачивания нужно зарегистрироваться у них на сайте. Феее, ну и нафига они это сделали?: Оставлю ка я ссылку на архив в конце статьи, чтоб не возится во всеми этими регистрациями. Но все же лучше скачать актуальную версию библиотеки на официальном сайте. Весит архив к стати довольно много, 97 метров.

Создаем проект в IAR ARM

Теперь проводим небольшую подготовительную работу по созданию проекта в IAR ARM. Запускаем среду IAR Embedded Workbench:

В IAR-e все проекты (Projects) находятся внутри Workspace-а, причем количество проектов в одном воркспейсе может быть несколько.

Выбираем Project->Create New Project…

В открывшемся окне выбираем тип проекта: C->main:

Нажимаем ОК, набираем какое-нибудь имя (в моем случае test_proj) и сохраняем в какой-нибудь папке:

Проект создан. После этого выбираем File->Save All и в открывшемся окне набираем имя нашего Workspace-а, его можно назвать так же, как и проект.

Читайте также:
Для чего нужна программа майкрософт

Теперь нам надо настроить проект под конкретный микроконтроллер, а именно STM32F103C8. Нажимаем правой кнопкой мыши на названии нашего проекта и выбираем пункт Options…

В разделе General Options на вкладке Target выбираем наш микроконтроллер:

Далее настаиваем уровень оптимизации компиляции. При отладке иногда натыкался на некоторые проблемы при высоком уровне оптимизации, поэтому советую в C/C++ Compiler на вкладке Optimizations ставить None или на крайняк Low:

Складывать все файлы исходников в корень проекта не очень хорошая идея, в дальнейшем будет трудно ориентироваться среди кучи файлов, поэтому для CMSIS создадим одноименную папку CMSIS . Но нам необходимо указать компилятору путь, где искать исходники. Для этого на вкладке Preprocessor надо указать путь к папке с библиотекой. Чтоб не указывать абсолютные пути, в IAR-е существует переменная $PROJ_DIR$, в которой хранится путь к папке с проектом:

$PROJ_DIR$ $PROJ_DIR$CMSIS

Первая строчка указывает на корень проекта, где лежит main.c, это вроде как не обязательно, но пусть будет, вторая на будущую папку с CMSIS. Обращаем внимание на стрелки прокрутки вкладок, выделил синим:

Теперь отладчик. В разделе Debugger на вкладке Setup выбираем ST-LINK, который идет в комплекте с отладочными платами Discovery:

и на вкладке Download ставим галочку Use flash loader(s):

После этого в разделе ST-LINK выбираем тип интерфейса подключения, у нас по SWD:

Фух, проект настроили. Нажимаем OK для сохранения изменений.

После этого идем в каталог с проектом и создаем там папку CMSIS, в нее мы будем складывать файлы библиотеки CMSIS:

Библиотека CMSIS

Архив с STM32CubeF1 скачали, разархивировали. В нем содержится много разных вещей: документация, примеры для отладочных плат, драйверы HAL и сам CMSIS, который нам и нужен. CMSIS расположен в .STM32Cube_FW_F1_V1.6.0DriversCMSIS.

Вначале идем в .CMSISDeviceSTSTM32F1xxInclude:

У нас тут куча .h файлов для разных микроконтроллеров, но чего-нибудь наподобие stm32f103x8.h не видно. Открываем stm32f1xx.h. Там есть вот такая вещь:

#if !defined (STM32F100xB) !defined (STM32F100xE) !defined (STM32F101x6) !defined (STM32F101xB) !defined (STM32F101xE) !defined (STM32F101xG) !defined (STM32F102x6) !defined (STM32F102xB) !defined (STM32F103x6) !defined (STM32F103xB) !defined (STM32F103xE) !defined (STM32F103xG) !defined (STM32F105xC) !defined (STM32F107xC) /* #define STM32F100xB */ /*!< STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB and STM32F100VB */ /* #define STM32F100xE */ /*!

< STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE and STM32F100ZE */ /* #define STM32F101x6 */ /*!< STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6 and STM32F101T6 Devices */ /* #define STM32F101xB */ /*!< STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB and STM32F101VB */ /* #define STM32F101xE */ /*!< STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE and STM32F101ZE */ /* #define STM32F101xG */ /*!< STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG and STM32F101ZG */ /* #define STM32F102x6 */ /*!

< STM32F102C4, STM32F102R4, STM32F102C6 and STM32F102R6 */ /* #define STM32F102xB */ /*!< STM32F102C8, STM32F102R8, STM32F102CB and STM32F102RB */ /* #define STM32F103x6 */ /*!< STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6 and STM32F103T6 */ /* #define STM32F103xB */ /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */ /* #define STM32F103xE */ /*!< STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE and STM32F103ZE */ /* #define STM32F103xG */ /*!

< STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG and STM32F103ZG */ /* #define STM32F105xC */ /*!< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */ /* #define STM32F107xC */ /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */ #endif

Обращаем внимание на строчку:

/* #define STM32F103xB */ /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */

Ага, STM32F103C8 тут есть. Значит для нашего микроконтроллера подойдут исходники, от B версии: STM32F103xB. Запомним это. Из этой папки копируем в CMSIS проекта следующие файлы:

stm32f1xx.h stm32f103xb.h system_stm32f1xx.h

Далее переходим в .CMSISDeviceSTSTM32F1xxSourceTemplates и отсюда забираем файл system_stm32f1xx.c

После нам нужен стартап-файл. Заходим в .CMSISDeviceSTSTM32F1xxSourceTemplatesiar. Там нас так же ждет большое количество файлов и мы так же ищем тот, который оканчивается на xB: startup_stm32f103xb.s. Копируем его в $PROJ_DIR$CMSIS.

Затем переходим в .CMSISInclude и забираем вот эти 3 файла:

core_cm3.h core_cmFunc.h core_cmInstr.h

Так как в STM32F103C8 микропроцессорное ядро Cortex M3, то и берем соответствующие исходники.

Вот так это должно выглядеть в папке $PROJ_DIR$CMSIS:

Теперь эти файлы надо добавить в обозреватель проекта в IAR-е. Для удобства создадим группу с одноименным названием CMSIS. Нажимаем правой кнопкой мыши на названии проекта и выбираем Add->Add Group…

Вводим название группы и нажимаем OK:

После этого в группу CMSIS добавляем файлы из папки CMSIS:

В открывшемся диалоге выбираем все файлы и нажимаем Открыть:

В результате получаем вот это:

После этого открываем файл stm32f1xx.h и раскомментируем стоку с #define STM32F103xB:

#if !defined (STM32F100xB) !defined (STM32F100xE) !defined (STM32F101x6) !defined (STM32F101xB) !defined (STM32F101xE) !defined (STM32F101xG) !defined (STM32F102x6) !defined (STM32F102xB) !defined (STM32F103x6) !defined (STM32F103xB) !defined (STM32F103xE) !defined (STM32F103xG) !defined (STM32F105xC) !defined (STM32F107xC) /* #define STM32F100xB */ /*!< STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB and STM32F100VB */ /* #define STM32F100xE */ /*!

< STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE and STM32F100ZE */ /* #define STM32F101x6 */ /*!< STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6 and STM32F101T6 Devices */ /* #define STM32F101xB */ /*!< STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB and STM32F101VB */ /* #define STM32F101xE */ /*!< STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE and STM32F101ZE */ /* #define STM32F101xG */ /*!< STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG and STM32F101ZG */ /* #define STM32F102x6 */ /*!

< STM32F102C4, STM32F102R4, STM32F102C6 and STM32F102R6 */ /* #define STM32F102xB */ /*!< STM32F102C8, STM32F102R8, STM32F102CB and STM32F102RB */ /* #define STM32F103x6 */ /*!< STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6 and STM32F103T6 */ #define STM32F103xB /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */ /* #define STM32F103xE */ /*!< STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE and STM32F103ZE */ /* #define STM32F103xG */ /*!< STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG and STM32F103ZG */ /* #define STM32F105xC */ /*!

Читайте также:
Написать программу вычисления функции z

< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */ /* #define STM32F107xC */ /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */ #endif

Далее пишем следующий main:

#include «stm32f1xx.h» int main()

Выбираем Project->Make. Если все сделали правильно, то получаем сообщение об успешной компиляции проекта:

Вот мы и научились подключать CMSIS к нашему проекту. В следующей статье мы продолжим изучение микроконтроллеров STM32 Продолжение тут.

Источник: dimoon.ru

Iar stm32 примеры программ

[Что нужно для работы и отладки]

1. Установите IAR Embedded Workbench 6.30, это можно сделать на Windows 7 и Windows 8 (к сожалению, Windows XP не поддерживается).

2. Купите на ebay.com китайский J-LINK (строка для поиска JLINK Emulator V8 site:ebay.com ).

J-Link-V8-debugger

3. Купите отладочную плату. Замечательный кандидат — STM32-P407 от Olimex (используется микроконтроллер STM32F407ZGT6).

Также можно выбрать одну из плат DISCOVERY от компании ST. Достоинство этих плат в том, что у них открытая документация (можно даже самому заказат печатную плату, исходные файлы Altium и Gerber опубликованы), платы DISCOVERY можно купить на Aliexpress. Для плат DISCOVERY есть множество готовых примеров, они поддерживаются пакетом CubeMX.

[STM32F407ZGT6 — как сделать новый проект]

В качестве стартовой точки для нового проекта можно просто открыть пример, который предоставлен IAR или Olimex, и начать редактировать и изменять его. Так сделать проще всего, но недостаток в том, что появляются длинные пути к файлам, и название проекта не соответствует Вашему техзаданию. Поэтому можно сделать проект заново, с нуля.

Потом можно сделать в нем все нужные настройки (которые были в проекте примера), и подключить к нему нужные файлы, размещенные у ближайших каталогах. Здесь я рассмотрю создание такого нового проекта по шагам. Этот проект будет просто мигать светодиодом.

1. Создание нового проекта C. Создайте в любом удобном месте диска каталог для нового рабочего пространства (workspace). Предположим, это будет каталог MyWorkspace. Запустите IAR 6.30, выберите пункт меню Project — Create New Project. откроется окно выбора типа нового проекта.

Выберите C -> main и нажмите OK.

STM32-create-new-project

Далее откроется окно, где предложат выбрать папку для нового проекта и имя файла проекта (файл с расширением *.ewp). Перейдите в папку MyWorkspace, создайте в ней новую папку HelloWorld, зайдите в неё и в поле имени файла введите имя проекта HelloWorld, нажмите кнопку Сохранить.

STM32-save-ewp-file

Выберите в меню IAR пункт File -> Save all. Откроется окно, где будет предложено выбрать папку и имя файла для рабочего пространства (файл с расширением *.eww). Выберите папку MyWorkspace, зайдите в неё, и в качестве имени файла введите MyWorkspace. Затем нажмите Открыть.

STM32-save-workspace

После этого действия новый проект будет успешно создан, ему будут присвоены настройки по умолчанию, и будут созданы две новые конфигурации проекта Debug и Release. Корневой каталог проекта будет MyWorkspaceHelloWorld, а корневой каталог Workspace MyWorkspace (в этот Workspace Вы при желании можете добавлять другие проекты). В каталоге MyWorkspaceHelloWorldтакже будут созданы подкаталоги Debug (туда по умолчанию попадают выходные и временные файлы результата компиляции), settings (папка для дополнительных настроек проекта), а также будут созданы файлы HelloWorld.dep, HelloWorld.ewd, HelloWorld.ewp и main.c.

2. Настройка проекта. Как ни странно, новый проект будет даже успешно компилироваться (если выбрать Project -> Rebuild all), но это вовсе не означает, что в результате компиляции будет получено именно то, что нам нужно. Необходимо выбрать тип процессора,

Откройте свойства проекта (Project -> Options. ), на закладке General Options выберите Processor variant -> Device, нажмите кнопочку справа и выберите процессор ST -> STM32F407 -> STM32F407ZG.

STM32-device-selection

Перейдите в раздел опций Debugger, и в выпадающем списке Driver выберите J-Link/J-Trace (если у Вас подключен именно этот аппаратный отладчик). Нажмите OK.

STM32-set-Debugger

На этом минимальная настройка проекта закончена, его можно даже запустить в отладчике (Project -> Download and Debug). Но пока проект ничего не умеет, потому что в теле функции main (модуль main.c) нет никакого кода, стоит просто заглушка возврата нулевого значения:

int main() < return 0; >

3. Добавление модулей для управления периферией. В состав библиотеки ST есть готовые модули, которые предоставляют удобные макросы и функции для управление периферией микроконтроллера. Не будем выдумывать велосипед, просто давайте воспользуемся этой прекрасной возможностью.

Сделайте копию файла C: Program Files (x86) IAR Systems Embedded Workbench 6.5 arm examples ST STM32F4xx STM32F4xx_DSP_StdPeriph_Lib Project STM32F4xx_StdPeriph_Examples GPIO IO_Toggle stm32f4xx_conf.h, и поместите его в корень проекта, в папку MyWorkspaceHelloWorld.

Добавите в корень проекта HelloWorld новую группу, куда мы будем подключать библиотечные модули для управления периферией. Для этого нажмите правой кнопкой на имя проекта, выберите Add -> Add Group. -> и введите имя группы STM32F4xx_StdPeriph_Driver.

STM32-add-group

В каталоге рабочего пространства (у нас это папка MyWorkspace) сделайте копию папки Libraries, которую можно найти в папке примеров IAR C: Program Files (x86) IAR Systems Embedded Workbench 6.5 arm examples ST STM32F4xx IAR-STM32F407ZG-SK. После этого добавьте в папку проекта STM32F4xx_StdPeriph_Driver готовый модуль Libraries STM32F4xx_StdPeriph_Driver src stm32f4xx_gpio.c. Для этого нажмите правую кнопку на папке проекта STM32F4xx_StdPeriph_Driver и выберите Add -> Add Files. и выберите нужный файл.

Добавьте в настройки проекта пути поиска для заголовочных файлов. Для этого откройте Project -> Options -> C/C++ Compiler -> закладка Preprocessor, и добавьте в Additional include directories пути поиска:

$PROJ_DIR$ $PROJ_DIR$..LibrariesSTM32F4xx_StdPeriph_Driverinc $PROJ_DIR$..LibrariesCMSISDeviceSTSTM32F4xxInclude $TOOLKIT_DIR$CMSISInclude

Читайте также:
Программа практики технология продукции общественного питания

Здесь $PROJ_DIR$ макрос, который раскрывает абсолютный путь до папки, в которой находится файл проекта HelloWorld.ewp. Макрос $TOOLKIT_DIR$ раскрывает полный путь до рабочего каталога текущего инструментария IAR (C: Program Files (x86) IAR Systems Embedded Workbench 6.5 arm).

Добавьте в окно Defined symbols символы (они используются в заголовочных файлах):

STM32F40XX USE_STDPERIPH_DRIVER

STM32-options-Preprocessor

4. Мигание светодиодом. Давайте сделаем проект более осмысленным — научимся мигать светодиодом STAT1, который установлен на отладочной плате STM32-P407.

Добавьте в папку проекта STM32F4xx_StdPeriph_Driver модуль stm32f4xx_rcc.c (Add -> Add Files. выберите файл MyWorkspace Libraries STM32F4xx_StdPeriph_Driver src stm32f4xx_rcc.c).

Добавьте код инициализации ядра процессора. Создайте в Workspace группу EWARM (Add -> Add Group. -> введите имя группу EWARM -> OK) и добавьте туда файл startup_stm32f40xx.s (Add -> Add Files. -> выберите файл MyWorkspace Libraries CMSIS Device ST STM32F4xx Source Templates iar startup_stm32f40xx.s).

Также добавьте группу CMSIS, и добавьте туда модуль MyWorkspace Libraries CMSIS Device ST STM32F4xx Source Templates system_stm32f4xx.c.

Откройте файл исходного кода main.c, и замените его старый код на следующий:

/* Простейший пример мигания светодиодом для платы Olimex STM32-P407. Пример мигает светодиодом STAT1. */ #include «stm32f4xx.h»
GPIO_InitTypeDef GPIO_InitStructure;
//Простейшая функция задержки void Delay(__IO uint32_t nCount) < while(nCount—) <> > void main() < /* Разрешить тактирование GPIOF */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); /* Конфигурирование ножки PF6, туда подключен светодиод STAT1 платы разработчика Olimex STM32-P407 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOF, /* Бесконечный цикл мигания */ while(1) < GPIOF->BSRRL = GPIO_Pin_6; //STAT==1, светодиод горит Delay(3000000L); GPIOF->BSRRH = GPIO_Pin_6; //STAT==0, светодиод погас Delay(3000000L); > >

Светодиод STAT1 подключен к порту PF6 микроконтроллера (см. схему в архиве [2]).

Примечание: есть на мой взгляд некая несуразица в именовании регистров BSRRL и BSRRH, предназначенных для управления состоянием портов GPIO. Ведь по идее L значит Low, т. е. лог. 0, а H означает High, т. е. логическую единицу. Но здесь почему-то происходит все с точностью до наоборот — установка бита в регистре BSRRL почему-то приводит не к сбросу порта в 0, а в установку его в 1. Аналогично установка бита в регистре BSRRH почему-то приводит не к установке порта в 1, а к его сбросу в 0. Запись 0 никакого влияния на состояние порта не оказывает.

[Работа с портами ввода/вывода GPIO, примеры IOToggle и JTAG_Remap]

Запустите IAR 6.30, на стартовой странице выберите EXAMPLE PROJECTS -> ST -> STM32F4xx -> CMSIS and STM32F4xx stdperiph lib 1.1.0 -> GPIO, далее выберите папку, куда будет копирован пример. Откроется окно Workspace, где будет два примера работы с портами ввода-вывода: «IOToggle — STM324x7I_EVAL» и «JTAG_Remap — STM324x7I_EVAL».

Пример предназначен для работы на микроконтроллерах STM32F40xx/STM32F41xx, STM32F427x/STM32F437x, и был протестирован на плате разработчика STM324xG-EVAL и STM32437I-EVAL (я его запускал на плате STM32-P407 от Olimex). Само собой, пример может быть с успехом запущен и на других отладочных платах.

Порты GPIO подключены к шине микроконтроллера AHB. С использованием регистров BSRRH и BSRRL требуется только один цикл, чтобы установить в лог. 1 любой вывод микроконтроллера, и еще 1 цикл чтобы сбросить в его 0. Таким образом, ножки GPIO можно переключать с частотой шины AHB, поделенной на 2.

В этих примерах показывается, как использовать BSRRH и BSRRL (аббревиатуры расшифровываются как Port Bit Set/Reset Register High and Low) для переключения выводов IO.

Порты PG6 и PG8 (сконфигурированные в режиме output pushpull) переключаются в бесконечном цикле:
— PG6 и PG8 устанавливаются в лог. 1 путем установки соответствующих бит в регистре BSRRL.
— PG6 и PG8 сбрасываются в лог. 0 путем установки соответствующих бит в регистре BSRRH.

В этом примере HCLK сконфигурирована на 168 МГц, так что PG6 и PG8 переключаются с частотой 84 МГц (на плате STM324xG-EVAL/STM32437I-EVAL туда подключены светодиоды LED1 и LED2). Чтобы достичь максимально возможной частоты переключения IO, опции Вашего компилятора должны быть сконфигурированы на максимальную оптимизацию по скорости.

Таблица 1. Содержимое папок примера GPIO IO Toggle.

GPIO/IOToggle/stm32f4xx_conf.h Файл конфигурации библиотеки.
GPIO/IOToggle/stm32f4xx_it.c Обработчики прерывания.
GPIO/IOToggle/stm32f4xx_it.h Заголовочный файл для stm32f4xx_it.c.
GPIO/IOToggle/main.h Заголовочный файл для main.c.
GPIO/IOToggle/main.c Основная программа.
GPIO/IOToggle/system_stm32f4xx.c Системный файл кода STM32F4xx (настройка тактовой частоты).

По умолчанию проект настроен на запуск в симуляторе, но его легко можно перенастроить на загрузку через JTAG, и он будет работать на реальном железе (Options -> Debugger -> в выпадающем списке выберите J-Link/J-Trace). Проект GPIO IO Toggle можно с успехом использовать как стартовую точку для своих собственных проектов, особенно если Вы только начинаете разбираться с платформой STM32.

Этот пример показывает, как использовать ножки JTAG/SWD кристалла как обычные порты ввода/вывода, и дает для этого последовательность конфигурирования. Все, что было сказано про предыдущий пример IOToggle касательно используемых микроконтроллеров, отладочных плат, также относится и к примеру JTAG_Remap. Чтобы переключиться в IAR на пример JTAG_Remap — STM324x7I_EVAL, щелкните правой кнопкой мыши на заголовок проекта, и выберите в контекстном меню Set as Active.

Таблица 2. Содержимое папок примера GPIO JTAG/SWD Remap.

GPIO/GPIO_JTAGRemap/stm32f4xx_conf.h Файл конфигурации библиотеки.
GPIO/GPIO_JTAGRemap/stm32f4xx_it.c Обработчики прерывания.
GPIO/GPIO_JTAGRemap/stm32f4xx_it.h Заголовочный файл для stm32f4xx_it.c.
GPIO/GPIO_JTAGRemap/main.h Заголовочный файл для main.c.
GPIO/GPIO_JTAGRemap/main.c Основная программа.
GPIO/GPIO_JTAGRemap/system_stm32f4xx.c Системный файл кода STM32F4xx (настройка тактовой частоты).

Кроме ножек JTAG/SWD как выход используются порты PG6 и PG8, и как вход кнопки используется порт PG15 (переключает режим инициализации программы).

[Ссылки]

1. 140808STM32F4xx_Clock_Configuration.zip — Clock configuration tool for STM32F40x/41x microcontrollers (AN3988) site:st.com.
2. 140808STM32F407.zip — документация по микроконтроллерам STM32F40x/41x, по плате Olimex STM32-P407, схема, примеры кода.
3. 140810STM32-HelloWorld.zip — пример кода мигания светодиодом на макетной плате Olimex STM32-P407, проект IAR 6.30.
4. Olimex STM32-P407.
5. STM32: аббревиатуры и термины.

Источник: microsin.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru