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

Stm32 визуальное программирование: Программирование stm32 с самых основ / Хабр

Содержание

Настройка VSCODE под разработку для ARM на примере отладочной платы stm32f429i-disco / Хабр

Всем привет!

Сегодня рассмотрим настройку удобной и красивой среды разработки для программиста микроконтроллеров с помощью набора полностью бесплатных инструментов разработки.

Все шаги проверены на виртуальной машине со свежеустановленной Ubuntu 16.04 xenial desktop x64.

Подразумевается, что у Вас уже есть исходники какого-либо проекта.

Все настройки, касающиеся конкретного железа (в моём случае это контроллер STM32F429 и девборда STM32F429DISCO), нужно подменить на свои. То же самое касается и путей.

Если готовы, то поехали


Установка curl

sudo apt-get install curl

Установка vscode

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install code # or code-insiders

Установка arm-none-eabi тулчейна

sudo apt-get install gcc-arm-none-eabi
sudo apt-get install gdb-arm-none-eabi

Установка openocd

sudo apt-get install openocd

Запуск и настройка vscode

Для запуска vscode вызвать в терминале команду code.
Заходим в раздел Extensions (Ctrl+Shift+X).
Ищем и устанавливаем следующие плагины:


  1. Cortex-Debug от автора marus25.
  2. С/С++ от Microsoft.

Открываем папку с проектом через меню File/Open Folder.
Заходим в раздел Debug (Ctrl+Shift+D).

Вверху в выпадающей строке видим текст No configurations.

Нажимаем на шестерёнку рядом с ней, выпадает меню с предложением создать конфигурацию для дебага, выбираем Cortex-Debug.

В каталоге проекта создаётся скрытая папка .vscode, в которой создаётся файл с конфигурациями дебага launch.json.

Если этот файл не открылся сам, открываем его руками: переходим в раздел

Explorer (Ctrl+Shift+E) и в дереве выбираем этот файл.

Настраиваем конфигурацию для openocd:

"configurations": [
    {
        "name": "openocd",
        "request": "launch",
        "type": "cortex-debug",
        "cwd": "${workspaceRoot}",
        "servertype": "openocd",
        "executable": "build/lol.elf",
        "svdFile": "STM32F429.svd",
        "configFiles": [
            "/usr/share/openocd/scripts/board/stm32f429discovery.cfg"
        ]
    }
]

Последние три свойства: расположение elf-файла, расположение svd-файла, путь к конфигу для openocd, — настраиваем под себя.

Сохраняем файл launch.json и снова идём в раздел Debug, там убеждаемся, что в выпадающем меню появилась наша конфигурация.

Далее возвращаемся в раздел Explorer и в каталог .vscode добавляем новый файл с именем settings.json, открываем его, пишем там следующее:

{
    "cortex-debug.armToolchainPath": "/usr/bin",
    "cortex-debug.openocdPath": "/usr/bin/openocd"
}

Далее добавляем в .vscode ещё один файл c_cpp_properties.json

, открываем его и пишем там следующее:

{
    "configurations": [
        {
            "name": "vscode_stm32_c_cpp_properties",
            "compilerPath": "/usr/bin/arm-none-eabi-gcc",
            "includePath": [
                "${workspaceRoot}/Inc/",
                "${workspaceRoot}/Drivers/CMSIS/Include/",
                "${workspaceRoot}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/"
            ],
            "defines": [
                "STM32F429xx"
            ],
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

По нажатию F5 можно запускать отладку (не забудьте перед этим собрать проект, чтобы elf-файл был на нужном месте).

IAR + CMSIS — DiMoon Electronics

Это вторая часть цикла статей про микроконтроллеры 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.0\Drivers\CMSIS.

Вначале идем в .\CMSIS\Device\ST\STM32F1xx\Include:

У нас тут куча .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

Далее переходим в .\CMSIS\Device\ST\STM32F1xx\Source\Templates и отсюда забираем файл system_stm32f1xx.c

После нам нужен стартап-файл. Заходим в .\CMSIS\Device\ST\STM32F1xx\Source\Templates\iar. Там нас так же ждет большое количество файлов и мы так же ищем тот, который оканчивается на xBstartup_stm32f103xb.s. Копируем его в $PROJ_DIR$\CMSIS\.

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

core_cm3.h
core_cmFunc.h
core_cmInstr.h

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

Итого 8 файлов:

  1. stm32f1xx.h
  2. stm32f103xb.h
  3. system_stm32f1xx.h
  4. system_stm32f1xx.c
  5. startup_stm32f103xb.s
  6. core_cm3.h
  7. core_cmFunc.h
  8. core_cmInstr.h

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

$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 */    /*!< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */
  /* #define STM32F107xC  */   /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */  
#endif

Далее пишем следующий main:
#include "stm32f1xx.h"

int main()
{
  return 0;
}

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

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

Ссылки:

STM32CubeF1: https://yadi.sk/d/E0BHVVrj3ZuZ9o

Пустой проект для STM32F103C8 на GitHub: https://github.com/DiMoonElec/stm32f103c8_empty_project

Все статьи цикла: http://dimoon.ru/category/obuchalka/stm32f1

STM32 + CMSIS + STM32CubeIDE / Хабр

Здесь я расскажу как создать минимальный проект на CMSIS с использованием «родной» IDE для микроконтроллеров STM – STM32CubeIDE.

Возможно STM32CubeIDE и обладает рядом недостатков, но у нее, на мой взгляд, есть несколько преимуществ – таких как проприетарность и бесплатность, ради которых, как минимум, стоит обратить внимание на эту среду разработки, если вы не сделали этого раньше.



Объектом прошивки выбран не очень распространенный микроконтроллер STM32F072 с ядром ARM Cortex-M0, для более привычных STM32F103 на ARM Cortex-M3, с поправкой на ядро, процесс идентичен.

Все необходимые ресурсы можно скачать с сайта st.com, и вот что понадобится:

  • Сама IDE, я использую Windows версию, но также доступны версии под Mac и Linux
  • Библиотека CMSIS для ARM Cortex-M0, она находится в архиве STM32CubeFx, разбитом по версиям ядра. Сам архив, помимо CMSIS, содержит великое множество других ресурсов начиная от примеров работы с периферией до драйверов USB, собственно, именно этот архив используется, если создавать проект с помощью STM32Cube
  • Не помешает Datasheet и Reference Manual


После установки, запуска и выбора папки Workspace можно начать создание проекта. На текущий момент STM32CubeIDE версии 1.1.0, так что по расположению различных настроек следует исходить из этого.

Создание нового проекта — File/New/STM32Project. После некоторого раздумия появляется окно выбора микроконтроллера, в моем случае это STM32F072RB в корпусе LQFP64, выбираю нужную строку, жму далее. Далее предлагается выбрать имя проекта, расположение, язык программирования C/C++, исполняемый файл/статическая библиотека и будет-ли проект сгенерирован с помощью CubeMX или сами с усами. Генерация кубом, в данном случае не нужна, поэтому тип проекта Empty — финиш.




Слева, в окне Project Explorer, появилось дерево проекта, правда он не совсем Empty, как заказывали. Впринципе, если устраивает сгенерированная структура папок, можно добавить туда файлы из библиотеки CMSIS и работать дальше, но здесь я покажу как можно привести структуру проекта в гармонию со своим чувством прекрасного, поэтому удаляется всё, кроме скрипта линкера т.е. файла c расширением .ld — он еще пригодится.

Все манипуляции с папками и файлами можно проводить как в проводнике так и внутри IDE, нажав правой кнопкой на название проекта, к примеру: правая кнопка –> new –> Folder. Если структура проекта изменялась вне IDE, то нужно просто обновить проект: правая кнопка –> Refresh.

Мой вариант структуры проекта выглядит так:

  • Startup – здесь будет храниться скрипт линкера, тот самый, оставшийся от сгенерированного проекта, а также startup файл взятый из CMSIS
  • CMSIS\src и CMSIS\inc – здесь будут лежать исходники, файлы с расширением .c в папке scr и заголовочные файлы с расширением .h в папке inc соответственно, относящиеся к библиотеке CMSIS
  • Core\src и Core\inc – здесь будет расположен собственно сам проект, для начала стоит положить туда main.c и main.h


Теперь нужно перенести файлы библиотеки CMSIS в проект. Библиотека состоит из файлов ядра и файлов периферии. Файлы ядра начинаются с core_ или cmsis_ они общие для всех микроконтроллеров, использующих данное ядро. Файлы периферии содержат в названии наименование микроконтроллера stm32 и специфичны для конкретного производителя, в данном случае, компании STM.

В распакованном виде архив содержит папку STM32Cube_FW_F0_V1.11.0, все пути указаны относительно этой папки. Итого, нужно скопировать:

В CMSIS\inc:

  • Drivers\CMSIS\Include\cmsis_compiler.h
  • Drivers\CMSIS\Include\cmsis_gcc.h
  • Drivers\CMSIS\Include\cmsis_version.h
  • Drivers\CMSIS\Include\core_cm0.h
  • Drivers\CMSIS\Device\ST\STM32F0xx\Include\stmf0xx.h
  • Drivers\CMSIS\Device\ST\STM32F0xx\Include\stm32f072xb.h
  • Drivers\CMSIS\Device\ST\STM32F0xx\Include\system_stm32f0xx.h

В CMSIS\src:
  • Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\system_stm32f0xx.c

В Startup:
  • Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\gcc\startup_stm32f072xb.s

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

Правая кнопка по названию проекта -> Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU GCC Linker -> General – здесь нужно указать новое расположение скрипта линкера с помощью кнопки Browse…


Также нужно указать пути к файлам проекта

Properties -> C/C++ General -> Includes
Properties -> C/C++General -> Source Location

В Includes пути к папкам inc, а в Source Location логично было-бы к папкам src, но если так сделать, то в дереве проекта будут отдельно добавлены эти папки. Чтобы не загромождать визуально дерево, в Source Location можно указать корневые папки Core, CMSIS и Startup.



Для того чтобы проект скомпилировался нужно раскомментировать в файле stm32f0xx.h строку с названием микроконтроллера ну и конечно же в main.c добавить функцию main.



Собственно всё. Безошибочная компиляция и сразу же куда-то подевалось целых полтора килобайта памяти ОЗУ она же RAM, и сразу же вспоминается стек и куча, в процессе создания проекта они нигде не упоминались. Величина стека и кучи указана в файле скрипта линкера, тот что с расширением .ld, их можно и нужно изменять в соответствии с требованиями проекта. Эти значения находятся в начале файла в виде меток _Min_Heap_Size/_Min_Stack_Size с указанием размера в шестнадцатеричном виде.

В качестве примера, приведу небольшой проект традиционного мигания светодиодом.

Светодиод будет мигать на отладочной плате STM32F072B-DISCO, тактирование осуществляться от внутреннего генератора HSI48 частотой 48 МГц, а в качестве источника задержки использоваться таймер SysTick, генерирующий прерывания с периодом в 1 мс, при помощи которых отсчитывается точное время задержки. Светодиод подключен к выводу 6 порта С, настроенного на выход push-pull.

Надеюсь, данная информация кому-то пригодится, т.к. в свое время, несмотря на обилие материалов по программированию STM32, мне пришлось перелопатить достаточно много мануалов, чтобы осознать вещи, кажущиеся сейчас очевидными.

Программирование STM32. Часть 1: Документация — DiMoon Electronics

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

В этой статье мы рассмотрим, как на официальном сайте производителя организована документация на микроконтроллеры STM32, в частности на серию STM32F1. Все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1.

После каких-нибудь AVR-ок, можно испытать легкий шок от количества разных PDF-ок на микроконтроллеры STM32. Куда глядеть первым делом? Как этим пользоваться? Что ваще происходит?? С первого взгляда ни чего не понятно. Поэтому я решил сделать небольшой обзор мира документации на эти замечательные микроконтроллеры. Особый упор буду делать на STM32F103C8T6, так как далее планирую написать несколько уроков по использованию именно этого камушка.

Основными документами на STM-ки являются следующие:

  1. Datasheet
  2. Reference manual
  3. Programming Manual
  4. Errata Sheet

Datasheet

Datasheet содержит в себе информацию о наличии определенной периферии в конкретном МК, цоколевке, электрических характеристиках и маркировке чипов для STM32F103x8 и STM32F103xB, то есть для вот этих, которые обведены красным прямоугольником:

Некисло, один даташит на 8 микроконтроллеров.

Основное в Datasheet-е

В первую очередь нужно обратить внимание на раздел 7. Ordering information scheme, в котором указано, то обозначает каждый символ в маркировке. Например, для STM32F103C8T6: корпус  LQFP-48, 64Кб flash-а, температурный диапазон –40 to 85 °C.

Далее 2.1 Device overview. В нем есть таблица, в которой сказано, какая периферия есть в конкретном микроконтроллере и в каком количестве:

Основное различие между микроконтроллерами из разных колонок в количестве ножек и объеме флеша, остальное все одинаково. Небольшое исключение составляет первая колонка версий Tx: в этих микроконтроллерах поменьше модулей SPI, I2C и USART-ов. Нумерация периферии идет с единицы: то есть, если в STM32F103Cx у нас 2 SPI, то они имеют имена SPI1 и SPI2, а в STM32F103Tx у нас только SPI1. Так как Datasheet у нас на микроконтроллеры STM32F103x8 и STM32F103xB, то эта таблица справедлива только для этих моделей. К примеру STM32F103C8 или STM32F103CB соответствуют этой таблице, а STM32F103C6 нет, для него есть отдельный даташит.

В разделе 2.2 Full compatibility throughout the family говорится о том, что устройства STM32F103xx являются программно, функционально и pin-to-pin (для одинаковых корпусов) совместимыми.

В reference manual-е есть разделение на следующие «виды» микроконтроллеров: STM32F103x4 и STM32F103x6 обозначены как low-density devices, STM32F103x8 и STM32F103xB как medium-density devices, STM32F103xC, STM32F103xD и STM32F103xE как high-density devices. В устройствах Low-density devices меньше Flash и RAM памяти, таймеров и периферийных устройств. High-density devices имеют больший объем Flash и RAM памяти, а так же имеют дополнительную периферию, такую как SDIO, FSMC, I2S и DAC, при этом оставаясь полностью совместимыми с другими представителями семейства STM32F103xx. То есть, если на каком-то этапе разработки стало ясно, что выбранного микроконтроллера не хватает для реализации всех возможностей, то можно безболезненно выбрать более навороченный камень без необходимости переписывать весь существующий софт, при этом, если новый камень будет в том же корпусе, то отпадает необходимость заново разводить печатную плату.

Reference manual

Поехали далее. Reference manual (справочное руководство) содержит подробное описание всей периферии, регистров, смещений, и так далее. Это основной документ, который используется при создании прошивки под микроконтроллер. Reference manual составлен для большой группы микроконтроллеров, в нашем случае для всех STM32F10xxx, а именно STM32F101xx, STM32F102xx, STM32F103xx и STM32F105xx/STM32F107xx. Но STM32F100xx не входят в этот RM, для них есть свой.

Главное в Reference manual-е

Как было сказано выше, в reference manual-е есть разделение на следующие «виды» микроконтроллеров: low-, medium-, high-density и connectivity
line. В 2.3 Glossary разъяснено, кто есть кто:

  • Low-density devices это STM32F101xx, STM32F102xx и STM32F103xx микроконтроллеры, у которых размер Flash-памяти находится между 16 и 32 Kbytes.
  • Medium-density devices это STM32F101xx, STM32F102xx and STM32F103xx, размер флеш-памяти между 64 и 128 Kbytes.
  • High-density devices это STM32F101xx и STM32F103xx, размер флеш-памяти между 256 и 512 Kbytes.
  • XL-density devices это STM32F101xx и STM32F103xx, размер флеш-памяти между 768 Kbytes и 1 Mbyte.
  • Connectivity line devices это микроконтроллеры STM32F105xx и STM32F107xx.

Наш STM32F103C8T6 является Medium-density device-ом. Это будет полезно знать при изучении периферии, например, есть отдельные разделы про RCC для Low-, medium-, high- and XL-density устройств, и Connectivity line devices.

Далее обратимся к Tabe 1. В ней отмечено, какой раздел применим к конкретному типу микроконтроллеров. У нас это Medium-density STM32F103xx:

Далее все просто: идет куча разделов, в каждом из которых содержится описание на конкретную периферию и ее регистры 🙂

Programming Manual

Programming Manual не является документом первой необходимости в самом начале знакомства с STM-ми, однако является очень важным при углубленном изучении этих микроконтроллеров. Он содержит информацию о процессорном ядре, системе команд и периферии ядра. Причем это не та же самая периферия, которая описана в Reference manual-е.  В нее входят:

  • System timer — системный таймер
  • Nested vectored interrupt controller — контроллер приоритетных прерываний
  • System control block
  • Memory protection unit

Как только мы начнем знакомится с прерываниями в STM32, нам понадобится раздел 4.3 Nested vectored interrupt controller (NVIC). Ну и системный таймер является очень прикольной вещью, который будет полезен в каких-нибудь RTOS или для создания программных таймеров.

Errata Sheet

Errata Sheet — сборник всех известных аппаратных глюков и косяков микроконтроллеров и советов, как их обойти. Довольно веселый документ 🙂 Перед использованием какой-либо периферии, советую суда заглянуть. Это может помочь сократить количество потерянных нервных клеток при отладке своей чудо-прошивки, которая ни как не хочет работать 🙂

Продолжение тут: http://dimoon.ru/obuchalka/stm32f1/uroki-stm32f103-chast-2-iar-cmsis.html

Ссылки:

Datasheet: https://www.st.com/resource/en/datasheet/stm32f103c8.pdf

Reference manual: https://www.st.com/resource/en/reference_manual/cd00171190.pdf

Programming manual: https://www.st.com/resource/en/programming_manual/cd00228163.pdf

Errata sheet: https://www.st.com/resource/en/errata_sheet/cd00190234.pdf

Eclipse для микроконтроллеров (STM32) + FreeRTOS Task Aware Debugger / Хабр

Заходим в Eclipse -> New -> Project…
Выбираем C Project

Задаём имя проекта и его расположение, выбираем тип проекта.

Самое главное – указать верно ядро, в зависимости от вашего типа микроконтроллера (см. datasheet). Остальные настройки не важны.

Нажимаем next, next.
Если toolchain не определился автоматически, то указываем его расположение.
Нажимаем Finish.

Удаляем всё из дерева проекта:

Заходим в папку проекта armtest_cube и копируем всё, кроме .project и .cproject в папку проекта armtest.

Обновляем дерево проекта:

Заходим в настройки проекта Project -> Properties, выбираем необходимый микроконтроллер.
Заходим в настройки линкера, удаляем все имеющиеся Script files и добавляем ld файл из дерева проекта.

Подключаем библиотеку с поддержкой Floating Point:

Выбираем формат выходного файла Motorola S-record

Добавляем includ’ы:

Добавляем defin’ы для препроцессора:

Переименовываем startup файл «startup_stm32l476xx.s» в «startup_stm32l476xx.S». Иначе в debug’e появляются ошибки.
Run -> Debug configurations

Система тактирования — DiMoon Electronics

Первое, с чем необходимо разобраться перед дальнейшим изучением микроконтроллеров STM32, является система управления тактированием и сбросом, именуемая RCC. В этой статье мы рассмотрим, как правильно настроить микроконтроллер на работу от внешнего кварцевого резонатора на 8 МГц. Все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1

Система тактирования в STM32 в сравнении с микроконтроллерами AVR выполнена довольно замысловато. Давайте разбираться.

Содержание:

  • Шины
  • Генераторы
  • Тактирование периферии
  • Источники сигнала SYSCLK
  • HSE и PLL
  • Что еще?
  • Заключение

Шины

У микроконтроллеров STM32 все периферийные устройства (порты ввода-вывода, таймеры, интерфейсы SPI, и т.д.) подключены к так называемым шинам, через которые периферия получает тактовый сигнал и обменивается данными с ведущими устройствами шины (например, с процессором).

В STM32F103x8 три основных шины: AHB, APB1 и APB2. На каждой из шин висит определенная группа устройств:

  • AHB: процессорное ядро, память и DMA;
  • APB1: USART2, USART3, I2C1/2, CAN, таймеры TIM2..4;
  • APB2: порты GPIO, АЦП, USART1, TIM1, SPI1.

В даташите на STM32F103x8 есть блок-схема, в которой указано, какая периферия куда подключена:

Рис. 1. Блок-схема микроконтроллеров STM32F103x8 и STM32F103xB

Схема на рис. 1 поначалу может казаться сложной и непонятной, это нормально, со временем все в голове уложится и ощущение непонимания исчезнет.

А еще есть вот такая таблица, в которой так же указаны периферийные устройства и шины, к которым они подключены:

Рис. 2. Таблица шин и периферийных устройств

Можно заметить, что на рис. 2 возле названия шины (AHB, APB1 и APB2) в скобках указана ее максимальная частота. Так как периферийные устройства получают тактовый сигнал от шины, ее частота задает скорость работы подключенных к данной шине устройств. Далее мы рассмотрим, как настроить частоту каждой из шин микроконтроллера.

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

Итак, вот основные тезисы, которые необходимо запомнить:

  1. Все периферийные устройства в микроконтроллерах STM32 подключены к шинам (AHB, APB1 и APB2), через которые производится взаимодействие с устройствами и подача на них тактовых сигналов;
  2. Шины микроконтроллера STM32 могут иметь разные частоты тактирования;
  3. Перед началом работы с периферийным устройством необходимо разрешить подачу на него тактового сигнала.

Генераторы

В микроконтроллерах STM32F103x8/B присутствует несколько генераторов тактового сигнала:

Рис. 3. Блок-схема системы тактирования, красными прямоугольниками выделены генераторы тактовых сигналов

Первый из них — встроенный RC-генератор на 8 МГц, который называется High-speed internal (HSI) RC oscillator. После сброса микроконтроллер по-умолчанию тактируется как раз от этого генератора. Основным его плюсом является то, что для работы генератора не нужны ни какие дополнительные внешние компоненты. Однако его минус — плохая стабильность генерируемой частоты: при изменении температуры окружающей среды его частота в 8 МГц будет немного плыть. Для нетребовательных ко временнЫм интервалам устройств это может быть не критично, но в некоторых случаях данная особенность является недопустимой.

Следующий — High-speed external (HSE). Этот генератор является альтернативой HSI. Для его работы нужен внешний кварцевый резонатор на частоту 4-16 МГц. Его главным преимуществом в сравнении с HSI является стабильность генерируемой частоты. Так же, при определенной настройке, вывод OSC_IN можно подключить к источнику готового прямоугольного тактового сигнала без использования резонатора.

Далее Low-speed external (LSE). Этот генератор так же требует внешнего кварцевого резонатора, но только на 32768 Гц. LSE используется только для тактирования встроенных часов реального времени RTC, с помощью которых можно вести отсчет текущего времени, если это нужно.

Последний генератор — это Low-speed internal (LSI) RC oscillator. Это встроенный RC-генератор на 40 КГц. Он не отличается особой точностью, однако у него есть очень важная задача: генерация тактового сигнала для сторожевого таймера МК, который перезапустит систему в случае зависания. А еще от LSI можно тактировать RTC, но скорее всего это ни кто делать не будет 😉

Тактирование периферии

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

Рис. 4. Распределение тактового сигнала SYSCLK

После делителя AHB Prescaler тактовый сигнал распределяется между шинами микроконтроллера. Сигнал HCLK поступает в процессорное ядро, память и периферию шины AHBFCLK так же идет в ядро. Через фиксированный делитель на 8 тактирование подается на системный таймер Cortex System timer. Делитель APB1 Prescaler формирует сигнал тактирования устройств шины APB1, а APB2 Prescaler для устройств APB2

Тут правда есть небольшая особенность формирования тактового сигнала для таймеров и АЦП.

Рис. 5. Распределение тактового сигнала шины APB1 между устройствами 

Рис. 6. Распределение тактового сигнала шины APB2 между устройствами 

Тактовый сигнал на таймеры подается следующим образом. Если делитель шины (APB1 Prescaler или APB2 Prescaler) установлен в единицу, то частота тактирования тактирования таймеров (TIMXCLK или TIM1CLK) будет равна частоте шины. Но, если делитель не равен единице, то частота тактирования таймеров будет в 2 раза больше частоты шины (см. рис. 5, 6). Вот так 😉 А для АЦП есть свой собственный делитель, который из частоты тактирования шины APB2 формирует сигнал ADCCLK (рис. 6).

Думаю, следует еще обратить внимание на вот эти элементы блок-схемы:

Рис. 7

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

Рис. 8. 

У каждого периферийного модуля в специальном регистре есть свой бит (SPI1EN, IOPAEN, IOABEN и так далее), при установке которого в единицу разрешается подача на него тактового сигнала. На рис. 8 я привел пример только для тактового сигнала PCLK2 шины APB2, для остальных сигналов (HCLK, PCLK1, TIMXCLK, TIM1CLK) все то же самое.

Источники сигнала SYSCLK

Итак, теперь мы знаем, что основным тактовым сигналом в микроконтроллерах STM32 является SYSCLK. Давайте теперь разберемся, как его получить. В нашем распоряжении 3 варианта: генераторы HSI, HSE и модуль PLL:

Рис. 9. Источники сигнала SYSCLK

После сброса микроконтроллера в качестве источника сигнала SYSCLK по-умолчанию устанавливается встроенный RC-генератор HSI. Прохождение тактового сигнала для этого случая представлено на рис. 10, значения по-умолчанию всех делителей обвел кружочком:

Рис. 10. Конфигурация системы тактирования по-умолчанию

А теперь давайте посчитаем значения всех частот в конфигурации по-умолчанию. Частоты HCLK, FCLK, PCLK1, TIMXCLK, PCLK2, TIM1CLK будут равны 8 МГц, частота Cortex System timer равна 1 МГц, а ADCCLK 4 Мгц.

Если мы хотим задействовать HSE-генератор, то картина будет следующей:

Рис. 11. Выбор генератора HSE в качестве источника тактирования SYSCLK

При использовании кварцевого резонатора на 8 МГц все системные частоты будут такими же, что и в предыдущем случае. Разница только в одном: при использовании генератора HSE стабильность частот лучше, чем при использовании HSI. Однако, если мы хотим получить максимальную производительность всей системы, то нужно в качестве источника SYSCLK использовать блок умножения частоты PLL.

HSE и PLL

В микроконтроллерах STM32 модуль PLL может тактироваться как от HSI генератора, так и от HSE. Существует огромное количество вариантов настройки тактирования системы от PLL. Мы остановимся только на одном, в котором используется HSE и все коэффициенты настроены на максимальную производительность системы:

Рис. 12. Схема прохождения тактового сигнала при использовании PLL совместно с HSE

Кварцевый резонатор выбираем на 8 МГц. Далее, сигнал с HSE без деления (настраивается битом PLLXTPRE) поступает на селектор PLLSRC и потом на PLL. Для того, чтобы из 8-и МГц получить 72 МГц, коэффициент умножения PLL должен быть равен PLLMUL=9. Далее, сигнал с PLL частотой 72 МГц через селектор SW поступает на SYSCLK. Так как процессорное ядро мы хотим тактировать максимальной частотой в 72 МГц, AHB Prescaler устанавливаем равный единице (без деления). Для получения частоты шины APB1, равной 36 МГц, APB1 Prescaler ставим равным 2. Шина APB2 имеет максимальную частоту 72 МГц, следовательно, APB2 Prescaler можно установить в 1.

Итого:

  • Кварц HSE на 8 МГц
  • PLLXTPRE: без деления
  • PLLSRC: HSE генератор
  • PLLMUL = 9
  • SW = PLLCLK
  • AHB Prescaler = 1
  • APB1 Prescaler = 2
  • APB2 Prescaler = 1

Что еще?

Здесь мы не рассмотрели еще некоторые блоки системы тактирования, о которых хочется упомянуть.

Clock security system (CSS) — переводится примерно как «система безопасности тактирования». Если, при использовании генератора HSE в качестве источника тактового сигнала для SYSCLK или PLL, произойдет срыв генерации HSE, то CSS автоматически переключит всю систему на работу от встроенного RC-генератора HSI. Таким образом, если что-то случится с кварцем, система не зависнет намертво в неопределенном состоянии, а сможет выполнить какие-то действия, например, перевести объект управления в безопасное состояние (закрыть все вентили, отключить силовые установки, и т.д.)

Модуль часов реального времени RTC может тактироваться от встроенного LSI генератора на 40 КГц, от HSE через делитель на 128, либо от LSE с внешним кварцем на 32768 Гц. Источник тактовых импульсов выбирается с помощью RTCSEL.

Модуль USB получает тактовый сигнал от PLL, причем при частоте на выходе PLL равной 72 МГц есть возможность активировать USB Prescaler с коэффициентом деления 1.5 для получения необходимой частоты 48 МГц.

Microcontroller clock output (MCO) — вывод микроконтроллера, на который можно вывести частоту от одного из источников сигнала: SYSCLK, HSE, HSI либо сигнал с выхода PLL, поделенный пополам. Нужный источник выбирается с помощью битов MCO.

Заключение

Итак, мы рассмотрели основные моменты в системе тактирования микроконтроллеров STM32 на примере STM32F103x8 и STM32F103xB. В других микроконтроллерах STM32 примерно все то же самое, за исключением некоторых нюансов. В следующей части мы познакомимся с регистрами системы тактирования и сброса RCC и рассмотрим пример инициализации RCC.

Продолжение тут.

Прошиваем STM32 через ST-Link — DiMoon Electronics

Допустим, копая просторы Интернета, нашли мы очень интересное электронное устройство на микроконтроллере STM32, причем и все схемы, и прошивка прилагается. Но вот незадача, никогда мы не занимались загрузкой прошивки в STM32, раньше работали только с AVR-ками. Не беда! В этой статье мы разберемся в этом вопросе, ведь загружать готовую прошивку в STM32 не сложнее, чем в старые добрые AVR-ки, а может даже и проще! 😉 Итак, поехали! Предыдущая статья здесь, все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1.

Программатор

В предыдущей части мы познакомились с несколькими вариантами программатора ST-Link. В данном примере в качестве программатора я буду использовать отладочную плату stm32f4discovery, просто потому, что она у меня есть. Для того, чтобы использовать эту отладочную плату в качестве программатора, нужно сделать 2 вещи:

  1. Снять перемычки, соединяющие линии программирования встроенного ST-Link-а с микроконтроллером, распаянным на плате
  2. С помощью гребенки, на которую выведена шина SWD, подключить сигнальные линии программатора к внешнему микроконтроллеру

На картинке, приведенной далее, показана распиновка разъема SWD:

На китайских отладочных платах с микроконтроллером stm32f103c8 имеется соответствующий разъем, через который можно загрузить прошивку в МК. Эти платы выглядят примерно так:

Пины на разъеме программирования подписаны как GND, CLK, DIO, 3V3. Соединение с программатором выполняется вот таким образом:

  • GND — GND
  • CLK — SWCLK
  • DIO — SWDIO

У меня макеты выглядят вот так:

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

 

Софт

Перейдем теперь к программной составляющей. Нам понадобится драйвер для программатора и управляющая софтина, через через которую мы будем загружать прошивку в микроконтроллер. Для этого нам нужно на официальном сайте www.st.com скачать пакет STM32 ST-LINK utility. А что нужно сделать перед скачиванием чего-нибудь с www.st.com? Правильно! Надо у них зарегистрироваться!!!

[Шуточка про «нельзя просто так взять и скачать что-то с st.com»]

Кину ссылку на архив в конце статьи.

Итак, мы добыли архив с пакетом STM32 ST-LINK Utility. После установки подключаем программатор к ПК по USB и подключаем питание к отладочной плате. Если драйвера на программатор не установились автоматически, то идем в диспетчер устройств, там находим наш STM32 STLink, выбираем Обновить драйвер->Выполнить поиск на этом компьютере. После этого все должно заработать. Затем, из меню «Пуск» запускаем программу «STM32 ST-LINK Utility«:

Выглядит интерфейс ST-LINK Utility вот так:

Далее, нам необходимо произвести небольшие настройки. В меню выбираем Target->Settings…

Открывается вот такое окошко:

Выставляем настройки, как на скриншоте и нажимаем OK. После этого программатор автоматически подключится к прошиваемому микроконтроллеру. Пробежимся по кнопкам управления:

«Подключиться к микроконтроллеру» — выполняет подключение программатора к МК. При этом работа прошивки останавливается. После этого можно выполнять дальнейшие манипуляции с flash-памятью МК.

«Отключиться от микроконтроллера» — после того, как мы все сделали, нажимаем на эту кнопку и SL-Link отключается от МК, при этом запускается загруженная во flash-память прошивка.

«Очистить чип» — при нажатии на эту кнопку стирается вся flash-память микроконтроллера. Это необходимо делать перед загрузкой другой прошивки в МК.

Для того, чтобы прошить наш .hex или .bin файл в МК нужно сделать следующее. В меню выбираем Target->Programm…

После этого у нас открывается окошко выбора файла прошивки. Выбираем нужный нам файл, после чего появляется вот такое окно:

Здесь нам нужно нажать Start чтобы запустить процесс. После того, как прошивка была загружена в МК, нажимаем на кнопку «Отключиться от микроконтроллера«.

Те, кто раньше работал с микроконтроллерами AVR знают о такой вещи как фьюз-биты. Если в AVR-ках неправильно их выставить, то прошивка может работать некорректно. Для вас хорошая новость: в STM32 фьюз-битов нет! Достаточно просто залить в МК файл с управляющей программой и все будет работать.

Ну что ж, на этом, пожалуй, закончу, всем кто дочитал, спасибо за внимание 😉 🙂 Продолжение тут

Ссылки

Драйвер и софт для ST-Link: STM32 ST-LINK utility

Разработка проектов STM32 с помощью Visual Studio - Учебники по VisualGDB

В этом руководстве показано, как создать простой проект «Мигающий светодиод» для платы STM32100B-EVAL с помощью Visual Studio.

Прежде чем мы начнем, убедитесь, что VisualGDB установлен.

  1. Запустите Visual Studio. Перейдите в File-> New-> Project:
  2. Выберите VisualGDB -> Мастер встроенных проектов. Укажите каталог проекта и введите название проекта:
  3. Выберите «Встроенный двоичный».Если вы хотите, чтобы VisualGDB генерировал файл .bin в дополнение к файлу .elf, убедитесь, что установлен соответствующий флажок.
  4. На следующей странице выберите набор инструментов arm-eabi. Если он не установлен, VisualGDB установит его автоматически:
  5. После выбора набора инструментов ARM VisualGDB покажет список совместимых целей. Если вы раньше не создавали проекты на основе STM32 с VisualGDB, нажмите «Установить», чтобы автоматически загрузить и установить необходимые файлы:
  6. После установки пакета STM32 вы сможете настраивать различные свойства устройства (например,грамм. запускать из FLASH или SRAM):
  7. VisualGDB сгенерирует образец проекта по умолчанию «Мигающий светодиод». Вы можете выбрать номер порта и задержку мигания на следующей странице:
  8. На последней странице мастера вы можете выбрать метод отладки. VisualGDB автоматически обнаружит и настроит большинство адаптеров JTAG / SWD. Просто подключите его к USB-порту и выберите в списке:
  9. В этом руководстве мы покажем, как использовать VisualGDB с Segger J-Link с помощью пакета Segger Software.Если вы хотите использовать ST-Link или другой отладчик JTAG / SWD, просто выберите его из списка. VisualGDB позволит вам автоматически загрузить пакет метода отладки, если он отсутствует:
  10. Если вы еще не установили программный пакет Segger, перейдите по ссылке в мастере VisualGDB, чтобы установить его. После установки укажите его местоположение в поле «Каталог Segger J-Link»:
  11. Используйте кнопку «Тест» для автоматической проверки подключения к устройству:
  12. Нажмите Готово, чтобы завершить работу мастера.VisualGDB сгенерирует проект Visual Studio для вашего устройства STM32. Нажмите Ctrl-Shift-B, чтобы построить его:
  13. Чтобы начать отладку, просто включите плату и подключите к ней отладчик JTAG. Убедитесь, что Windows распознает устройство и загружает соответствующие драйверы. Установите точку останова внутри цикла и нажмите F5, чтобы начать отладку. Вы можете отлаживать прошивку, как обычную программу для Windows:
  14. Нажмите F10, чтобы перейти через строку, при которой загорается светодиод. Вы увидите, как загорится светодиод: 14-stm32board
  15. Вы можете настроить различные параметры проекта, щелкнув правой кнопкой мыши узел проекта в обозревателе решений и выбрав «Свойства проекта VisualGDB».Например. вы можете ссылаться на различные платформы, включенные в пакет STM32, на странице Embedded Frameworks. VisualGDB автоматически обновит ваш make-файл и синхронизирует настройки IntelliSense: 14-stm32board
  16. VisualGDB автоматически проиндексирует ваши источники (и источники пакета STM32) и позволит вам перемещаться по ним с помощью CodeJumps. Просто щелкните метки CodeJumps рядом с объявлениями функций, чтобы просмотреть ссылки, деревья вызовов, функции, «реализующие» определенные указатели на функции и так далее: 14-stm32board
  17. Используйте View-> Embedded Memory Explorer, чтобы получить подробный отчет о структуре вашего встроенного двоичного файла, включая расположение разделов в памяти, размеры отдельных функций, их представление разборки и анализ стека наихудшего случая: 14-stm32board

Вы также можете использовать OpenOCD для отладки ваших проектов STM32.Для получения более подробной информации следуйте соответствующим руководствам.

,

STM32 Education - Ресурсы, учебные пособия, учебные курсы

КАТЕГОРИИ Отмена

Обучение

  • Записанные вебинары
  • Партнерские тренинги
  • STM32 Образование
    • Учебники
.

ST-LINK / V2 - внутрисхемный отладчик / программатор ST-LINK / V2 для STM8 и STM32

ST-LINK / V2 - это внутрисхемный отладчик и программатор для микроконтроллеров STM8 и STM32. Модуль однопроводного интерфейса (SWIM) и интерфейсы JTAG / последовательной отладки проводов (SWD) используются для связи с любым микроконтроллером STM8 или STM32, расположенным на плате приложения. Помимо обеспечения тех же функций, что и ST-LINK / V2, ST-LINK / V2-ISOL обеспечивает цифровую изоляцию между ПК и целевой платой приложения.Он также выдерживает напряжения до 1000 В действ. .

Приложения STM8 используют полноскоростной интерфейс USB для связи с программным обеспечением ST Visual Develop (STVD-STM8) или ST Visual Programmer (STVP-STM8) или с интегрированными средами разработки сторонних производителей.
Приложения STM32 используют полноскоростной интерфейс USB для связи с программным инструментом STM32CubeIDE или со сторонними интегрированными средами разработки.

Основные характеристики

  • Питание 5 В через разъем USB
  • USB 2.0 полноскоростной совместимый интерфейс
  • Кабель USB Type-A - Mini-B в комплекте
  • Особенности
  • SWIM:
    • Поддержка прикладного напряжения от 1,65 В до 5,5 В на интерфейсе SWIM
    • Поддержка низкоскоростного и высокоскоростного режимов SWIM
    • Скорости программирования SWIM: 9.7 кбайт / с на низкоскоростной, 12,8 кбайт / с на высокоскоростной
    • Кабель SWIM для подключения к приложению со стандартным разъемом ERNI Вертикальный номер разъема: 284697 или 214017 Номер горизонтального разъема: 214012
    • Кабель SWIM для подключения к приложению с помощью контактных разъемов или разъема с шагом 2,54 мм.
  • Особенности
  • JTAG / отладки последовательного кабеля (SWD):
    • 1.Поддержка прикладного напряжения от 65 В до 3,6 В на интерфейсе JTAG / SWD и допустимые входы 5 В
    • Кабель JTAG для подключения к стандартному 20-контактному разъему JTAG с шагом 2,54 мм.
    • Поддержка JTAG
    • Поддержка связи SWD и средства просмотра последовательной связи (SWV)
  • Поддержка прямого обновления прошивки (DFU)
  • Светодиод состояния мигает во время связи с ПК
  • Рабочая температура от 0 ° C до 50 ° C
  • 1000 В действующее значение высокое напряжение изоляции (только ST-LINK / V2-ISOL)
,

STM32F103VC - Линия основных характеристик, MCU ARM Cortex-M3 с 256 Кбайт флэш-памяти, процессор 72 МГц, управление двигателем, USB и CAN

Семейство производительных линий STM32F103xC, STM32F103xD и STM32F103xE включает высокопроизводительное 32-битное ядро ​​RISC ARM ® Cortex ® -M3, работающее на частоте 72 МГц, высокоскоростную встроенную память (флэш-память до 512 Кбайт и SRAM до 64 Кбайт), а также широкий спектр усовершенствованных устройств ввода-вывода и периферийных устройств, подключенных к двум шинам APB.Все устройства имеют три 12-битных АЦП, четыре 16-битных таймера общего назначения плюс два таймера ШИМ, а также стандартные и расширенные интерфейсы связи: до двух I 2 Cs, трех SPI, двух I 2 Ss, один SDIO, пять USART, USB и CAN.

Семейство высокопроизводительных линий STM32F103xC / D / E работает в диапазоне температур от –40 до +105 ° C, от 2 до 10 ° C.Источник питания от 0 до 3,6 В. Полный набор режимов энергосбережения позволяет разрабатывать приложения с низким энергопотреблением.
Эти особенности делают семейство высокопроизводительных линейных микроконтроллеров STM32F103xC / D / E подходящим для широкого спектра приложений, таких как приводы двигателей, управление приложениями, медицинское и портативное оборудование, ПК и игровые периферийные устройства, платформы GPS, промышленные приложения, ПЛК, инверторы. , принтеры, сканеры, сигнализация, видеодомофон, и HVAC.

Основные характеристики

  • Ядро: 32-битный процессор ARM® Cortex ® -M3
    • Максимальная частота 72 МГц, производительность 1,25 DMIPS / МГц (Dhrystone 2.1) при нулевом доступе к памяти состояния ожидания
    • Одноцикловое умножение и аппаратное деление
  • Воспоминания
    • От 256 до 512 Кбайт флэш-памяти
    • до 64 Кбайт SRAM
    • Гибкий контроллер статической памяти с выбором 4-х микросхем.Поддержка памяти Compact Flash, SRAM, PSRAM, NOR и NAND
    • ЖК-параллельный интерфейс, режимы 8080/6800
  • Часы, сброс и управление питанием
    • Питание от 2,0 до 3,6 В и входы / выходы
    • POR, PDR и программируемый детектор напряжения (PVD)
    • Кварцевый генератор от 4 до 16 МГц
    • Внутренний RC с заводской настройкой 8 МГц
    • Внутренний RC 40 кГц с калибровкой
    • Генератор 32 кГц для RTC с калибровкой
  • Низкая мощность
    • Режимы сна, остановки и ожидания
    • V Питание BAT для RTC и резервных регистров
  • 3 × 12-битных, 1 мкс аналого-цифровых преобразователя (до 21 канала)
    • Диапазон преобразования: от 0 до 3.6 В
    • Возможность трех выборки и удержания
    • Датчик температуры
  • 2 × 12-битных цифро-аналоговых преобразователя
  • DMA: 12-канальный контроллер DMA
    • Поддерживаемые периферийные устройства: таймеры, АЦП, ЦАП, SDIO, I 2 Ss, SPI
.

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

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