Мегаобучалка Главная | О нас | Обратная связь


Лабораторная работа № 1: Создание проекта в среде разработки CubeMX и Keil .



2020-02-04 444 Обсуждений (0)
Лабораторная работа № 1: Создание проекта в среде разработки CubeMX и Keil . 0.00 из 5.00 0 оценок




Использование портов 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.

 



2020-02-04 444 Обсуждений (0)
Лабораторная работа № 1: Создание проекта в среде разработки CubeMX и Keil . 0.00 из 5.00 0 оценок









Обсуждение в статье: Лабораторная работа № 1: Создание проекта в среде разработки CubeMX и Keil .

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (444)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)