STM Урок 4. Библиотека HAL. STM32 CUBE MX. Светодиоды и кнопка

 

 

 

Урок 4

Библиотека HAL. STM32 CUBE MX. Светодиоды и кнопка

 

 

Сегодня мы познакомимся с библиотекой HAL. Данная библиотека, в отличие от SPL, широко используется и поддерживается.

Также для более комфортного использования данной библиотеки мы будем пользоваться программой для первоначальной настройки и генерации кода для среды программирования — STM32CubeMX.

Скачиваем STM32CubeMX с st.com (для этого нужно заполнить форму и ссылочка придет на электронную почту.

Устанавливаем его (может потребоваться установка Java)

Запускаем куб, выбираем контроллер.

Настраиваем порты PA0, PD12, PD13, PD14, PD15

Включаем шину rcc->HSE

Переходим в Clock Configuration, включаем HSE

Применим следующие настройки:

Input Frequency 8

HSE

/8

X 336

/2

PLLCLK

AHB Prescaler 1

APB1 Prescaler 8

APB2 Prescaler 8

А можно и так как на рисунке (нажмите на картинку для увеличения размера)

 

image00_0500

 

Следующая вкладка Configuration.

Смотрим тут GPIO и ничего там не трогаем

 

 

Дальше идём в меню Project -> Generate Code

Настраиваем Toolchain IDE – MDK-ARM V5

Задаем имя проекта и расположение

Жмем ОК

Если нужно загрузить библиотеки, то загружаем.

Смотрим функции для управления портами в STM32F4HAL_User_manual.pdf, найти который можно введя на st.com в строке поиска «STM32F4xx»

Функции находятся HAL GPIO Generic Driver –> GPIO Firmware driver API description -> IO operation functions. Щелкаем по ссылке нужной функции и смотрим ее описание.

 

 

Добавляем в бесконечный цикл код

 

                HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);

                HAL_Delay(500);

                HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);

                HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_13);

                HAL_Delay(500);

                HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_13);

                HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);

                HAL_Delay(500);

                HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);

                HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);

                HAL_Delay(500);

                HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);

 

Затем задействуем кнопку следующим образом меняя код

 

                if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)==GPIO_PIN_SET)

                {

                        HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);

                        HAL_Delay(500);

                        HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);

                        HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_13);

                        HAL_Delay(500);

                        HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_13);

                        HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);

                        HAL_Delay(500);

                        HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);

                        HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);

                        HAL_Delay(500);

                        HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);

                }

                else HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);

  }

 

Прошиваем контроллер и смотрим результат.

 

Предыдущий урок Программирование МК STM32 Следующий урок

 

 

Купить плату можно здесь STM32F4-DISCOVERY

 

Смотреть ВИДЕОУРОК

 

STM32 CUBE MX. Светодиоды и кнопка

17 комментариев на “STM Урок 4. Библиотека HAL. STM32 CUBE MX. Светодиоды и кнопка
  1. alex323:

    Добрый день. Первым делом хочу сказать вам спасибо за ваш титанический труд. Написать такую уйму уроков за короткий срок — это нечто. Надеюсь, вы не бросите проект, как большинство авторов.

    Теперь "ближе к телу, как говорил Ги Де Мопассан" (с) 🙂

    Подскажите пожалуйста, почему при использовании HAL в Кейле в отладке не виден ни один периферийный блок. В SPL все доступно, а тут нет. Хоть в четвертом Кейле, хоть в пятом. Спасибо.

    • Вам также спасибо за оценку ресурса!
      С этим делом не заморачивался. Тем более не знаю, какой именно блок не виден. И кейл у Вас лицензионный или бесплатный?

  2. alex323:

    Четвертый Кейл крякнутый, пятый бесплатный. Поначалу в четвертом на SPL кое-что пописывал, отладка работала. Как перешел на Cube, отладки не стало. Ну, думаю, ST сейчас все примеры для пятого Кейла пишет, надо его попробовать. Попробовал — то же самое. 

    Не видится вся периферия. Таймеры, GPIO и т. д. 

     

    • alex323:

      Вот написал "Поначалу в четвертом на SPL кое-что пописывал", а потом подумал, что надо было написать "пытался кое-что пописывать". 🙂 Ибо на Си раньше не писал, много встрчается всяких непонятных вещей, которые редко где описываются. 

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

      • Если такая просьба приобретёт массовый характер, то так и буду делать, хотя мне это будет раз в 50 сложнее.

        А пока в каждой последней части урока выкладываю полный проект, который можно скачать. Хотя я также был противником выкладывания проекта. Иначе люди сами перестают думать и пользуются готовым проектом. Видимо, скоро надо будет и это прекращать. Так как, оказывается, на всех не угодить. Здесь ещё встречались такие, которые просили в каждой части промежуточные проекты выкладывать. Но хорошо, что их очень мало.

  3. Михаил:

    Извините за дилетантский вопрос Где физически располагается файл main.h? Почему его видно в Кейле и не видно, если просто открыть папку и смотреть проводником Windows? Я скачал Keil 5  3 дня назад, до этого были AVRки, там AVR Studio да Proteus.

     

  4. Ollovein:

    У меня nucleo F401RE. Написал все как сказо в уроке, но светодиоды просто в итоге мигаю по очереди. Светодиоды как и кнопка вынесены на макетку. Единственное что тактировал от внутреннего так как кварца на плате нет. Можете подсказать в чем проблема?

    • Не знаю даже в чём проблема, но кварц у Вас есть. Настраивайте так же как и у меня генератор. В подобных платаг тактирование используется от генератора ST-Link, в конечном счёте от кварцевого резонатора, подключенного к ST-Link на 8МГц

  5. alximed:

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

    • alximed:

      Всем привет . Разобрался в чем дело . У меня есть маленькая плата stm32f303 к ней я приобрел добавочную плату open32f3. А там стояла перемычка на замыкание. Убрал её и кнопка стала работать. Начало есть двигаюсь дальше .

  6. Иван:

    Как дрыгать ногой понятно, WritePin, TogglePin, ResetPin. А вот как сделать выбор ножки в цикле, нигде найти не могу. Допустим, что-то подобное:
    for(i=0; i<16; ++i)
    {
    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_i);
    HAL_Delay(500);
    }

    И как бы сдвинуть регистр, описывающий состояние ног? К примеру, для того, чтобы прогнать горящий светодиодик по всем ножкам регистра последовательно, хочется просто сдвигать регистр в цикле целиком, но вот инструкцию для этого никак не могу найти. Реализовал просто удвоением значения, заносимого в порт, но чувствую, что это не самое правильное решение:

    char i=0;
    char c=1;

    for(i=0; i<8; ++i)
    {
    HAL_GPIO_WritePin(GPIOA, c, GPIO_PIN_SET);
    HAL_Delay(100);
    HAL_GPIO_WritePin(GPIOA, c, GPIO_PIN_RESET);
    c=c*2;
    }

  7. Огромное спасибо за ваш труд.

  8. ElectronHD:

    Пожалуйста подскажите где взять библиотеку. 2)Почему исходный код под 103 стмку

    • 1) Все библиотеки подгрузятся из шаблонов при генерации проекта.
      2) Простите, перепутал, спасибо! Пока убрал исходник, со временем попробую воспроизвести урок, пересобрать и выложить.

  9. demetrodon:

    Здравствуйте, что делать если на моей отладочной плате нет кнопки? чем можно ее заменить?

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*