Начинаем изучать микроконтроллеры на примере stm32f030f4p6

Библиотека самотестирования Class B для микроконтроллеров STM32

С октября 2007 года бытовые приборы необходимо сертифицировать на соответствие стандарту EN/IEC60335-1. Не следует позволять этому недавнему требованию к свидетельству безопасности замедлять разработку приложений. Модули самодиагностики для STM32 упрощают сертификацию бытовой техники на соответствие нормам EN/IEC60335-1 Class B (безопасность функционирования), предлагая полный набор функций самотестирования, которые готовы к интеграции в приложение и сертифицированы VDE — всемирным институтом тестирования программного обеспечения.

Библиотека для STM32 сертифицирована VDE 12 октября 2007 года. Микроконтроллеры ST одними из первых 32-разрядных микроконтроллеров прошли сертификацию. Таким образом, электронные устройства на базе микроконтроллеров ST также могут быть легко сертифицированы.

Библиотека поддерживает тестирование следующих компонентов микроконтроллера:

  • Регистры CPU;
  • Программный счетчик CPU;
  • Вызов и обработка прерываний;
  • Тактовый генератор;
  • ПЗУ и ОЗУ;
  • Внутренняя адресация;
  • Внутреннее прохождение данных;
  • Внешняя адресация;
  • Внешний обмен данными;
  • Временные интервалы;
  • Периферия ввода/вывода;
  • Аналоговые АЦП и ЦАП;
  • Аналоговый мультиплексор.

Настройка порта GPIO

Итак, с регистрами разобрались, настало время практики. Все примеры в этой статье для микроконтроллера STM32F103C8. В моем распоряжении есть вот такая отладочная плата:

На ней установлен кварцевый резонатор на 8 МГц и светодиод на порту PB12. Вот с помощью этого светодиода мы и устроим Hello, World!

Задача ясна: настраиваем PB12 на выход в режиме push-pull и с помощью регистра ODR дергаем 12-й пин порта GPIOB туда-сюда! Но мы забыли об одной маленько детали: RCC. Дело в том, что по-умолчанию после сброса микроконтроллера все периферийные модули отключены от источника тактового сигнала, в том числе и GPIO. А подать тактирование можно с помощью регистров RCC. В 3-ей части я про это говорил. Для начала нужно определить, к какой шине у нас подключен GPIOB. Открываем даташит на микроконтроллер, ищем вот эту таблицу:

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

GPIOB у нас подключен к шине APB2. Идем в Reference manual, открываем раздел про RCC, переходим к пункту 7.3.7 APB2 peripheral clock enable register (RCC_APB2ENR). С помощью этого регистра можно подать тактовый сигнал на устройства шины APB2:

Рис. 9. Регистр RCC_APB2ENR

В регистре RCC_APB2ENR много флагов для разной периферии, в том числе и для нашего GPIOB, флаг называется IOPBEN. Перед началом инициализации PB12 нам надо установить этот бит в единицу.

Поехали программировать! За основу возьмем проект из 2-й части: https://github.com/DiMoonElec/stm32f103c8_empty_project. Создадим функцию инициализации порта:

void PortInit(void)
{
}

GPIOB

RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; //Включаем тактирование порта GPIOB

PB12CRH:

GPIOB->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12); //для начала все сбрасываем в ноль
  
//MODE: выход с максимальной частотой 2 МГц
//CNF: режим push-pull
GPIOB->CRH |= (0x02 << GPIO_CRH_MODE12_Pos) | (0x00 << GPIO_CRH_CNF12_Pos);
void PortInit(void)
{
  RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; //Включаем тактирование порта GPIOB
  
  GPIOB->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12); //для начала все сбрасываем в ноль
  
  //MODE: выход с максимальной частотой 2 МГц
  //CNF: режим push-pull
  GPIOB->CRH |= (0x02 << GPIO_CRH_MODE12_Pos) | (0x00 << GPIO_CRH_CNF12_Pos);
}

ODRPB12

void PortSetHi(void)
{
  GPIOB->ODR |= (1<<12);
}
void PortSetLow(void)
{
  GPIOB->ODR &= ~(1<<12);
}

GPIOB->ODR |= (1<<12)STM32

void PortSetHi(void)
{
  GPIOB->BSRR = (1<<12);
}

void PortSetLow(void)
{
  GPIOB->BRR = (1<<12);
}

 (1<<12)0x1000BSRRBRRрис. 5, 6

Ни и простой main() для проверки:

void main()
{
  int i;
  PortInit();
  
  for(;;)
  {
    PortSetHi();
    for(i=0; i<0x40000; i++)
      ;

    PortSetLow();
    for(i=0; i<0x40000; i++)
      ;
  }
}

BP12«Hello, World!»

Давайте теперь настроим какой-нибудь вывод порта, например PB15, на вход с подтяжкой к питанию. При подключении PB15 к минусу, у нас будет зажигаться светодиод. Задача ясна, преступаем к реализации. В PortInit() добавим пару строк:

/// Настраиваем PB15 на вход с подтяжкой к питанию ///
GPIOB->CRH &= ~(GPIO_CRH_MODE15 | GPIO_CRH_CNF15);
//MODE: вход, оставляем в нуле
//CNF: вход с pull-up / pull-down
GPIOB->CRH |= (0x00 << GPIO_CRH_MODE15_Pos) | (0x02 << GPIO_CRH_CNF15_Pos);

GPIOB->ODR |= (1<<15); //Включаем подтяжку вверх

PB12MODE/CNFODRODRCNF=10Input with pull-up / pull-downODRReference manual

Рис. 10. Таблица конфигурации порта

Функция PortInit() приобретает такой вид:

void PortInit(void)
{
  RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; //Включаем тактирование порта GPIOB
  
  /// Настраиваем PB12 на выход ///
  GPIOB->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12); //для начала все сбрасываем в ноль
  
  //MODE: выход с максимальной частотой 2 МГц
  //CNF: режим push-pull
  GPIOB->CRH |= (0x02 << GPIO_CRH_MODE12_Pos) | (0x00 << GPIO_CRH_CNF12_Pos);
  
  /// Настраиваем PB15 на вход с подтяжкой к питанию ///
  GPIOB->CRH &= ~(GPIO_CRH_MODE15 | GPIO_CRH_CNF15);
  //MODE: вход, оставляем в нуле
  //CNF: вход с pull-up / pull-down
  GPIOB->CRH |= (0x00 << GPIO_CRH_MODE15_Pos) | (0x02 << GPIO_CRH_CNF15_Pos);
  
  GPIOB->ODR |= (1<<15); //Включаем подтяжку вверх
}

PB15IDR

int ReadPort(void)
{
  if(GPIOB->IDR & (1<<15))
    return 1;
  return 0;
}

IDR

В этом случае main() будет выглядеть вот так:

void main()
{
  PortInit();
  
  for(;;)
  {
    if(ReadPort())
      PortSetHi();
    else
      PortSetLow();
  }
}

stm32f103c8PB12PB15PP12PB15PB15ReadPort()PB12

На этом все, продолжение следует! Продолжение.

1.6. Работа с аналоговыми сигналами

На борту содержится три АЦП и два одноканальных ЦАП.

АЦП имеет хорошую разрешающую способность 12 бит и очень высокую скорость преобразования, составляющую 2,4 МСемпла в одиночном режиме и 7,2 МСемпла – в тройном режиме. Максимально доступное число аналоговых каналов – 24. Как и в большинстве современных МК, присутствует генератор опорного напряжения. Гибкая система настроек встроенного аналогового мультиплексора позволяет задавать любые последовательности преобразования аналоговых каналов (за исключением одновременного преобразования одного канала на нескольких АЦП). Настройки АЦП позволяют производить однократные и циклические измерения. Для проведения преобразования на максимальных скоростях необходимо соблюдать диапазон напряжения питания 2,4…3,6 В. При снижении напряжения до 1,8 (1,7) В скорость преобразования снижается до 1,2 мегасемплов. Для контроля внутренней температуры микроконтроллера встроен температурный датчик. На его выходе формируется напряжение в зависимости от окружающей температуры. Выход датчика через мультиплексор подключается к АЦП. Используя температурный датчик, можно измерять температуру от -40 до 125°C с точностью ±1,5°C.

ЦАП обладает разрешающей способностью 12 бит, преобразование возможно в 8/12-битовом формате с выравниванием этого результата по левому или правому краям. Так как ЦАП содержит два канала, то есть возможность формирования стереосигнала. Доступна функция автоматической генерации шумового сигнала с меняющейся амплитудой или треугольного сигнала.

Обзор продуктовых линеек

STM32L

Семейство STM32 имеет широкий ассортимент изделий, различающихся по объему памяти, производительности, потреблению энергии и другим характеристикам.

