Отладочная плата stm32f103c8t6 в Москве

image

В уроке получим минимальную информацию об отладочной плате STM32F103C8T6. Добавим к плате компоненты необходимые для загрузки программ в микроконтроллер (прошивка FLASH).

Предыдущий урок     Список уроков     Следующий урок

В наших уроках будем использовать отладочную плату на базе микроконтроллера STM32F103C8T6.

Часто ее называют  ”Blue pill”, в переводе – синяя таблетка или пилюля.

По моей партнерской ссылке плата стоит всего 175 руб.

Технические характеристики платы STM32F103C8T6.

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

Микроконтроллер
Число разрядов 32 бита
Максимальная частота 72 мГц
Объем памяти программ (FLASH) 64 / 128 кБайт
Объем памяти данных (RAM) 20 кБайт
Выводы 37
Таймеры общего назначения 3
Расширенный таймер  с ШИМ управления двигателем 1
Системный таймер 1
Сторожевые таймеры 2
UART 3
SPI 2
I2C 2
CAN 1
USB 1
Контроллеры прямого доступа к памяти 7
АЦП 2 АЦП, 10 каналов, время преобразования 1 мкс
Часы реального времени есть
Аппаратный модуль расчета CRC есть
Напряжение питания микроконтроллера 2 … 3,6 В
Напряжение питания платы 5 В
Ток потребления до 50 мА
Размеры платы 53 x 22,5 мм

Выводы микроконтроллера непосредственно соединены с выводами платы.

Сейчас обращаем внимание на следующее:

  • Микроконтроллер питается от напряжения 3 В и высокие уровни выходных и входных дискретных сигналов у него тоже 3 В. Но часть выводов, обозначенных на схеме закрашенной точкой, допускают при использовании в качестве входов подключение сигналов с уровнями 5 В. Так называемые толерантные к 5 В входы. Остальные входы рассчитаны на напряжение не более напряжения питания, обычно 3 В. Повышение этого напряжения свыше 4 В приведет к повреждению микроконтроллера.
  • При использовании в качестве выходов, выводы микроконтроллера допускают вытекающий и втекающий ток не более 20 мА. Рекомендуется не более 8 мА. Но 3 вывода, отмеченные восклицательным знаком, могут быть использованы только в схемах с втекающим током и не более 3 мА.
  • К выводу PC13 подключен светодиод общего назначения. Светится он при низком уровне сигнала.

Система питания платы.

Схема цепей питания выглядит так.

Узел вырабатывает напряжение 3,3 В, необходимое для питания микроконтроллера. Используется стабилизатор XC6204.

Он получает питание 5 В либо с USB порта, либо с вывода платы 5 V. Эти цепи соединены непосредственно без защитного диода. Поэтому использовать плату с одновременным питанием от этих двух источников нельзя.

Ток потребления микроконтроллера зависит от частоты тактирования и использования периферийных устройств.

Частота, мГц Ток потребления, мА
Все периферийные устройства включены 72 50
48 36
36 29
24 20
16 15
8 9
Все периферийные устройства выключены 72 33
48 25
36 20
24 14
16 11
8 7

Я привел эту таблицу, чтобы вы поняли насколько важно выбирать оптимальную частоту тактирования, особенно в приложениях критичных к энергопотреблению. Микроконтроллеры STM32 позволяют это делать гибко и оперативно.

Вот полная принципиальная схема платы.

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

Четырех контактный разъем на торце платы предназначен для загрузки программ с помощью аппаратного программатора, например StLink. Но в микроконтроллере существует программный загрузчик, позволяющий зашить программу через UART 1 (выводы A9 и A10). Он называется системным загрузчиком и зашивается в память микроконтроллера на этапе производства.

За режим работы платы отвечают  2 желтые перемычки.

Это обычный режим работы. При включении или сбросе запускается программа из FLASH.

При таком положении перемычек запускается системный загрузчик. Это режим прошивки FLASH-памяти микроконтроллера.

При таком положении перемычек программа загружается в ОЗУ. Используется на этапе отладки для сохранения ресурса программирования FLASH-памяти.

Соответствие состояния входов BOOT и режимов работы микроконтроллера STM32.  Перемычка BOOT0 на рисунках расположена сверху.

BOOT1 BOOT0 Режим запуска программы
Внутренняя FLASH
1
1 Системная память
1 1 Внутреннее ОЗУ

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

  • подключить выводы A9 и A10 к COM порту компьютера;
  • установить перемычку BOOT0 в режим запуска из системной памяти;
  • сбросить микроконтроллер;
  • запустить на компьютере программу прошивки FLASH микроконтроллера;
  • вернуть перемычки в состояние запуска программы из FLASH;
  • сбросить микроконтроллер.

Во первых в современных компьютерах не часто встречается COM порт. Во вторых слишком много манипуляций с перемычками и сбросом. Утомительное занятие.

Я упростил этот процесс так.

Плату подключил к компьютеру через мост USB-UART. Я использовал PL2303, но можно применить любой другой модуль, даже плату Ардуино со встроенным преобразователем интерфейсов. Например, Arduino Nano. Надо только соединить вход сброса с землей для того, чтобы микроконтроллер не влиял на сигналы преобразователя интерфейса CH340.

Вместо перемычки BOOT0 я установил кнопку. Еще одну кнопку припаял на сигнал сброса. Штатной кнопкой сброса пользоваться неудобно.

Вот моя схема отладочного модуля.

Резистор 10 кОм припаян между выводами трех контактного разъема PLS, установленного вместо перемычки BOOT0.

Питание плата STM32 получает от моста USB-UART. На нем надо установить перемычку питания в положение 5 В.

У меня все это выглядит так.

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

Для программирования:

  • Нажимаю и удерживаю кнопку ПРОШИВКА, кратковременно нажимаю кнопку СБРОС.
  • Загружаю программу во FLASH микроконтроллера.
  • Отпускаю кнопку ПРОШИВКА.
  • Нажимаю кнопку СБРОС.

Все это делается пальцами одной руки.

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

Предыдущий урок     Список уроков     Следующий урок

Поддержать проект

Добрый… день? Сегодня я хотел бы поделиться моим опытом начинающего экспериментатора с stm32. В данном посте мне хотелось бы помочь тем, кто хочет перейти с ардуино или просто начать использовать stm32 для своих поделок. Я и сам не имею богатого опыта работы с данными контроллерами, но буду рад поделиться своим первым опытом, и сделанными на этом пути ошибками. Надеюсь, кому-то это будет интересно.

Для начала, нам понадобится stm32f103C8T6, и дебаггер ST-Link V2. И то и другое можно купить в китае или в местных магазинах электроники, цена обоих, примерно по 2$. А так же нам потребуется 4 джампера, для соединения этих устройств. Этого будет достаточно, что-бы помигать светодиодом или управлять какими-либо внешними устройствами, но начнем с малого.

Первое, что нам понадобится – установить драйвер для программатора. Его можно найти здесь (внизу): http://www.st.com/en/development-tools/stsw-link009.html

Кроме того нам понадобятся STM32CubeMX его качаем тут: http://www.st.com/en/development-tools/stm32cubemx.html

А так же среда разработки, я предпочитаю официальный софт с поддержкой, потому берем ставую не так давно бесплатной Atollic TrueSTUDIO вот тут: http://www.st.com/en/development-tools/truestudio.html

Затем, нам нужно подключить, используя 4 джампера, наш программатор к плате контроллера следующим образом:

image

После этого, если возможность записи прошивки в память на вашей плате не заблокирована – все готово к созданию нового проекта. Если же запись в память вашей платы заблокирована, вы можете решить это, подключив плату аналогичным образом, но используя улилиту STM32 ST-Link Utility и переключив джампер Boot0 в положение 3.3v. Что такое Boot0 можно глянуть тут: http://wiki.stm32duino.com/images/a/ae/Bluepillpinout.gif но вообще эта статья не об этом.

Итак, для начала создадим проект, используя STM32CubeMX, эта программа предназначена для удобной инициализации периферии и создания проекта, для IDE в которой мы будем далее работать, поверьте, куб действительно прекрасен. После нажатия на кнопку “New Project”, попадаем на окно выбора чипа. В нашем случае это stm32f103c8tx. Выбираем его и нажимаем “Start Project”.

Следующее за этим окно выгляит довольно пугающе для начинающих, но в действительности, не представляет особых сложностей. Перед нами изображение установленного на плату чипа микроконтроллера. И все что нам нужно для начала это помигать светодиодом, потому, по аналогии с ардуино, если вы с ним работали, выбираем ножку, к которой присоединен светодиод, которым мы будем мигать. В нашем случае – это ножка PC13. Кликаем на ножку и выбираем GPIO_Output.

Вообще в stm32, в отличие от ардуино, где визуально пины делятся только на аналоговые и цифровые, пины разделены на группы, PA, PB, PC, PD. Это обусловлено тем, что stm имеет 32 разрядные регистры (GPIOA, GPIOB, GPIOC, GPIOD) для управления выходами, потому каждый регистр может управлять 16 выходами микроконтроллера, у микросхем старших поколений stm этих выходов очень много, потому было принято решение сгруппировать выходы, в соответствии с именами регистров.

Так же !ВНИМАНИЕ нужно включить возможность дебага ВНИМАНИЕ! микроконтроллера иначе, прошивка у вас зальется только 1 раз а затем вам потребуется выводить ваш контроллер из состояния легкого ступора, потому как ST-Link не будет его видеть. Если это произошло, вам прийдется потанцевать с бубном используя STM32 ST-Link Utility и так же переключив джампер Boot0 в положение 3.3v.

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

Stm32 может тактироваться от любого из 2х встроенных резонаторов, медленного и быстрого LSI 40KHz(по умолчанию) и HSI 8MHz, встроенных в сам чип и таким образом, обходиться без внешнего резонатора. Либо же использовать внешние резонаторы с частотой 4-16MHz (HSE), если вам нужно ускорить ваш камень или LSE c частотами 0-1000 KHz если вам нужно жертвовать скоростью ради энергопотребления.

Настройку частоты камня и переферии делаем во вкладке ClockConfiguration следующим образом, для этого просто задаем значение 72 в поле HCLK(MHz) и нажимаем enter. Затем соглашаемся с тем, что б STM32CubeMX настроил все за нас и нажимаем снова ок, готово. Внимание! Если на предыдушем шаге вы не вклчили RCC -> HSE -> Crystal/Ceramic Resonator, то вы не сможете установить значение 72 MHz и ваш камень может работать на частоте максимум 36MHz используя внутренний кварц.

На этом конфиг закончен, теперь необходимо создать проект, для этого выбираем кнопку в виде шестерни сверху:

В открывшемся окне заполняем поля:

Project Name, Project Location и ВНИМАНИЕ! выбираем IDE для которой будет создан наш проект, в нашем случае это TrueSTUDIO, если этого не сделать, то будет создан проект для IAR (EWARM).

Так же, я рекомендю переключиться на следующую вкладку (Code Generation) и выбрать в разделе Generated files пункт Generate peripheral initialization as a pair of .c/.h files per peripheral. Это позволит очистить ваш main файл проекта от инициализации перефирии, путем выноса ее в отдельные файлы. Я рекомендую делать так всегда.

Затем нажимаем ок и создаем проект. Если вы все сделали верно, то куб сразу же предложит вам скачать необходимые для вашего контроллера библиотеки и затем отрыть проект в Atollic TrueSTUDIO:

Все что нам необходимо, это добавить следующий код внутрь цикла while в нашем main и нажать debug, перед этим убедитесь, что оба режима бут отключены (желтые переключатели установлены, как на первом фото):

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);

HAL_Delay(100);

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

HAL_Delay(100);

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

Это моя первая статья про микроконтроллеры и первая статья по электронике в целом, не судите строго, надеюсь она будет интересна хотя бы кому-то. Если будет интерес с вашей стороны – дайте знать, буду писать про stm32 дальше.

Подготовка к работе

Перед началом работы рекомендуем ознакомиться с предыдущими остальными статьями нашего курса. Здесь мы не будем останавливаться на простейших действиях. Напомним только что работа будет производиться с использованием утилиты CubeMX, HAL-драйвера, IDE Keil uVision и платы Nucleo-F030R8. Обратите внимание, что программатор ST-Link, который входит в состав платы Nucleo, уже имеет на борту преобразователь USB-to-COM. Который в свою очередь уже подключен к основному контроллеру. Это значит, что нам не потребуется абсолютно ничего, кроме самой платы Nucleo-F030R8. Если вы используете какое-либо альтернативное аппаратное обеспечение, то необходимо найти преобразователь интерфейсов и подключить его к ПК и микроконтроллеру.

Настройка CubeMX

