Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2743
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

Инструмент STM32CubeMX

126

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

/* USER CODE BEGIN 1 */

...

/* USER CODE END 1 */

Для чего данные комментарии? CubeMX разработан таким образом, что если вы измените аппаратную конфигурацию, вы сможете восстановить код проекта без потери добавленных вами фрагментов кода. Размещение вашего кода внутри этих «охраняемых регионов» должно гарантировать, что вы не утратите свою работу. Тем не менее, я должен признать, что CubeMX часто портит созданные файлы, и пользовательский код стирается. Поэтому я предлагаю всегда создавать другой отдельный проект и копировать и вставлять измененный код в файлы приложения. Это также дает вам полный контроль над вашим кодом.

4.3.1. Добавим что-нибудь полезное в микропрограмму

Теперь, когда мы освоили код, сгенерированный CubeMX, мы можем добавить чтонибудь полезное в функцию main(). Мы добавим код, необходимый для мигания светодиода LD2, когда пользователь нажимает синюю кнопку Nucleo, подключенную к PC13.

Имя файла: src/main.c

72while (1) {

73if(HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin) == GPIO_PIN_RESET) {

74

while(1) {

75

HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);

76

HAL_Delay(500);

77

}

78}

79}

В строке 72 находится бесконечный цикл, который ожидает, пока HAL_GPIO_Read-

Pin(B1_GPIO_Port, B1_Pin) повторно переключит значение GPIO_PIN_RESET, то есть поль-

зователь нажмет синюю кнопку. Когда это происходит, микроконтроллер входит в другой бесконечный цикл, где вывод LD2_Pin переключается каждые 500 мс. Макросы

LD2_Pin, B1_GPIO_Port и B1_Pin определены в файле main.h.

Почему мы должны проверять, когда сигнал на PC13 становится низким (то есть HAL_GPIO_ReadPin() возвращает состояние GPIO_PIN_RESET), чтобы обнаружить, что кнопка была нажата?

Ответ исходит из схемы Nucleo. Глядя ниже, мы видим, что одна сторона кнопки подключена к земле, а резистор R30 подтягивает вывод микроконтроллера к питанию, когда кнопка не нажата.