Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

PMP lab_1

.docx
Скачиваний:
5
Добавлен:
06.06.2018
Размер:
32.33 Кб
Скачать

ГУАП

КАФЕДРА № 43

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Доцент, к.т.н.

А.А. Ключарев

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №1

Создание проекта и работа со средой программирования

по курсу: Программирование микропроцессоров

РАБОТУ ВЫПОЛНИЛ

подпись, дата

инициалы, фамилия

Санкт-Петербург 2017

  1. Задание к лабораторной работе

    1. Придумайте и реализуйте любую последовательность мигания светодиодами, состоящую минимум из 4х разных состояний, используя в качестве основы созданный ранее проект.

1.2 Модифицируйте проект так, чтобы изменение состояний светодиодов выполнялось по нажатию и отпусканию кнопки.

  1. Функции для работы с портами GPIO

2.1 Запись в порт

void HAL_GPIO_WritePin(GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

GPIO_PinState PinState можно указать:

GPIO_PIN_RESET

или

GPIO_PIN_SET

GPIO_Pin – пины состояния которых нужно изменить. Представляет из себя

целое беззнаковое 16-битное слово, где каждому биту соответствует пин.

Единичное значение бита означает применение действия к данному пину.

Таблица 2.1 – Пример применения пинов к работе.

2.2 Чтение порта

HAL_GPIO_ReadPin(GPIOA, uint16_t GPIO_Pin)

Пример – чтение состояния кнопки:

HAL_GPIO_ReadPin(GPIOA,B1_Pin)

    1. Переключение пинов

Переключить выбранные пины из текущего состояния в противоположное.

HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

  1. Листинг программы по пункту 1.1

int main(void) { uint16_t buff_Led; uint8_t Write_Pin = 0x55; char flag =0; HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { if (HAL_GPIO_ReadPin(GPIOA, B1_Pin) ==0) { HAL_Delay(100); if (flag ==0) { HAL_GPIO_WritePin(GPIOE,buff_Led, GPIO_PIN_RESET); flag = 1; Write_Pin = ((Write_Pin «1)|(Write_Pin»7)); buff_Led = Write_Pin «8; HAL_GPIO_writePin(GPIOE, buff_Led, GPIO_PON_SET); } } else { flag = 0; } } }

  1. Листинг программы по пункту 1.2

int main(void)

{

uint16_t buff_Led;

uint8_t Write_Pin =0x87;

//char flag =0;

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

while (1)

{

if (HAL_GPIO_ReadPin(GPIOA,B1_Pin) == 1)

{

HAL_Delay(100);

HAL_GPIO_WritePin(GPIOE,buff_Led, GPIO_PIN_RESET);

Write_Pin = ((Write_Pin <<1)|(Write_Pin >>7));

buff_Led = Write_Pin <<8;

HAL_GPIO_WritePin(GPIOE,buff_Led, GPIO_PIN_SET);

}

else

{

HAL_Delay(100);

HAL_GPIO_WritePin(GPIOE,buff_Led, GPIO_PIN_RESET);

Write_Pin = ((Write_Pin <<7)|(Write_Pin >>1));

buff_Led = Write_Pin <<8;

HAL_GPIO_WritePin(GPIOE,buff_Led, GPIO_PIN_SET);

}

}

}

Вывод

В ходе лабораторной работы были изучены основы работы со средой программирования, такие как: задание функции, условие. Были рассмотрены основные функции для работы с портами GPIO микроконтроллера, изучен способ программирования светодиодов посредством записи в них значений шестнадцатиричной системы счисления (которые переводились в двоичную). Чтобы светодиод загорелся, ему в двоичной последовательности должна принадлежать единица.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]