Чтобы включить UART, в самом простом случае, достаточно двух действий. Во-первых, на вкладке Pinout, надо включить модуль USART2 в асинхронном режиме, как это показано на картинке ниже: Во-вторых, на вкладке Configuration можно изменить настройки подключения. Мы изменили скорость обмена: Все. На этом настройка порта завершена. Можно сгенерировать проект и приступить к написанию кода.

Передача строки в ASCII

Самая простая функция для передачи дачи в асинхронном режиме — HAL_UART_Transmit(). Найти ее можно в файле драйвера stm32f0xx_hal_uart.c. Чуть позже мы разберем аргументы этой функции, а пока сконцентрируемся на результате. Итак, вызовем эту функцию в бесконечном цикле с задержкой и передадим в нее следующие параметры: Для приема сообщения на стороне компьютера можно использовать любую терминальную программу. Мы будем использовать программу Terminal 1.9b. Если все сделано верно, то после компиляции и прошивки контроллера, раз в секунду в COM-порт будет отправляться сообщение “Hello world!” с переводом строки. Обратите внимание на настройки терминальной программы — символы печатаются в ASCII-кодировке с переводом строки. Всего в функцию HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) требуется передать четыре аргумента:

  1. *huart — указатель на структуру данных, описывающую UART. Ранее мы не сталкивались с указателями и структурами данных. По сути, это набор переменных, объединенных для удобства под общим именем. Объявление этой переменной содержится в начале файла main.c, а описание этой структуры можно найти в файле stm32f0xx_hal_uart.h. Обратите внимание, что заполнение полей данных этой структуры происходит при инициализации UART в файле main.c. Унарный оператор * (в аргументе функции *huart) показывает то, что это указатель. То есть в эту функцию необходимо передать не саму структуру данных, а ее адрес в памяти. Получить адрес структуры данных (или обычной переменной) можно при помощи унарного оператора &. Таким образом, при вызове функции HAL_UART_Transmit(), в качестве первого параметра следует указать &huart2.
  2. *pData — аргумент-указатель на данные, которые необходимо передать. Словами “Hello world!n” мы создаем массив из элементов типа char. А массив и указатели в Си это, фактически, одно и то же. То есть передавая его в функцию, не надо писать оператор &. Запись (uint8_t*) необходима для преобразования типа данных. Без нее тоже будет работать (так как char и uint8_t это одно и то же), но вы увидите предупреждение.
  3. Size — количество передаваемых байт. В нашем примере передается 13 символов. В том числе символ перевода строки “n”.
  4. Timeout — максимальное время работы функции. Скорее всего функции сможет выполнить передачу гораздо быстрее, но, если что-то пойдет не так, через одну секунду она прекратит попытки.

Таким образом у нас получилась запись HAL_UART_Transmit(&huart2, (uint8_t*)”Hello world!”, 13, 1000);.

Дополнительные примеры

В реальных системах очень часто возникает обмена данными между различными устройствами. Рассмотренная функция подходит для того, чтобы просто передавать любые данные в виде массива или единичной переменной. Для примера создадим переменную count. В цикле, раз в секунду, мы будем ее увеличивать и отправлять текущее значение в UART. В функцию мы передаем указатель на переменную, то есть &count. И указываем, что требуется передать один байт. В терминале, если включить отображение данных в шестнадцатеричном формате, то в выводе мы увидим следующее: Также иногда требуется передать значение переменной в формате ASCII. Наиболее простой способ, на наш взгляд, показан ниже: Обратите внимание на использование функции sprintf(). Эта функция позволяет отпечатать в массив элементы с форматным выводом аргументов функции и возвращает количество отпечатанных символов. Тонкости форматного вывода, в качестве справочной информации, описаны в книге Б. Кернигана и Д. Ричи “Язык программирования Си”. Другими словами, одним действием мы передали в функцию массив, заполнили его данными и определили количество элементов. В терминальной программе при этом мы увидим как раз в секунду увеличиваются значения в формате ASCII.

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

Ссылки на остальные статьи цикла можно найти здесь. Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.

Метки: COM-порт, HAL, STM32, transmit, UART, передача Просмотров: 28405