Серии STM32F-1, STM32F-2 и STM32L полностью совместимы. Каждая из серий имеет десятки микросхем, которые можно без труда поменять на другие изделия. STM32F-1 была первой линейкой, ее производительность была ограничена. Из-за этого по характеристикам контроллеры быстро догнали изделия семейства Stellaris и LPC17. Позднее была выпущена STM32F-2 с улучшенными характеристиками – тактовая частота достигала 120 МГц. Отличается высокой процессорной мощностью, которая достигнута благодаря новой технологии производства 90 нм. Линейка STM32L представлена моделями, которые изготовлены по специальному технологическому процессу. Утечки транзисторов минимальны, благодаря чему приборы показывают лучшие значения.

Важно отметить, что контроллеры линейки STM32W не имеют pin-to-pin совместимости с STM32F-1, STM32F-2 и STM32L. Причина заключается в том, что линейку разрабатывала компания, которая предоставила радиочастотную часть

Это наложило ограничения на разработку для компании ST.

STM32F100R4

Микросхема STM32F100R4 имеет минимальный набор функций. Объем флэш памяти составляет 16 Кбайт, ОЗУ – 4 Кбайт, тактовая частота составляет 12 МГц. Если требуется более быстрое устройство с увеличенным объемом флэш-памяти до 128 Кбайт, подойдет STM32F101RB. USB интерфейс имеется у изделия STM32F103RE. Существует аналогичное устройство, но с более низким потреблением – это STM32L151RB.

Периферийные модули

Контроллер последовательного интерфейса SCI

Встроенный контроллер последовательного интерфейса имеет два канала обмена данными SC1 и SC2. Канал SC1 можно сконфигурировать для операций SPI (ведущий или ведомый), TWI (только ведущий) или UART, а канал SC2 — для операций SPI или TWI.

Аналого-цифровой преобразователь (АЦП)

АЦП STM32W108 является дельта-сигма преобразователем первого порядка со следующими возможностями:

  • Разрешение до 12 бит;
  • Время преобразования 5,33 мкс (188 кГц);
  • Дифференциальное и асимметричное преобразование от шести внешних и четырех внутренних источников;
  • Два диапазона входного напряжения (в дифференциальном режиме): от -VREF до +VREF и от -VDD_PADS до +VDD_PADS;
  • Выбор внутреннего или внешнего источника опорного напряжения VREF: внутренний VREF (может быть доступен для внешней схемы);
  • Цифровая подстройка напряжения смещения и коэффициента усиления;
  • Специализированный канал DMA с режимами однократного или непрерывного преобразования и записью результатов измерения непосредственно в RAM, минуя CPU.

Поскольку модуль АЦП поддерживает работу, как в несимметричном, так и в дифференциальном режиме, его входы всегда работают в дифференциальном режиме. Несимметричное преобразование выполняется при подключении одного из дифференциальных входов к источнику с напряжением VREF/2, в то время как полностью дифференциальные операции используют оба входа.

1.2. Общие характеристики семейства

Общие характеристики МК семейства:

  • ARM 32-bit Cortex-M4 CPU;
  • Частота тактирования 168МГц, 210 DMIPS/1.25 DMIPS/МГц (Dhrystone 2.1);
  • Поддержка DSP-инструкций;
  • Новая высокопроизводительная AHB-матрица шин;
  • До 1 Mбайта Flash-памяти;
  • До 192 + 4 кбайт SRAM-памяти;
  • Напряжение питания 1,8…3,6В (POR, PDR, PVD и BOR);
  • Внутренние RC-генераторы на 16МГц и 32кГц (для RTC);
  • Внешний источник тактирования 4…26МГц и для RTC – 32,768кГц;
  • Модули отладки SWD/JTAG, модуль ETM;
  • Три 12-бит АЦП на 24 входных канала (скорость до 7,2 мегасемплов, температурный датчик);
  • Два 12-битных ЦАП;
  • DMA-контроллер на 16 потоков с поддержкой пакетной передачи;
  • 17 таймеров (16 и 32 разряда);
  • Два сторожевых таймера (WDG и IWDG);
  • Коммуникационные интерфейсы: I2C, USART (ISO 7816, LIN, IrDA), SPI, I2S;
  • CAN (2,0 B Active);
  • USB 2.0 FS/HS OTG;
  • 10/100 Ethernet MAC (IEEE 1588v2, MII/RMII);
  • Контроллер SDIO (карты SD, SDIO, MMC, CE-ATA);
  • Интерфейс цифровой камеры (8/10/12/14-битные режимы);
  • FSMC-контроллер (Compact Flash, SRAM, PSRAM, NOR, NAND и LCD 8080/6800);
  • Аппаратный генератор случайных чисел;
  • Аппаратное вычисление CRC, 96-битный уникальный ID;
  • Модуль шифрования AES 128, 192, 256, Triple DES, HASH (MD5, SHA-1), HMAC;
  • Расширенный температурный диапазон -40…105°C.

Рис. 2. Структура микроконтроллеров STM32F4xx

Запуск в эмуляторе

На эмуляторе отлаживаться гораздо проще, поэтому сначала убедимся, что библиотека работает на qemu. В качестве эмулируемой платформы я выбрал Integrator/CP, т.к. во-первых, это тоже ARM, а во-вторых, Embox поддерживает вывод графики для этой платформы.

В Embox есть механизм для сборки внешних библиотек, с его помощью добавляем OpenCV как модуль (передав все те же опции для «минимальной» сборки в виде статических библиотек), после этого добавляю простейшее приложение, которое выглядит так:

Собираем систему, запускаем — получаем ожидаемый вывод.

Следующий шаг — запустить какой-нибудь пример, лучше всего какой-нибудь стандартный из тех, что предлагают сами разработчики у себя на сайте. Я выбрал детектор границ Кэнни.

Пример пришлось немного переписать, чтобы отображать картинку с результатом напрямую во фрэйм-буффер. Сделать это пришлось, т.к. функция умеет отрисовывать изображения через интерфейсы QT, GTK и Windows, которых, само собой, в конфиге для STM32 точно не будет. На самом деле, QT тоже можно запустить на STM32F7Discovery, но об этом будет рассказано уже в другой статье 🙂

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

Оригинальная картинка

Результат

Прошивка STM32 с помощью USB-Uart переходника под Linux (Ubuntu)

Устанавливаем stm32flash

http://launchpadlibrarian.net/188294676/stm32flash_0.4-2_i386.debstm32flashhttps://launchpad.net/ubuntu/wily/i386/stm32flash/0.4-2

Если используем USB-UART переходник, имя порта буде примерно такое /dev/ttyUSB0

Получить информацию о чипе

Результат:

stm32flash 0.4

http://stm32flash.googlecode.com/

Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB

Пишем в чип

Результат:

stm32flash 0.4

http://stm32flash.googlecode.com/

Using Parser : Raw BINARY
Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote and verified address 0x08012900 (100.00%) Done.

Starting execution at address 0x08000000... done.

Описание работы USB

  • USB устройства подключаются к Хосту (чаще всего, это — компьютер). Хост — главный, он всем управляет.
  • USB устройство не может быть инициатором передачи данных. То есть, оно сидит и молчит, пока его не спросят. Спросили или прислали данные, — оно ответило или приняло данные и замолчало.
  • USB устройство имеет уникальный идентификатор. Каждое USB устройство может иметь несколько конечных точек, каждая из которых имеет уникальный адрес. Именно через конечные точки передаются данные или команды.
  • USB устройство имеет Дескриптор. Это массив данных, в котором содержится описание устройства. Благодаря дескриптору, операционная система получает информацию о USB устройстве и использует для общения с ним соответствующий драйвер.
  • Хост идентифицирует USB-устройство по ID вендора и ID продукта (Vendor ID — VID и Product ID — PID)

http://microtechnics.ru/osnovy-interfejsa-usb/http://webhamster.ru/mytetrashare/index/mtb0/1410507212bb4zf8gacjhttp://radiokot.ru/circuit/digital/pcmod/63/http://microtechnics.ru/mikrokontroller-stm32-i-usb/http://microtechnics.ru/stm32-peredacha-dannyx-po-usb/

Некоторые настройки IDE и параметры компилятора

Repository

View -> Repository

Здесь мы выбираем библиотеки, которые необходимы для нашего проекта. При этом IDE копирует в папку stm_lib вашего проекта нужные файлы.

Закладка Compile

в этой закладке устанавливаются ключи компилятора

Мы сюда еще будем возвращаться, а пока обратим внимание на поле Optimization. Это поле задает параметр оптимизации для компилятора

Об оптимизации будет отдельный разговор, пока Вам нужно усвоить, что оптимизация Optimizate Size (-Os) максимально уменьшает объем скомпилированных программ. Но при этом компилятор может выбросить (оптимизировать) некоторые операции, и программа может работать не так, как Вам бы хотелось. Поэтому, на первых этапах, я не рекомендую использовать этот метод оптимизации. Установите Optimizate (-O1).

Закладка Link

В этой закладке пока нас интересует только поле Library и Linked Libraries. Если Вы будете использовать стандартные библиотеки С, например библиотеку математических функций math Вам нужно будет выбрать «Use base C Library». Если этого не сделать, то компилятор выдаст ошибку.

Здесь указываются куда складывать скомпилированные файлы и в каких форматах.

Пока в ней мы ничего делать не будем.

Закладка Debugger

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

Перечень проектов

Example_First_Programm — GPIO. Первая программа. Мигание светодиодом

Example_GPIO — GPIO. Пример работы с входами и выходами

Example_StepMotor — GPIO. Пример работы с шаговым двигателем 28BYJ-48

Example_Nokia5110 — GPIO. Remap. Пример работы с выходами

Example_WG12864A — GPIO. Пример работы с LCD дисплеем WG12864A (KS0108/KS0107)

Example_ADC — ADC. Простой пример работы с АЦП

Example_ADC_DMA — ADC. Работа с АЦП с использованием DMA

Example_ADC_Injected — ADC. Работа с АЦП с настройкой Injected каналов

Example_ADC_Temperature — ADC. Использование встроенного термометра

Example_ADC_Watchdog — ADC. Аналоговый Watchdog

Example_Sonar — EXTI. Пример работы с сонаром HC-SR04

Example_USART1 — USART. Пример простого терминала

Example_USART_DMA — USART. Отправка данных через последовательный порт с помощью DMA

Example_DFPlayerMini — USART. Пример работы с MP3 плеером DFPlayer Mini. Функция произнесения числа

Example_SysTick — Таймер. Системный таймер SysTick. Задержка на SysTick

Example_TIM_CLK — Таймер. Генерирование прерывания через равные промежутки времени

Example_TIM_Time — Таймер. Измерение времени между двумя событиями

Example_PPM — Таймер. Захват сигнала

Example_Encoder — Таймер. Работа с энкодером

Example_Encoder_IT — Таймер. Работа с энкодером

Example_PWM_LED — Таймер. PWM. Управление яркостью светодиода

Example_PWM_RGB — Таймер. PWM. Управление цветом RGB светодиода

Example_PWM_Servo — Таймер. PWM. Управление сервоприводом

Example_PWM_Sound — Таймер. PWM. Генерирование звука

Example_RTC — RTC. Пример работы с часами реального времени

Example_BKP — BKP. Пример работы с регистрами Backup registers

Example_FLASH — FLASH. Пример сохранения настроек во FLASH память

Example_Watchdog — Watchdogs. Пример использование IWDG и WWDG

Example_I2C_Master — I2C. Работа с шиной I2C на примере датчика атмосферного давления BMP280

Example_I2C_Slave — I2C. Работа с шиной I2C в качестве Slave устройства

Example_BMP280 — I2C. Пример работы с датчиком атмосферного давления BMP280

Example_MS5611 — I2C. Пример работы с датчиком атмосферного давление MS5611

Example_USB_Virtual_Com_Port — USB. Пример работы с USB. Виртуальный последовательный порт

Example_USB_Keyboard — USB. Пример работы с USB. Эмуляция клавиатуры и мышки

Example_USB_Mass_Storage — USB. Пример работы с USB. STM32F103 в качестве Mass Storage Device

Example_PWR_Sleep — PWR. Использование энергосберегающего режима SLEEP

Example_PWR_Stop — PWR. Использование энергосберегающего режима STOP

Example_PWR_Standby — PWR. Энергосберегающий режим Standby. Пробуждение от Wake Up Pin

Example_PWR_Standby_RTC — PWR. Энергосберегающий режим Standby. Пробуждение от RTC

Example_Bootloader — Bootloader. Пример собственного загрузчика

Example_BLDC — Управление бесколлекторным двигателем с датчиками Холла (Sensored Brushless)

Example_PMSM — Управление PMSM с датчиками Холла с помощью STM32

Смотри также:

  • 1. STM32. Программирование STM32F103. Тестовая плата. Прошивка через последовательный порт и через ST-Link программатор
  • 2. STM32. Программирование. IDE для STM32
  • 3. STM32. Программирование STM32F103. GPIO
  • 4. STM32. Программирование STM32F103. Тактирование
  • 5. STM32. Программирование STM32F103. USART
  • 6. STM32. Программирование STM32F103. NVIC
  • 7. STM32. Программирование STM32F103. ADC
  • 8. STM32. Программирование STM32F103. DMA
  • 9. STM32. Программирование STM32F103. TIMER
  • 10. STM32. Программирование STM32F103. TIMER. Захват сигнала
  • 11. STM32. Программирование STM32F103. TIMER. Encoder
  • 12. STM32. Программирование STM32F103. TIMER. PWM
  • 13. STM32. Программирование STM32F103. EXTI
  • 14. STM32. Программирование STM32F103. RTC
  • 15. STM32. Программирование STM32F103. BKP
  • 16. STM32. Программирование STM32F103. Flash
  • 17. STM32. Программирование STM32F103. Watchdog
  • 18. STM32. Программирование STM32F103. Remap
  • 19. STM32. Программирование STM32F103. I2C Master
  • 20. STM32. Программирование STM32F103. I2C Slave
  • 21. STM32. Программирование STM32F103. USB
  • 22. STM32. Программирование STM32F103. PWR
  • 23. STM32. Программирование STM32F103. Option bytes
  • 24. STM32. Программирование STM32F103. Bootloader
  • STM32. Скачать примеры
  • System Workbench for STM32 Установка на Ubuntu
  • Keil uVision5 – IDE для STM32
  • IAR Workbench – IDE для STM32
  • Управление бесколлекторным двигателем постоянного тока (BLDC) с помощью STM32
  • Управление PMSM с помощью STM32

Библиотека ST ZigBee Pro

Компания STMicroelectronics предоставляет своим клиентам библиотеку ST ZigBee Pro, которая совместно с библиотекой для стандартной периферии позволяет реализовывать надежные и экономичные сети на базе микроконтроллеров STM32W108. Примеры использования библиотеки ST ZigBee Pro показаны на рис. 2.

Рис. 2. Использование библиотеки ST ZigBee Pro

В зависимости от сложности приложения используются соответствующие модули библиотеки. Стек ZigBee PRO занимает на 20% меньше места, чем предыдущее поколение программных продуктов.

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

Первая программа

CooCox

Выполняем пункт меню Project -> New

Указываем имя проекта:

Выбираем Чип:

В репозитории выбираем какие именно модули мы будем использовать:

Открываем main.c і набираем следующий код программы:

Компилируем (Project->Build)

При первой компиляции IDE может запросить указать местонахождение компилятора.

Надо корректно указать место, куда был установлен GCC.

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

Если Вы будете заливать прошивку через UART с помощью UART-USB переходника, файл для заливки найдете в директории:
C:\CooCox\CoIDE\workspace\Example_GPIO\Example_GPIO\Debug\bin\Example_GPIO.bin

Если у Вас есть установленный ST-Link программатор, программу в микроконтроллер можно залить прямо с IDE (Flash -> Program Download).

Если при этом возникла ошибка «Error: Flash driver function execute error» Рекомендуется:

  1. Запустить STM32 ST-LINK Utility и выполнить Frimware update.
  2. Скопировать файл STLinkUSBDriver.dll из папки
    C:\Program Files\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility
    в папку
    C:\CooCox\CoIDE\bin
    после чего перезапустить CooCox IDE

2.2 Настройка утилиты

интерфейс (у меня это COM-3);
скорость, с которой будет общаться компьютер и микроконтроллер (имхо, 9600 нормальное значение);
количество бит данных (у меня это окно почему-то недоступно, но пока это не важно);
чётность (у меня без чётности, т.е. None);
echo (у меня ВЫКЛ);
время ожидания (у меня 10 секунд).

Во-первых, нужно проверить не замкнута ли перемычка BOOT на плате.
Во-вторых, в любом случае, отключить питание микроконтроллера и желательно линии TX и RX, идущие от переходника на плату (землю можно не отключать).
В-третьих, в программе прожать Back до конца, т.е. до первой странички, или же вообще закрыть её и запустить заново (вообще говоря, она иногда подвисает)

Важно перед каждым подключением к плате через эту программу всегда начинать с первой страницы.
В-четвёртых, подцепить обратно провода от переходника к плате и снова попытаться подключиться в программе (обязательно с первой странички!).

NRSTDatasheetOrdering information

  1. стереть память (всю или выбрать конкретную область);
  2. записать прошивку на устройство;
  3. считать прошивку с устройства;
  4. включить/отключить защиту от записи или чтения.

Использование STM32H7 в разработке

В семейство STM32H7 входит множество контроллеров, часть из них с одним ядром Cortex-M7, а некоторые с двумя ядрами Cortex-M7 и Cortex M4. В модификациях контроллера присутствует различное  количество и комбинация стандартных периферийных устройств, таких как GPIO, I2C, I2S, SPI, таймеры, USARTS.

