Программирование микроконтроллеров STM32W108

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

Среды для программирования

Подключение библиотеки SimpleMAC

Библиотека содержит два API:

  • HAL (абстрактное представление аппаратных средств)
  • SimpleMAC (управление радиочастотным модулем)

SimpleMAC API документировано значительно лучше, чем HAL API. Можно даже сказать, что HAL API совсем не документировано, что очень усложняет его использование.

Компилятору следует указать следующие пути поиска заголовочных файлов:

  • <Каталог SimpleMAC>/STM32W108
  • <Каталог SimpleMAC>/STM32W108/hal
  • <Каталог SimpleMAC>/STM32W108/hal/micro

К проекту требуется добавить следующие ассемблерные файлы (из директории <Каталог SimpleMAC>/STM32W108/hal/micro/cortexm3):

  • spmr.s
  • context-switch.s
  • cstartup_M.s

А также все файлы исходных кодов (*.c) из директории <Каталог SimpleMAC>/STM32W108/hal/micro/cortexm3.

В начале каждого файла исходных кодов (*.c) библиотеки можно обнаружить строчку:

#include PLATFORM_HEADER

Необходимо самим задать определение PLATFORM_HEADER в опциях компилятора.

В зависимости от того какими средствами разработки вы пользуетесь, PLATFORM_HEADER должно содержать одно из значений:

  • <hal/micro/cortexm3/compiler/iar.h>
  • <hal/micro/cortexm3/compiler/gnu.h>

Чтобы задать определение в EWARM, следует на вкладке Preprocessor в поле Defined Symbols добавить следующую строчку:

PLATFORM_HEADER=<hal/micro/cortexm3/compiler/iar.h>

Если вы программируете в среде EWARM, то следует подключать файл iar.h. Если в среде TrueSTUDIO, то — gnu.h.

HAL API предоставлен в исходном коде. SimleMAC API наоборот: предоставлен в виде объектных файлов:

  • <Каталог SimpleMAC>/STM32W108/simplemac/library/simplemac-library.a
  • <Каталог SimpleMAC>/STM32W108/simplemac/library/libsimplemac-library-gnu.a

В среде EWARM в опциях линкера на вкладке Library в поле Additional Libraries требуется указать первый объектный файл.

Начинать писать свою программу в файле main.c надо со строчек:

#include PLATFORM_HEADER
#include <hal/hal.h>
#include <simplemac/include/phy-library.h>

Использование SImpleMAC API

Прототипы функций, структуры и определения — все содержится в единственном файле phy-library.h.

В программе требуется объявить глобальную переменную radioTransmitConfig типа RadioTransmitConfig.
Переменная radioTransmitConfig должна быть инициализирована до вызова функции ST_RadioTransmit(). Во время передачи переменную нельзя модифицировать.
RadioTransmitConfig — это структура для управления передачей, содержащая следующие поля:

Тип Имя Описание
boolean waitForAck Ожидать подтверждение приема (ACK) если запрос подтверждения установлен в поле контроля пакета (FCF)
boolean checkCca Проверка занятости канала и выполнение backoff перед передачей
int8u ccaAttemptMax
int8u backoffExponentMin
int8u backoffExponentMax
int8u minimumBackoff
boolean appendCrc Добавка контрольной суммы к передаваемым пакетам

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

void ST_RadioSfdSentIsrCallback (int32u sfdSentTime) {}

void ST_RadioTxAckIsrCallback (void) {}

boolean ST_RadioDataPendingLongIdIsrCallback (int8u *longId) {}

boolean ST_RadioDataPendingShortIdIsrCallback (int16u shortId) {}

void ST_RadioOverflowIsrCallback (void) {}

void ST_RadioMacTimerCompareIsrCallback (void) {}

void ST_RadioTransmitCompleteIsrCallback ( StStatus status,
                                           int32u   sfdSentTime,
                                           boolean  framePending ) {}

void ST_RadioReceiveIsrCallback ( int8u   *packet,
                                  boolean ackFramePendingSet,
                                  int32u  time,
                                  int16u  errors,
                                  int8s   rssi ) {}

Управление портами ввода вывода

Функция для настройки портов:

void halGpioConfig (int32u io, int32u config)

Значения io Описание
PORTA_PIN(y) Порт A, где y — номер вывода 0…7
PORTB_PIN(y) Порт B, где y — номер вывода 0…7
PORTC_PIN(y) Порт C, где y — номер вывода 0…7
Значения config Описание
GPIOCFG_ANALOG Аналоговый вход или выход
GPIOCFG_IN Цифровой вход
GPIOCFG_IN_PUD Цифровой вход с подтяжкой к питанию или земле
GPIOCFG_OUT Двухтактный выход
GPIOCFG_OUT_ALT Альтернативный двухтактный выход
GPIOCFG_OUT_ALT_OD Альтернативный выход с открытым стоком
GPIOCFG_OUT_OD Выход с открытым стоком

Функция для управления состоянием портов:

void halGpioSet (int32u io, boolean value)

Значение io то же, что в предыдущей функции.

Значения value Описание
FALSE Логический 0
TRUE Логическая 1

Особо стоит сказать о настройке подтяжки.

Настройка вывода PA5 в режим подтяжки к питанию:


halGpioSet(PORTA_PIN(5), GPIOOUT_PULLUP);

halGpioConfig(PORTA_PIN(5), GPIOCFG_IN_PUD);

Настройка вывода PA4 в режим подтяжки к земле:


halGpioSet(PORTA_PIN(4), GPIOOUT_PULLDOWN);

halGpioConfig(PORTA_PIN(4), GPIOCFG_IN_PUD);

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

Реклама

Автор

Дмитрий Бравиков

Инженер. Электронщик. Программист.

Программирование микроконтроллеров STM32W108: 8 комментариев

  1. Здравствуйте Дмитрий! Статья очень помогла, научился дрыгать ножками stm32w108. А еще не знаете ли вы, как считывать состояние с ножки, настроенной на вход? Заранее спасибо!
    С уважением, Рамиль.

    1. Здравствуйте.

      Честно говоря, я уже год не занимался этими микроконтроллерами. А сейчас полез вспоминать и обнаружил, что с тех пор STM выпустила хорошую библиотеку для этих микроконтроллеров, очень похожую на библиотеки для других своих МК. Её можно скачать по этой ссылке:

      http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/firmware/stm32w_stdperiph_lib.zip

      А эта документация описывает разницу между старой и новой библиотекой:

      http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00059814.pdf

      Кстати, кроме этого документа я больше ничего не нашел, описывающего новую библиотеку. Наверное, STM еще не успела сделать.

      В старой библиотеке состояние ножек можно было узнать только чтением соответствующего регистра порта, насколько я помню. А в новой библиотеке состояние ножки можно узнать функцией GPIO_ReadInputDataBit().

      Удачи.

  2. //Настраиваем пин на вход
    //подтягиваем пин к плюсу

    if((GPIO_PCIN & (1<<2))==0) //Считываем входной регистр порта С и проверяем бит 2
    {
    //Здесь выполняется код если на ножке "0"
    }

  3. Дмитрий, здравствуйте! Это снова я, спустя долгое время хотел взяться за этот контроллер, но почему то мои проекты при открывании в IAR EWARM выдает какие то ошибки и структуру проекта меняет, после уже не компилируется кучу ошибок при компиляции выдает. Открыть пытаюсь на другом компьютере, т.к. тот компьютер, где нормально открывалось всё, это был рабочий компьютер, откуда я уже уволился давно.
    Не могли бы вы скинуть архив с рабочим проектом? Создавать с нуля проект под эту микруху не умею. Может и другим пользователям пригодится. Заранее спасибо!

    1. Здравствуйте. Вот мой проект на STM32W:

      https://www.dropbox.com/s/ovp6657fdnidy6g/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BB%D1%8C%D0%BD%D0%B8%D0%B5%20%D0%90%D0%A6%D0%9F%20STM32W%20%28EWARM%29.zip?dl=0

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

      https://www.dropbox.com/s/jkh4zriq0t4l3sa/st_zigbee_simplemac.zip?dl=0

      В другой библиотеке для этого МК есть шаблоны проектов для разных сред. Вот эта библиотека:

      http://www.st.com/web/en/catalog/tools/PF258146

      Шаблоны находятся в папке /STM32W108xx_StdPeriph_Lib_V1.0.1/Projects/STM32W108xx_StdPeriph_Templates/

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s