В рубрике «Плата Stm32f103c8t6 Arm Stm32» в Москве найдено 193 предложения Сортировать: Актуальности Названию Цене Показать по: 20 30 40 50 Плата микроконтроллер STM32F103C8T6 ARM STM32 990 руб. есть в наличии Отладочная плата с микроконтроллером CKS32F103C8T6 (аналог STM32) 150 руб. есть в наличии STM32-P103, Отладочная плата на базе STM32F103 с ядром Cortex-M3 3 800 руб. есть в наличии Core407V, Отладочная плата на базе STM32F407VET6 (Cortex-M4), I/O, JTAG/SWD отладочный интерфейс 2 470 руб. есть в наличии Отладочная плата с микроконтроллером STM32 (STM32L052K8T6) 790 руб. есть в наличии STM32F769I-DISCO, Отладочная плата на базе MCU STM32F769NIH6 (ARM Cortex-M7), ST-LINK/V2-1, 4″ LCD-TFT, Arduino 11 600 руб. есть в наличии STM32L0538-DISCO, Отладочная плата на базе MCU STM32L053C8T6 (ARM Cortex-M0+), ST-LINK/V2-1, 2.04″ E-Ink, touch sensor 3 500 руб. есть в наличии STM32F072B-DISCO, Отладочная плата на базе MCU STM32F072RBT6 (ARM Cortex-M0), ST-LINK/V2, gyroscope, touch sensor 1 620 руб. есть в наличии STM32L100C-DISCO, Отладочная плата на базе MCU STM32L100RCT6 (ARM Cortex-M3), ST-LINK/V2 870 руб. есть в наличии STM32F411E-DISCO, Отладочная плата на базе MCU STM32F411VET6 (ARM Cortex-M4), ST-LINK/V2-1, 9-DOF, DAC 2 200 руб. есть в наличии STM32F412G-DISCO, Отладочная плата на базе MCU STM32F412ZGT6 (ARM Cortex-M4), ST-LINK/V2-1, 1.54″ LCD-TFT, Arduino 4 600 руб. есть в наличии STM32L152C-DISCO, Отладочная плата на базе MCU STM32L152RBT6 (ARM Cortex-M3), ST-LINK/V2, LCD 24×4 1 620 руб. есть в наличии STM8S-DISCOVERY, Отладочная плата на базе MCU STM8S105C6T6 (STM8S), ST-LINK 1 120 руб. есть в наличии STM32F0308-DISCO, Отладочная плата на базе MCU STM32F030R8T6 (ARM Cortex-M0), ST-LINK/V2 1 100 руб. есть в наличии STM32F469I-DISCO, Отладочная плата на базе MCU STM32F469NIH6 (ARM Cortex-M4), ST-LINK/V2-1, 4″ LCD-TFT, Arduino 8 300 руб. есть в наличии STM32F413H-DISCO, Отладочная плата на базе MCU STM32F413ZHT6 (ARM Cortex-M4), ST-LINK/V2-1, LCD-TFT, Arduino, Wi-Fi 10 700 руб. есть в наличии Отладочная плата с микроконтроллером STM32 (STM32F407VET6) 750 руб. есть в наличии Отладочная плата с микроконтроллером STM32 (STM32F407VET6) CH2 790 руб. есть в наличии Отладочная плата с микроконтроллером STM32 (STM32F103C8T6), black pill 250 руб. есть в наличии Плата разработчика на STM32F103C8T6 Cortex-M3 330 руб. есть в наличии Микроконтроллер RISC NXP , QFP STM32F207IGT6 1 050 руб. есть в наличии STM8S103F3P6 отладочная плата 115 руб. есть в наличии Микроконтроллер STM32F100C8T6 105 руб. есть в наличии Микроконтроллер STM8S103K3T6C 42 руб. есть в наличии микроконтроллер RISC NXP , QFP STM32F373C8T6 324 руб. есть в наличии микроконтроллер RISC NXP , QFP STM32F042C6T6 174 руб. есть в наличии Отладочная плата на STM32F030F4P6 140 руб. есть в наличии Отладочная плата на STM32F103C8T6 240 руб. есть в наличии STM32F3348-DISCO, Отладочная плата на базе MCU STM32F334C8T6 (ARM Cortex-M4), ST-LINK/V2-1 2 250 руб. есть в наличии STM32F407G-DISC1, Отладочная плата на базе MCU STM32F407VGT6 (ARM Cortex-M4), ST-LINK/V2-A, accelerometer, DAC 2 800 руб. есть в наличии Показать еще

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

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

О радостях и трудностях первого знакомства с STM32 после AVR. Как я реализовывал простейшую задачу — передачу данных на ПК. image