В серии представлены и некоторые более продвинутые периферийные устройства, которые обычно отсутствуют в менее производительных микроконтроллерах. К ним относятся USB OTG, контроллеры Ethernet и CAN, последовательные аудиоинтерфейсы (SAI), интерфейс камеры, интерфейсы TFT дисплея и аппаратные графические ускорители. Семейство также поддерживает механизмы аппаратного криптографического шифрования и функции для обеспечения безопасной загрузки и обновления кода прошивки.

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

Один из лучших способов узнать о любом семействе процессоров — это потратить некоторое время на работу с отладочной платой, решая типичные задачи, возникающие в процессе разработки. Для этого ST Microelectronics выпускает множество различных оценочных плат и программных продуктов. Практика работы с ними поможет вам быстро разработать собственное устройство.

Для оценки всей функциональности серии STM32H7 рекомендуются платы STM32H7x3I-EVAL. Эти платы позволяют оценить возможности продвинутых периферийных устройств семейства STM32H7.

Рис. 3. Оценочная плата STM32H7531

Платы среднего уровня на основе микроконтроллера STM32H7 представлены семейством Discovery. Они имеют несколько менее богатую периферию.

Наиболее бюджетные платы из серии Nucleo (рис. 4). Как правило, эти платы содержат только микроконтроллер с необходимой обвязкой. Периферия представлена разъемами Ethernet и USB. Но, поскольку все контакты микроконтроллера доступны на разъемах по краям платы, есть хорошая возможность сопряжения MCU с внешним оборудованием.

Рис. 4. Плата Nucleo для одного из микроконтроллеров STM32H7

Программирование плат осуществляется через встроенный программатор STLink-V3

Обратите внимание, что STLink-V3 встречается только на платах с новейшими микроконтроллерами STM32, такими как семейство STM32H7. Старые оценочные платы STM32 содержат STLINK-V2, который среди прочего обеспечивает существенно более низкую скорость загрузки около 12 Мбит/с по сравнению с STLINK-V3 (480 Мбит/с)

Основные возможности TrueStudio

Программная платформа. TrueStudio является полноценной интегрированной средой разработки встраиваемого ПО для микроконтроллеров STM32 (рисунок 8). Внешне TrueStudio чрезвычайно похожа на AC6 System Workbench. Это не удивительно, так как обе среды используют платформу Eclipse. Сходство на этом не заканчивается. В основе TrueStudio лежат те же открытые проекты компилятора GCC и отладчика GDB.

Рис. 8. Интерфейс TrueStudio

Поддерживаемые микроконтроллеры. TrueStudio работает только с STM32 и поддерживает все микроконтроллеры семейства. Кроме того, в TrueStudio есть поддержка большинства плат от STMicroelectronics. Пользователь может открыть готовые демонстрационные проекты без скачивания каких-либо дополнительных файлов.

Работа с проектами. TrueStudio позволяет создавать и редактировать проекты, написанные на С/С++. Существует возможность создания дерева проектов, что весьма удобно при параллельной работе с несколькими приложениями.

Работа с файлами. TrueStudio предлагает к услугам пользователей стандартный набор инструментов для работы с С/С++-файлами: поиск, интерактивный поиск, контекстную подсветку, шаблоны, дерево функций и т.д.

Компиляция и построение проекта. Как было сказано выше, TrueStudio использует GCC для компиляции проекта. При этом возможна оптимизация кода в процессе компиляции.

TrueStudio дает пользователям возможность ручного размещения кода и данных в памяти микроконтроллера.

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

Отладка. TrueStudio поддерживает работу с использованием всех популярных отладчиков, в том числе, ST-Link, SEGGER, P&E micro и др.

Среда имеет поддержку точек останова и пошагового выполнения. В процессе отладки программист получает доступ ко всем регистрам и памяти. Кроме того к услугам пользователя также предлагаются различные анализаторы (памяти, стека, ошибок).

Стоит отметить, что процесс отладки в TrueStudio мало чем отличается от работы с другими аналогичными средами.

Поддержка систем контроля версий. TrueStudio обеспечивает одновременную работу нескольких пользователей над проектом за счет поддержки систем контроля версий: CVS, SVN, Git.

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

STM32Cube позволяет создавать готовый проект TrueStudio с генерацией структуры проекта, автоматическим формированием исходников, включением всех необходимых директив.

Небольшой проект, демонстрирующий взаимодействие STM32Cube и TrueStudio, представлен в видеоролике, дополняющем данную статью. В этом проекте STM32Cube используется для настройки таймера TIM4, выходные каналы которого управляют яркостью светодиода с помощью ШИМ. Отладка выполняется с помощью TrueStudio и платы STM32F4DISCOVERY.

Отладка микроконтроллера STM32

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

После перехода на STM32 вы со временем и вовсе забудете о выводе данных через консоль, ведь на замену этих шаблонов придут куда более разумные и практичные решения.

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

Отладочные интерфейсы

Микроконтроллер STM32W108 имеет в своем составе стандартные интерфейсы Serial Wire и JTAG (SWJ). Интерфейс SWJ является первичным интерфейсом программирования и отладки для микроконтроллеров STM32W108. Он также обеспечивает доступ средствам отладки к внутренним шинам STM32W108, позволяет осуществлять независимый доступ к памяти и регистрам, а также осуществлять пошаговую отладку CPU. Поэтому, любые разработки, основанные на STM32W108, должны обеспечивать доступность сигналов SWJ.

Интерфейс Serial Wire является двунаправленным двухпроводным стандартным протоколом для микроконтроллеров семейства ARM, созданным для замены JTAG-интерфейса, и обеспечивает все стандартные функции отладки и тестирования. Кроме того, две сигнальных линии Serial Wire (SWDIO и SWCLK) наложены на две сигнальных линии JTAG (JTMS и JTCK).

Это делает разработку компактной и позволяет легко переключаться между отладчиками с интерфейсами Serial Wire JTAG без изменения подключения выводов.

Поскольку интерфейсы Serial Wire и JTAG предоставляют одни и те же функции отладки и тестирования, компания ST рекомендует использовать первый. Он использует только два вывода, в отличие от пяти для JTAG, и предлагает более простой протокол обмена данными, высокоэффективную передачу данных при низкой потребляемой мощности, встроенное обнаружение ошибок и защиту от импульсных помех.

Порт отладочного доступа ARM CoreSight Debug Access Port (DAP) включает в свой состав Serial Wire- и JTAG-интерфейсы (SWJ). DAP состоит из двух первичных компонентов: порта отладки (SWJ-DP) и порта доступа (AHB-AP). SWJ-DP обеспечивает внешний доступ для отладки, в то время как AHB-AP обеспечивает доступ к внутренним шинам. Внешние отладочные средства присоединяются к отладочным выводам STM32W108, соединенным с модулем SWJ-DP. Затем SWJ-DP обеспечивает обмен данными с AHB-AP. В конечном счете, модуль AHB-AP обменивается данными с внутренними шинами.

Литература

  1. High-performance, IEEE 802.15.4 wireless system-on-chip http://www.st.com/stonline/products/literature/ds/16252/stm32w108cb.pdf

  2. STM32W for RF applications ESC Boston September 2009 http://www.st.com/mcu/files/mcu/1254219171.ppt

  3. STM32W108 ZigBee starter kit (beta version) http://www.st.com/stonline/products/literature/um/16222.pdf

  4. STM32 Standard Peripheral Library http://www.st.com/mcu/inchtml.php?fdir=pages&fnam=stm32lib

  5. STM32 (CORTEX M3) — Self-test routines Class B norm certification http://www.st.com/mcu/inchtml-pages-stm32_classb.html.

Андрей Самоделов

Маркировка STM32

Device family Product type Device subfamily Pin count Flash memory size Package Temperature range
STM32 =
ARM-based 32-bit microcontroller
F = General-purpose
L = Ultra-low-power
TS = TouchScreen
W = wireless system-on-chip
60 = multitouch resistive
103 = performance line
F = 20 pins
G = 28 pins
K = 32 pins
T = 36 pins
H = 40 pins
C = 48/49 pins
R = 64 pins
O = 90 pins
V = 100 pins
Z = 144 pins
I = 176 pins
B = 208 pins
N = 216 pins
4 = 16 Kbytes of Flash memory
6 = 32 Kbytes of Flash memory
8 = 64 Kbytes of Flash memory
B = 128 Kbytes of Flash memory
Z = 192 Kbytes of Flash memory
C = 256 Kbytes of Flash memory
D = 384 Kbytes of Flash memory
E = 512 Kbytes of Flash memory
F = 768 Kbytes of Flash memory
G = 1024 Kbytes of Flash memory
I = 2048 Kbytes of Flash memory
H = UFBGA
N = TFBGA
P = TSSOP
T = LQFP
U = V/UFQFPN
Y = WLCSP
6 = Industrial temperature range, –40…+85 °C.
7 = Industrial temperature range, -40…+ 105 °C.
STM32 F 103 C 8 T 6