Июл 112013
 

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

Вот описание работы с программой от автора:

“Доброго времени суток. Высылаю программу для конфигурирования целого порта с возможностью выбора альтернативной функции. Должна работать под XP, VISTA, win7. (Проверял только под win7).

О самой программе.
С таблицей с выпадающими списками наверно всё понятно — по горизонтали регистры, по вертикали — выводы порта. Кнопка — "0 -> (1-15)" — раскопировывает состояния бита 0 в остальные биты. Чтобы создать код — внизу слева выбираем из списка нужную букву регистра и нажимаем "создать". Код добавится в текстовое поле. Если изменить конфигурацию и букву регистра и ещё раз нажать "создать" — новый код добавится к ранее созданому — и так можно для всех регов по очереди сделать, а потом перекопировать целиком, куда нужно. Ну и кнопка для очистки поля имеется. Объем 48кб.
С ув. Олег TCoder.”

Скриншот программы конфигурации GPIO

Интерфейс программы предельно прост и логичен, никаких сложностей не возникает. Для примера попробуем изменить конфигурацию вывода PA0 и нажмем кнопку “Создать”. Результат представлен на скриншоте:

Скриншот программы конфигурации GPIO_2

Как видите, нужный код осталось только перенести в вашу программу, это избавляет вас от рутинных операций по конфигурации отдельных выводов GPIO.

Автору огромное спасибо за проделанный труд и за то, что поделился программой с читателями сайта!

Архив с программой можно загрузить ОТСЮДА.

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

  10 Responses to “Программа для конфигурации GPIO микроконтроллеров STM32L1xx.”

  1. здорово!
    осталось автора попросить сделать под разные процы. И спросить, на чем она написана?

    • Программа эта написана и скомпилирована на простом VB6, но по правилам, позволяющим запускаться этому приложению на трех указанных выше ОС. (Всегда VB6 использую для несложных программ вроде этой, что то более мощное уже на более срьёзных языках пишу…).

      Могу сделать и для других процов со временем, если Вы укажете на датащиты с информацией. Я просто начал именно с STM32L152 обучаться, и соответственно первое, с чем пришлось столкнуться — это с весьма массивной настройкой портов. Вот и накидал программку под свой L152, а поскольку мне данный сайт очень помогает разбираться с этим всем, подумал, почему бы и не поделиться программкой :)

      • да, спасибо. там еще STM32F100 вроде проц есть- там чуть отличается инициализация. Хорошо бы паддинг сделать с выбором проца.

        • Сейчас посмотрел датащит на F100, отличия от L152 в структуре регистров не такие уж и «чуть-чуть», но это в принципе делу не мешает, да и в этой программе тоже имеет смысл текст чуть-чуть подправить. Как будет время, напишу вторую версию программы, сейчас свободного времени катастрофически не хватает.

  2. radiomanoff

    Здравствуйте!Вопервых спасибо за сайт,особенно за STM32L.Самому попала такая.Решил попробовать,первые впечетления — «моща» по сравнению с теми-же -AVR.
    Поганял светодиоды,»button»,паралельно штудируя Ваш ресурс,дошел до этой статьи.Первоначально использовал готовые проекты,а тут решил выставить порта при помощи данной программы.Проект простой, при нажатии на кнопку — работа светодиодов.Прошил при помощи CoIDe — программа работает.
    Но чего-то дальше прошить неприставлялось возможным — Error: Connect failed, check config and cable connection.Причем ДИСПЕТЧЕР УСТРОЙСТВ ST-linc V2 определял,но прошивать упрямо не хотел.
    Дальше погуглив вопрос понял ,что я не первый такой клиент.По совету сообщества скачал программу STM32 ST-link Utilite, которая тоже не прошивала ,как и не стирала(erase),Помогла переустановка драйвера st-link_v2_usbdriver.STM32 ST-link Utilite увидела МК,и он был наконецто стерт.И только тогда его стало возможным прошивать прямо из CoIDe.
    Я так думаю ошибка у меня получилась в конфигурации портов ,а именно интерфейсе SWD?Хотя могу и ошибаться.
    Код из программы

    void setup (void){
    //================ GPIOA CONFIGURATION ================
    RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
    GPIOA->MODER=0x00000000;
    GPIOA->OTYPER=0x00000000;
    GPIOA->PUPDR=0x00000002;
    GPIOA->OSPEEDR=0xFFFFFFFF;
    GPIOA->AFR[0]=0x00000000;
    GPIOA->AFR[1]=0x00000000;
    //================ GPIOB CONFIGURATION ================
    RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
    GPIOB->MODER=0x00005000;
    GPIOB->OTYPER=0x00000000;
    GPIOB->PUPDR=0x00000000;
    GPIOB->OSPEEDR=0xFFFFFFFF;
    GPIOB->AFR[0]=0x00000000;
    GPIOB->AFR[1]=0x00000000;
    }

    • А что за ошибка непонятно. Перенастроены выводы, предназначенные для SWD что-ли? В этом случае поможет режим «connect under reset». Удерживаем reset и запускаем стирание, например, затем отпускаем reset. Или я не понял вопроса?

      • radiomanoff

        Я думаю что именно предназначенные для SWD,а защиты от этого в программе не предусмотрено.Ведь становится невозможным отлаживание при такой конфигурации,только полное стирание при помощи ST-LINK Utility.Хотя я начинающий в stm,могу ошибаться…

  3. Подскажите пожалуйста, что происходит со значениями регистра вот тут: GPIOA->ODR &= ~GPIO_ODR_1; Каким образом получается что во втором бите оказывается 0?

    • Например, для микроконтроллеров серии STM32F10x, GPIO_ODR_ODR1 — это маска ((uint16_t)0x0002). Задана в файле с названием типа stm32f10x.h.
      Далее открываем любой учебник по языку С и читаем про поразрядные операции.