Имея некий опыт работы с AVR, хочется сравнить приехавшие контроллеры (которые по отдельности стоят 1.7$/шт) с близкими к ним по цене ATMEGA328 (1.4 $/шт).

ATMEGA328 STM32F103C8T6 Выигрыш, раз
Flash, кБ 32 64 2
ОЗУ, кБ 2 20 10
Максимальная частота, МГц 20 72 3.6
Скорость АЦП, kSPS 15 2*1000 (можно разогнать) 133

На фоне роста показателей производительности в 10-100 раз, Flash увеличилась всего в 2 раза. Причём, эти 64 кБ расходуются чуть ли не быстрей, чем 32 на AVR. Логично применять такие контроллеры там, где нужна высокая производительность, но нет кодоёмких алгоритмов… например, осциллограф.

Внешний вид отладочных плат: image Слева направо:

  • Arduino UNO (ATmega328P), 3.59$;
  • Наша плата, которую будем мучить (STM32F103C8T6), 4.97$;
  • Ещё одна отладочная плата на STM32F103C8T6, 3.92$;
  • Arduino Nano (ATmega328P), 2.23 — 2.56$.

Чем программировать

Сред программирования STM32 великое множество — IAR, Keil, Coocox… поначалу кажется, что это хорошо и точно найдёшь что-то подходящее. Потом приходит понимание как такой зоопарк образовался. Просто кто-то сделал не очень хорошую IDE. Остальные на это посмотрели и решили, что они могут сделать лучше. И сделали. В чём-то получилось лучше, в чём-то хуже. Почитав обзоры и попробовав IAR, остановился на Coocox.

Есть ещё одна программа — STM32CubeMX. Дело в том, что периферии в STM32 гораздо больше, чем в AVR. Инициализировать её гораздо сложнее. STM32CubeMX позволяет выбрать контроллер, потыкать мышкой и сгенерировать код инициализации. Даже если мы не хотим использовать этот сгенерированный код, в STM32CubeMX удобно посмотреть распиновку и схему тактирования, подобрать делители, множители и вручную их прописать в своём коде! Очень рекомендую всем начинающим!

Читайте также:  Аппарат для сварки пластиковых труб aquafit

STMStudio — программа позволяющая в реальном времени наблюдать значения переменных в МК.

В качестве программатора решил использовать дешёвый ST-Link V2 за 2.6$. Подключается всё очень просто. Берём распиновку JTAG, image

смотрим рисунок на ST-Link,

и соединяем выводы (ST-LINK -> JTAG):

  • GND -> Pin 20;
  • 3.3V -> Pin 1;
  • RST -> Pin 15;
  • SWCLC -> Pin 9;
  • SWDIO -> Pin 7.

Запускаем CoIDE, пишем

компилируем, прошиваем… и всё сразу заработало! Безо всяких танцев с бубном! Даже внутрисхемный отладчик заработал! Запускаем STMStudio — и она работает. Строит графики переменных во время работы МК! На плате есть перемычки, но ничего переключать, чтобы запрограммировать/запустить МК не надо! Прям как с Arduino! Ну не может же быть всё так хорошо… да не может.

Начинаем делать осциллограф

  1. Всё это в реальном времени передаётся на ПК по USB и там принимается решение о том, что с этим делать (запомнить, построить график, как-то обработать, . );
  2. После каждого преобразования происходит прерывание. В обработчике прерываний мы принимаем решение: ждать ещё или начать запоминать данные (например, хотим чтобы сигнал на экране начинался с некого уровня, как в аналоговом осциллографе, или чуть раньше этого уровня). В этом же обработчике складируем данные в буфер и по его заполнению отправляем на ПК.

Оба эти варианта реализовать не удалось. Первый потому, что я не смог запустить USB. Вернее смог только сгенерировав проект в STM32CubeMX. Но после экспорта его в CoIDE потребовалось перемычками менять загрузчик для программирования/работы, что не удобно. Поэтому от этого варианта отказался. Ну и вдобавок скорость USB всего 12 МБит/с. Данные на высокой скорости в реальном времени всё равно не влезут. Чтобы хоть как-то передавать данные на комп, подключил преобразователь USB UART купленный в своё время для программирования Arduino Pro Mini.

