Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

ARM. STM32 быстрый старт

Данная статья, которая является еще одним "быстрым стартом" в освоении ARM-контроллеров, возможно поможет сделать первые шаги в освоении 32-битных контроллеров ARM на базе ядра Cortex-M3 - STM32F1xxx серии. Возможно данная статья (которых на эту тему появляется как грибов после дождя) станет для кого-то полезной.

Введение

Почему ARM?
1. Есть из чего выбрать (разными производителями сегодня выпускается более 240 ARM-контроллеров)
2. Низкая цена (например за 1$ можно получить 37хI / O, 16K Flash, 4K RAM, 2xUART, 10x12bitADC, 6x16bitPWM).

А начнем нашу работу с контроллеров фирмы ST Microelectronics. Контроллеры на основе ядра ARM Cortex-M3 характеризуются широким набором периферии, высоким уровнем рабочих характеристик, низкой цене
P.S. В самом начале создается впечатление, что ARM'ы это какие-то страшные (в пайке, разводке, программировании) существа. Но это только на первый взгляд :) и вы в этом сами убедитесь.

Итак, изучать ARMы будем на примере контроллеров STM32F1. Одновременно эта серия имеет несколько линеек:

  • Value line STM32F100 - 24 МГц CPU, motor control, CEC.
  • Access line STM32F101 - 36 МГц CPU, до 1 Mб Flash
  • USB access line STM32F102 - 48 МГц CPU with USB FS
  • Performance line STM32F103 - 72 МГц, до 1 Mб Flash, motor control, USB, CAN
  • Connectivity line STM32F105/107 - 72 МГц CPU, Ethernet MAC, CAN, USB 2.0 OTG

Также существует следующая классификация:

Low-density devices

STM32F101xx, STM32F102xx, STM32F103xx

Medium-density devices

STM32F101xx, STM32F102xx, STM32F103xx

High-density devices

STM32F101xx, STM32F103xx

XL-density devices

STM32F101xx, STM32F103xx

Connectivity line devices

STM32F105xx, STM32F107xx

Придется часто лазить здесь
Еще скажу несколько слов об этом ресурсе. Ясное дело, выбираем нужный контроллер и попадаем на страницу с кучей файлов в формате. рdf. (вкладка Design support). Можно читать все, но достаточно ознакомиться с такими файлами:
1. REFERENCE MANUAL (содержит полную спецификацию на контроллер).
2. ERRATA SHEET (содержит описание ошибок, которые могут возникать при работе с периферией).
3. Остальные документы содержат примеры работы с периферией, вопросы, связанные с программированием, описание некоторых библиотек, а с самого низа страницы можно найти EVARM-проекты демоплат и подобное ПО.

Архитектура

Итак, наш контроллер STM32 содержит в себе Cortex-M3 процессор (M означает серию для бюджетных устройств). Для того, чтобы начать программировать ARMы и не пользоваться только default'ными примерам и настройками нужно иметь представление об их архитектуре. Для начала:
1) 32-битный МК, выполненный по Гарвардской архитектуре (память программ и данных разделены),
2) имеет несколько отдельных шин и 3-ступенчатый конвейер и более 10 регистров общего назначения, что позволяет выполнять операции параллельно и (большинство) - за один такт.
3) набор инструкций - Thumb-2 (смесь 16 - и 32-битных команд, ориентированный на компиляторы C / C + +).

Рассмотрим упрощенную блок-схему шинной архитектуры STM32:

Архитектура STM32

Архитектура на примере линейки Connectivity devices

Итак, давайте коротко пройдемся по основам основ:
Матрица шин (bus matrix) - контроллер высокоскоростных шин, обеспечивающий независимую связь и арбитраж (в случае одновременного доступа к одному ресурсу) между системной шиной и шиной данных ядра, DMA, Ethernet (masters) и периферией - SRAM, FLASH, AHB (slaves) .

Шины ядра:
ICode bus - 32-битная шина инструкций — обеспечивает связь ядра с интерфейсом инструкций Flash.
DCode bus - шина данных — обеспечивает связь ядра с интерфейсом данных во Flash.
System bus - системная шина ядра — обеспечивает связь ядра и периферии
Flash interface (FLITF) интерфейс Flash-памяти — обеспечивает чтение, запись, стирание, чтение с буфером предварительной выборки, защиту памяти (от записи или чтения).
AHB system bus (Advanced High-performance Bus) — шина, которая связывает матрицу шин и периферийные шины APB (Advanced Peripheral Bus (Bridge)). Шина AHB, предназначена для управления, например, регистрами системной периферии (GPIO ЦАП и т.п.). Надо сказать, что шины APB1,2 работают на разных частотах: так APB2 может работать на частоте ядра, а быстродействие APB1 ограничено 36 МГц. Поэтому, на APB2 и висит скоростная периферия (АЦП, некоторые таймеры порты ввода / вывода и т.д.)
DMA (Direct Memory Access) — обеспечивает прямой доступ к памяти в обход ядра (нужно лишь задать что, откуда и куда передать, а DMA сам все возьмет и передаст кому надо через матрицу шин)
Reset & Clock Control (RCC) — обеспечивает тактирование ядра и периферии (которая по дефолту отключена от тактового сигнала) и сброс контроллера.

