Stm32 уроки программирования hal

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

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

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

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

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

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

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

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

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

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

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. Щелкаем по ссылке нужной функции и смотрим ее описание.

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

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

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

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

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

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

Добрый день. Первым делом хочу сказать вам спасибо за ваш титанический труд. Написать такую уйму уроков за короткий срок — это нечто. Надеюсь, вы не бросите проект, как большинство авторов. Теперь «ближе к телу, как говорил Ги Де Мопассан» (с) 🙂 Подскажите пожалуйста, почему при использовании HAL в Кейле в отладке не виден ни один периферийный блок. В SPL все доступно, а тут нет. Хоть в четвертом Кейле, хоть в пятом. Спасибо.

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

Не понятно зачем показывать «Хитрости» с копированием прошлого урока. Можно просто сохранить прошлый урок под другим именем в другой папке и модифицировать копию для следующего урока.

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

Читайте также:  Программирование цикла черновой продольной контурной обработки

Вот написал «Поначалу в четвертом на SPL кое-что пописывал», а потом подумал, что надо было написать «пытался кое-что пописывать». 🙂 Ибо на Си раньше не писал, много встрчается всяких непонятных вещей, которые редко где описываются. Еще хочу вас попросить писать в статьях чуть поподробнее, что откуда берется. И, если можно, в каждой статье начинать проект заново. Процессоры, которые вы используете, есть не у каждого, поэтому приходится переделывать код под свой процессор. А если проект потом снова переделывать под новый проект, то можно совсем запутаться.

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

Эта просьба увеличилась на 1. Конечно немного подробнее можно объяснять. И проект выкладывать надо. Иначе вообще неинформативно у вас получится. А то «это берем здесь, это сюда, это на ум пошло…»
, более инженерным языком нужно. Но пока и на том неплохо.

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

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

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

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

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

Читайте также:  Программирование разбери пи 3

Как дрыгать ногой понятно, WritePin, TogglePin, ResetPin. А вот как сделать выбор ножки в цикле, нигде найти не могу. Допустим, что-то подобное:
for(i=0; i HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_i);
HAL_Delay(500);
> И как бы сдвинуть регистр, описывающий состояние ног? К примеру, для того, чтобы прогнать горящий светодиодик по всем ножкам регистра последовательно, хочется просто сдвигать регистр в цикле целиком, но вот инструкцию для этого никак не могу найти. Реализовал просто удвоением значения, заносимого в порт, но чувствую, что это не самое правильное решение: char i=0;
char c=1; for(i=0; i HAL_GPIO_WritePin(GPIOA, c, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA, c, GPIO_PIN_RESET);
c=c*2;
>

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

Не очень понял, как именно нужно настроить порты PA0, PD12, PD13, PD14, PD15. Когда их выбираешь на схеме мк справа, там куча вариантов их использования

Спасибо за ответ. Я в итоге открыл видео и сделал все по примеру, но странная штука: когда я начинаю генерировать код, вываливается окно: «the code is successfully generated under but mdk-arm v5project generation have a problem» Если попробовать его перегенерировать, то окно будет уже с успешным завершением.
При попытке сбилдить проект в uVision, компиляция валится с ошибкой «error: L6236E: No section matches selector — no section to be FIRST/LAST.» Я погуглил ее и вышел на то, что в проекте необходимо подключить Device-Startup.
Но если попробовать добавить этот файл, то валится 8 ошибок о множественном объявлении, например: Error: L6200E: Symbol SystemInit multiply defined (by system_stm32f4xx_1.o and system_stm32f4xx.o). Как я понял, надо где-то убрать какие-то инклюды, но вот дальше так и не понял, где именно.
Вообще, не будете ли вы против, если я свяжусь с вами как-то иначе, нежели через комментарии?
Мои контактные данные:
email: voultboy@yandex.ru
vk: vk.com/voulty
telegram: @hepoh

На 20-й минуте, вы добавляете файл main.h из старого проекта в новый проект, а именно в папку Inc. Но в ней у меня уже есть этот файл весом 4КБ. Его заменить нужно, чтобы дальше выполнять урок?

Нет, теперь немного не так. Если есть main.h, то его лучше не трогать, а добавить в него необходимые файлы из старого проекта, и в следующий раз при создании проекта из прошлого не перезаписывать main.h.

Я так и сделал, добавил в него необходимые вещи согласно уроку. Но проект не собирается, он не может определить переменную tim6_counter.
Поэтому я вернул main.h в исходное состояние, и добавил в папку Inc файл maink.h (добавил букву всего лишь) и внёс все то, что вы вписывали в своем уроке в файл main.h (мой maink.h соответствовал вашему main.h), после этого все заработало.
Вопрос в том, не повлияет ли это на дальнейшие уроки, я к ним еще не приступал? приведу, внизу содержимое моего main.h, который я не стал трогать (может в него нельзя что-либо вносить)… * Define to prevent recursive inclusion ————————————-*/
#ifndef __MAIN_H__
#define __MAIN_H__ /* Includes ——————————————————————*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private define ————————————————————*/ /* ########################## Assert Selection ############################## */
/**
* @brief Uncomment the line below to expanse the «assert_param» macro in the
* HAL drivers code
*/
/* #define USE_FULL_ASSERT 1U */ /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ #ifdef __cplusplus
extern «C» #endif
void _Error_Handler(char *, int); #define Error_Handler() _Error_Handler(__FILE__, __LINE__)
#ifdef __cplusplus
>
#endif #endif /* __MAIN_H__ */

Читайте также:  Теория оптимизации линейное программирование

Здравствуйте!
Начинаю работать с STM32, решил для простоты использовать что-то готовое: NUCLEO-L452RE-P. Задался создать примитив, что-то вроде мигания встроенного светодиода от встроенной кнопки. Запустил CubeMX, всё по мануалам, но при команде GENERATE CODE получил по фейсу следующее:
«The Firmware Package (STM32Cube BW_L4 V1.14.0) or one of its dependencies required by the Project is not available in your STM32CubeMX Repository. Do you want to download this now?»
Соглашаюсь на доунлад. Но дальше опять в торец:
«Error downloading the following files: stm32cube_fw_v1140.zip (Not available). For unavailable files, you can load them manually with the «From Local» button».
Где искать эту секретную локаль буттон?
Что посоветуете? Где спрятан выход, и как его найти?
Спасибо

Если ещё актуально, то посмотрите в следующей папке:
«C:\Users\»Имя пользователя»\STM32Cube\Repository»
Там должен быть скачанный архив (с именем что-то вроде «STM32Cube_FW_F0_V1.11.0»), который система не смогла разархивировать. Разархивируйте его вручную. Папка с библиотеками должна иметь имя «STM32Cube_FW_F0_V1.11.0».

У вас для задержки в 500 мс вызывается HAL_Delay(500), а у меня приходится делать примерно HAL_Delay(128000) для той же задержки. При частоте SYSCLK 216 МГц. Почему так может быть, не подскажете?

Отбой. Работает нормально после нажатия на кнопку Reset на плате. Хотя галка «Reset and Run» стоит в настройках.

Добрый день поскажите возможно ли в КубМХ поменять процессор с тем же колличеством ног но разной памятью в готовом проекте. Допустим STM32f103c8 на STM32f103cb или нужно создавать новый проект и туда переносить код.

Источник

Оцените статью