Второй вариант накрылся т.к. обработчик прерывания работает дольше, чем АЦП. Скорость ограничилась всего 340-500 kSPS, что в разы меньше ожидаемой.

Единственным рабочим высокоскоростным вариантом оказался такой: АЦП непрерывно работают, когда нам нужен замер, включаем DMA, ждём наполнения буфера, отключаем DMA и потихоньку передаём данные на ПК через USART. Этот вариант превзошёл все ожидания. МК можно разогнать так, что получается 9 MSPS с двух АЦП! Т.е. в 4.5 раза больше, чем по документации! При этом достаточно комфортно наблюдать сигнал частотой до 1 МГц. По сравнению с тем, что удалось достичь раньше на Arduino (10 kSPS) результат очень хороший — скорость увеличил в 900 раз!

Однако, с разгоном не всё так радостно. В дальнейшем, чтобы мог работать USB, частоту придётся снизить в 16/9 = 1.8 раз и тогда получится всего 5 MSPS.

Пока пытался разобраться с USB и прочей периферией осознал существенный недостаток этих контроллеров — очень мало информации в интернете. Если на AVR есть куча всего, то тут найти пример одновременной работы двух АЦП в режиме Fast interleaved оказалось не так просто.

В качестве генератора сигналов для теста осциллографа был выбран… Arduino UNO! Не потому что он хороший или ещё что… просто это очень быстро.

Читайте также:  Алмаг 01 схема электрическая принципиальная с описанием

Подключить USB + 1 проводок (чтобы 3.3 вольтный STM32 не умер от 5 вольтного сигнала, сигнал подан через резистор в 2 кОм) и готово!

Получилось следующее (под каждым изображением фотография этого же сигнала на экране аналогового осциллографа): Период сигнала 0.9 мкс. 1 замер = 10 пикселей. На осциллографе 1 деление = 0.5мкс.

Период сигнала 10 мкс. 1 замер = 5 пикселей. На осциллографе 1 деление = 2мкс. Верхушки обрублены из-за превышения сигналом опорного напряжения АЦП.

Что дальше

В планах:

  1. Победить USB, чтобы отказаться от преобразователя USB USART;
  2. Доделать аналоговую часть, чтобы диапазон входных напряжений был не 0 — 3.3 В, а более приличным;
  3. Сделать многоканальный режим;
  4. Реализовать управление с ПК;
  5. Сделать законченное устройство в корпусе.

В заключение обращаю внимание на два вскрывшихся недостатка STM32 по сравнению с AVR:

  1. Повышенный расход Flash памяти;
  2. Сложная инициализация периферии, которая усугубляется нехваткой материалов.
Производитель STMicroelectronics
Серия STM32F103C8
Модель STM32F103C8T6

Mainstream Performance line, ARM Cortex-M3 MCU with 64 Kbytes Flash, 72 MHz CPU, motor control, USB and CAN

Datasheets

Поставщик Производитель Цена
T-electron STMicroelectronics 92 руб.
Берёзка Электронные Компоненты STMicroelectronics от 100 руб.
ЗУМ-СМД STMicroelectronics 103 руб.
Ким STMicroelectronics 206 руб.

Подробное описание

The STM32F103xx medium-density performance line family incorporates the high-performance ARM Cortex -M3 32-bit RISC core operating at a 72 MHz frequency, high-speed embedded memories (Flash memory up to 128 Kbytes and SRAM up to 20 Kbytes), and an extensive range of enhanced I/Os and peripherals connected to two APB buses.

All devices offer two 12-bit ADCs, three general purpose 16-bit timers plus one PWM timer, as well as standard and advanced communication interfaces: up to two I2Cs and SPIs, three USARTs, an USB and a CAN.

The devices operate from a 2.0 to 3.6 V power supply. They are available in both the –40 to +85 °C temperature range and the –40 to +105 °C extended temperature range. A comprehensive set of power-saving mode allows the design of low-power applications. The STM32F103xx medium-density performance line family includes devices in six different package types: from 36 pins to 100 pins. Depending on the device chosen, different sets of peripherals are included, the description below gives an overview of the complete range of peripherals proposed in this family. These features make the STM32F103xx medium-density performance line microcontroller family suitable for a wide range of applications such as motor drives, application control, medical and handheld equipment, PC and gaming peripherals, GPS platforms, industrial applications, PLCs, inverters, printers, scanners, alarm systems, video intercoms, and HVACs.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий