Янв 102013
 

Недавно Metcenger прислал программу, которая облегчает настройку портов микроконтроллеров STM32L152xx в нужные рабочие режимы. Сам ее сотворил, но не стал пользоваться в одиночку, а предложил выложить программу на сайте.

Программа имеет очень простой интерфейс. Просто выбираем нужные режимы работы и получаем готовый код. Причем уже с комментариями! И размер программы всего 16,5 килобайт. Ниже приведен скриншот программы, как видите, здесь все просто и понятно.

stm32_gpio_configuration

Далее приведу цитату из письма от автора программы:

В STM32 есть две возможности инициализации портов:
1. такой вид:

GPIOB->MODER |= GPIO_MODER_MODER6_0;//output
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_6;//Output push-pull
GPIOB->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR6;//40 MHz
GPIOB->PUPDR &=~GPIO_PUPDR_PUPDR6;//No pull-up, pull-down

Здесь GPIOB объявлен в файле

#include "stm32l1xx.h"

как указатель, и там же он проинициализирован значением адреса структуры. А та структура содержит в себе поля структуры (MODER, OTYPER, OSPEEDR…), т.е. в значении GPIOB уже есть адрес структуры. И в такой форме мы обращаемся к полям структуры и меняем их значения.

2. второй способ:

/*Если используем такой вид, то добавляем в проект файл stm32l1xx_gpio.c,
и в файле stm32l1xx.h надо раскомментировать строку 
#define USE_STDPERIPH_DRIVER
или вписать USE_STDPERIPH_DRIVER в поле Defined symbols в настройках препроцессора*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; 
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, GPIO_InitStructure);

тут надо в проект добавить файл stm32l1xx_gpio.c и  вписать в препроцессор USE_STDPERIPH_DRIVER в поле Defined symbols или раскомментировать это в файле stm32l1xx.h, тип структура уже создан в подключаемом файле. Нам только остается создать объект этого типа — объект структуры

GPIO_InitTypeDef GPIO_InitStructure;

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

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

Ну а для кого кажется, что первый способ менее нагляден и запарно лазать в даташит каждый раз — как раз написана эта маленькая программка — ставите галочки, вам выдается ответ. Итог — текста меньше, скорость выше.

Архив с программой можно загрузить ЗДЕСЬ.

Другие статьи:

  6 Responses to “STM32_GPIO_configuration — программа для настройки портов ввода-вывода”

  1. Все таки жаль, что статья не в авторском исполнении, так было бы лучше.
    Metcenger, а будет ли развитие программы в плане расширения линейки поддерживаемых микроконтроллеров, инициализации других модулей?
    Выбора альтернативных функций :)?
    Пока решил написать отдельной статьей, потом добавлю еще и в статью про GPIO.

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

      • К портам бы еще как-нибудь таблицу с выбором альтернативных функций прикрутить. Но большая она уж больно…

        • Могу прислать такую программу (тоже самописная). Правда она для настройки цельного порта (таблица из битов порта и регистров — с выпадающими списками). Выбрать можно и альтернативную функцию. Результат выдаётся в виде кода с прямым присвоением 32-битного значения каждому регистру управления. Позволяет сгенерировать поочерёдно в одном поле код для нескольких портов. Если интересует, напишите, куда прислать.

        • Интересно посмотреть, шлите на адрес mailbox@chipspace.ru. Может на сайте выложим?