Стандартная схема подключения

И здесь для начинающих возникает вопрос в чем и как рисовать и разводить печатные платы для, например, 144-ногого микроконтроллера (48-ноги еще куда не шло). Однако ничего страшного в рисовании схемы, разводке и пайке данных контроллеров нет. Для этого можно пользоваться программой Eagle (она содержит библиотеку компонентов ST или в крайнем случае можно поискать в Интернете или скачать внизу статьи), можно попробовать рисовать платы в старом добром Sprint-е (хотя, первый вариант мне кажется более надежным). Ниже приведены стандартные схемы включения контроллеров семейства Value line STM32F100С4 и Connectivity line STM32F105

Привожу базовую схему подключения контроллеров STM32F1 и некоторые их нюансы:

Базовая схема подключения контроллеров STM32F1

Базовая схема подключения контроллеров STM32F1

  1. Корпус: контроллеры STM32 помещены в корпусах LQFP с числом лапок от 48 до 144, при этом распиновка ножек контроллеров в одинаковых корпусах - совпадает, что не может не радовать.
  2. Питание:
    1.  Контроллер питается от источника в 3.3 В (хотя можно подключать 2-3.6 В).
    2. Хотя напряжение питания равно 3.3В, много ножек контроллера толерантны к 5В сигналов (см. в спецификации лапки с пометкой FT).
    3. Vbat - используется для подключения резервного источника питания. Если в схеме резервный источник не используется, то Vbat надо посадить на общий источник питания.
    4. Vdd_1 ... 4 подтягиваем к «+», Vss_1 ... 4 сажаем на «-» источника питания.
    5. Спецификация на контроллер советует поставить параллельно источнику питания 5 конденсаторов в 100нФ (поближе к контроллеру) и один на 4.7мкФ (ближе к Vdd_3). Во многих схемах авторы часто не ставят их, думаю, если контроллер питается от чистого стабилизированного источника их можно не ставить.
    6. Питание АЦП (он питается напряжением 2,4-3,6 В) и цифровой части схемы в STM32 разделены (для большей надежности, очевидно) и если мы не используем отдельный источник для АЦП, Vdda / Vssa сажаем на соответствующие выводы общего источника, иначе схема может работать некорректно и непредсказуемо. В 100-пиновых корпусах есть еще дополнительные лапки опорного источника АЦП Vref + / Vref-. Vref- нужно повесить на Vdda, а на Vref + можно бросить от 2,4 В до Vdda.
  3. Резонатор. STM32 может тактироваться от:
    1. Внутреннего высокочастотного генератора на 8 МГц (HSI).
    2. Внутреннего низкочастотного источника тактовых импульсов 40 кГц (LSI).
    3. Внешнего высокочастотного осциллятора (HSE).
    4. Внешнего низкочастотного осциллятора на 32,768 кГц (LSE-генератор может работать вместе с HSE или синхросигналом и обеспечивает синхронизацию часов реального времени и работу оконного сторожевого таймера).
    5. Внешнего сигнала синхронизации (его частота должна быть целым делителем максимальной рабочей частоты контроллера).
  4. Сброс контроллера можно провести:
    1. «заземлив» лапку NRST. Стоит сказать, что разработчик постарался и уже включил подтягивающий резистор этой лапки. (external reset)
    2. С помощью одного из сторожевых таймеров независимого или оконного (IWDG или WWDG reset).
    3. С помощью схемы слежения за низким напряжением (low-power management reset)
    4. при входе в режим Standby
    5. при входе в режим Stop
    6. Программно - установкой определенного бита

Для удобства пайки LQFP корпусов, существуют переходники. Продаются на eBay, бывают универсальные и под фиксированное количество ножек. Средняя цена: 1$ за штуку, посмотреть можно здесь.

QFP/TQFP/PQFP/LQFP 16 - 80 адаптер переходник

Программирование. Отладка

BOOT1

BOOT0

Boot mode

X

0

Flash память

0

1

Системная память (bootloader)

1

1

Память SRAM

Контроллеры STM32 можно заставить загружаться с 3-х областей памяти (в зависимости от состояния ножек BOOT0 и BOOT1 при старте контроллера или после его сброса). Записать программу в память контроллера можно следующими способами:

1 способ:
Используя загрузчик (он уже записан в системную память) и USART1 (USART2 remaped): использует внутренний тактовый сигнал 8 МГц. Чтобы запустить встроенный загрузчик, зашитый в контроллер производителем, достаточно просто бросить на лапки контроллера TX1, RX1 сигнал с преобразователя RS232-3.3В (например на базе FT232RL) и выставить перед этим BOOT0 = 1 и BOOT1 = 0 жмем RESET и можем шить программу в контроллер. А зашивается она в программе Flash Loader Demonstartor от STM (для Windows).

PS. Если вы сидите под LINUX и не имеете отладочной платы типа дискавери, можно заливать прошивку в контроллер через всеми любимый rs-232 (собственно — через преобразователь rs-232-3,3В). Для этого нужно использовать python-скрипт (Ivan A-R) (для LINUX или MACOSX).
Для начала у вас должен быть установлен Python 2.6 версии и библиотека для работы с последовательным портом — PySerial library.
Теперь, чтобы запустить скрипт stmloader.py (из терминала, разумеется) нужно его немного подправить под свой компьютер: откроем его в текстовом редакторе.
Набираем в командной строке
~$ dmesg | grep tty
чтобы увидеть все последовательные порты ПК.
и после набора...
 ~$ setserial -g /dev/ttyS[0123]
мы узнаем путь к нашему 232-му порту. Если система ругается на setserial, установим его
~$ sudo apt-get install setserial
мы узнаем путь к нашему физическому порту (например, у меня — /dev/ttyS0). Теперь нужно записать этот путь в файл скрипта stm32loader.py вместо дефолтного «/dev/tty.usbserial-...». Набираем в терминале
~$ python stm32loader.py -h
...для вызова справки и заливаем прошивку в наш контроллер.

2 способ:
Через USB OTG, используя DFU-режим, требует внешнего кварца на 8 МГц, 14.7456 МГц или 25 МГц (этот загрузчик есть не у всех контроллерах с USB OTG надо внимательно смотреть на маркировку вашего контроллера)

3 способ:
JTAG/SWD. Ну и для тех, кто имеет демоплату типа Discovery или самопальный JTAG/SWD программатор, можно заливать код и уже отлаживать свой микроконтроллер этим способом. Для JTAG в микроконтроллере отведено 6 лапок (TRST, TDI, TMS, TCK, TDO, RST) + 2 на питание. SWD использует 4 сигнала (SWDIO, SWCLK SWO, RESET) и 2 на питание.

PS. В среде EAGLE я набросал несколько схем-заготовок для 48-ми, 64-х и 100-ногих контроллеров (папка eagle), а stm32loader содержит скрипт stm32loader.py

Прикрепленные файлы:

Теги:

Kharakternyk Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (7) | Я собрал (0) | Подписаться

0
Ден #
SWD использует 4 сигнала (SWDIO, SWCLK SWO, RESET) и 2 на питание.
Это не верно, для программирования через SWD используется всего две сигнальных линии SWDIO и SWCLK и общий провод!
Ответить
0
Андрей #
Спасибо за статью! У меня не получалось запустить 103-й...а дело было в ножках питании АЦП, которые я за ненадобностью просто не подсоединил к питанию. Все исправил, и заработал процессор!
А насчет программирования по 2-м + земля ножкам, так это так и есть. SWDIO+SWCLK+GND - вот и все!
Ответить
+1
Евгений #
...5 конденсаторов в 100нФ (поближе к контроллеру) и один на 4.7мкФ (ближе к Vdd_3). Во многих схемах авторы часто не ставят их, думаю, если контроллер питается от чистого стабилизированного источника их можно не ставить.
Это не правильно. Они нужны, чтобы мгновенно обеспечить питанием сам контроллер во время всплесков потребления (контроллер не лампочка, потребляет не равномерно). Иначе на длинных дорожках питания в эти моменты может быть наносекундная просадка напряжения, что ведет к излучению помех и нестабильности работы контроллера.

Питание АЦП (он питается напряжением 2,4-3,6 В) и цифровой части схемы в STM32 разделены (для большей надежности, очевидно)
Для того, чтобы помеха с цифровой шины питания не влияла на аналоговую (собственно на АЦП). Для этого между ними ставят Г-образный LC фильтр (в виде дросселя и конденсатора).
Ответить
0
Алексей #
Первое правило схемотехники: ставь конденсаторы по питанию и как можно ближе к ножкам микросхемы (керамику) и на все ножки по питанию.
Ответить
0
Стас #
Собственно вопрос к автору-спецу по ARM-контроллеру. Имеется изделие на STM32F100C8T6B, но он ARM сгорел. Простая замена вылечит изделие? Имеется файл прошивки для изделия.
Ответить
0
Прохожий #
Если устраните причину, по которой он сгорел, и запаяете обратно прошитый контроллер, то будет работать
Ответить
0
Сергей #
У меня осциллограф без прошивки, процессор STM32F103C8Т6 , разъём на плате 10-пиновый мелкий, от Атмеги программатор не подходит, разъём в 2 раза крупнее, да и 16-битный он, а тут нужен 64. Каким программатором это сделать, в инете нашёл кучу всего, но сомневаюсь кто-то подскажет?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Конструктор регулируемого преобразователя напряжения LM317 Мини гравер 125 Ватт
вверх