Лабораторная работа № 1: Создание проекта в среде разработки CubeMX и Keil .
Использование портов GPIO (портов ввода/вывода) для моргания светодиодов платы Discavery . Цель работы: выполнить проект для платы, рассмотреть их структуру; узнать принципы работы с портами ввода/вывода и их взаимодействие.
Контроллер STM32F407VG содержит пять 16-разрядных портов ввода/вывода общего назначения, которые обозначены как GPIOx, где x может иметь значения A, B, C, D, E. Каждый порт GPIO имеет четыре 32-битных регистра конфигурации (GPIOx_MODER, GPIOx_TYPER, GPIOx_SPEEDR, GPIOx_ORD), два 32-битных регистра данных (GPIOx_ODR, GPIOx_IDR) и два 32-битных регистра выбора дополнительных функций (GPIOx_AFRH и GPIOx_AFRL). Светодиоды, предназначенные для программирования, на плате подключены к порту D (рис. 7). Вывод РА0 нужно настроить на вход. Рис. 7. Остальные четыре светодиода выполняют служебные функции индикации и в программировании определенных действий не используются. Настраиваем в STM32CubeMX в Clock Configuration, включаем HSE (внешний генератор ВЧ) и т.д. …
Рис. 8. Конфигурируем микроконтроллер в STM32CubeMX, пример на рис.9. Рис.9. # Пример while (1) - \цикл бесконечный HAL_GPIO_ReadPin (GPIO(порт), GPIO_PIN_(номер пина) - обращение к пину HAL_GPIO_WritePin(GPIO(порт),GPIO_PIN_(номер пина),GPIO_PIN_SET) включение пина HAL_GPIO_WritePin(GPIO(порт),GPIO_PIN_(номер пина),GPIO_PIN_RESET)выключение пина else \изменение условия while (1) { { if ((HAL_GPIO_ReadPin (Button_GPIO_Port,Button_Pin))==1) { HAL_Delay(1000); HAL_GPIO_WritePin(GPIOD, Led4_Pin, GPIO_PIN_SET); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOD, Led4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD, Led3_Pin, GPIO_PIN_RESET); } else { HAL_GPIO_WritePin(GPIOD, Led3_Pin, GPIO_PIN_SET); } Пример программы
Рассмотрим программу, которая демонстрирует работу с портами ввода/вывода. Она позволяет включать/выключать светодиоды при нажатии кнопки USER, которая находится на отладочной плате. /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_ADC_Init(void); static void MX_LCD_Init(void); static void MX_TS_Init(void); /* USER CODE BEGIN WHILE */ while (1) { for(int i=0; i<10; i++) { //HAL_GPIO_Init(PD12_GPIO_Port, &GPIO_InitStruct); switch(i) {case(4): HAL_GPIO_WritePin(GPIOD, LD5_Pin, GPIO_PIN_SET); HAL_Delay(100); HAL_GPIO_WritePin(GPIOD, LD5_Pin, GPIO_PIN_RESET); HAL_Delay(100); case(1): HAL_GPIO_WritePin(GPIOD, LD6_Pin, GPIO_PIN_SET); HAL_Delay(100); HAL_GPIO_WritePin(GPIOD, LD6_Pin, GPIO_PIN_RESET); HAL_Delay(100); } } } /*HAL_GPIO_WritePin(GPIOD, LD6_Pin, GPIO_PIN_SET); HAL_Delay(100); HAL_GPIO_WritePin(GPIOD, LD6_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, LD5_Pin, GPIO_PIN_SET); HAL_Delay(100); HAL_GPIO_WritePin(GPIOD, LD5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD, LD3_Pin, GPIO_PIN_SET); HAL_Delay(100); HAL_GPIO_WritePin(GPIOD, LD3_Pin, GPIO_PIN_RESET); */ /* USER CODE END WHILE */ MX_USB_HOST_Process();
while (1) { { if ((HAL_GPIO_ReadPin (Button_GPIO_Port,Button_Pin))==1) { HAL_Delay(1000); HAL_GPIO_WritePin(GPIOD, Led4_Pin, GPIO_PIN_SET); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOD, Led4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD, Led3_Pin, GPIO_PIN_RESET); } else { HAL_GPIO_WritePin(GPIOD, Led3_Pin, GPIO_PIN_SET); }
} ` } int i=1; while (1) { if (HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_0)==1) { HAL_GPIO_ReadPin (GPIOD, GPIO_PIN_12); HAL_Delay(2000); for(i;i<=5;i++) { HAL_GPIO_WritePin (GPIOD, GPIO_PIN_12,GPIO_PIN_SET); HAL_Delay(2000); HAL_GPIO_WritePin (GPIOD, GPIO_PIN_12,GPIO_PIN_RESET); HAL_Delay(2000); } } while (1) - цикл бесконечный HAL_GPIO_ReadPin (GPIO(порт), GPIO_PIN_(номер пина) - обращение к пину HAL_GPIO_WritePin(GPIO(порт),GPIO_PIN_(номер пина),GPIO_PIN_SET) включение пина HAL_GPIO_WritePin(GPIO(порт),GPIO_PIN_(номер пина),GPIO_PIN_RESET)выключение пина else изменение условия /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ int a = 0; while (1) { /* USER CODE END WHILE */ HAL_Delay(500); /* USER CODE END WHILE */ if(a%3 ==0) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET); HAL_Delay(3000); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET); } else{ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET); HAL_Delay(3000); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET); } a++; /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } Порядок работы 1. На основе примера написать свой код в среде разработки и скомпилировать его. 2. Ознакомиться с работой программы. 3. Создать новый проект в среде CubeMX и Keil. 4. Скомпилировать код на плату и проверить работу на отладочной плате Discavery.
Популярное: Почему стероиды повышают давление?: Основных причин три... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (444)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |