PMP lab_1
.docxГУАП
КАФЕДРА № 43
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
Доцент, к.т.н. |
|
|
|
А.А. Ключарев |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №1 |
||||
Создание проекта и работа со средой программирования |
||||
по курсу: Программирование микропроцессоров |
||||
|
||||
|
РАБОТУ ВЫПОЛНИЛ
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2017
-
Задание к лабораторной работе
-
Придумайте и реализуйте любую последовательность мигания светодиодами, состоящую минимум из 4х разных состояний, используя в качестве основы созданный ранее проект.
1.2 Модифицируйте проект так, чтобы изменение состояний светодиодов выполнялось по нажатию и отпусканию кнопки.
-
Функции для работы с портами 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)
-
Переключение пинов
Переключить выбранные пины из текущего состояния в противоположное.
HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-
Листинг программы по пункту 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.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 микроконтроллера, изучен способ программирования светодиодов посредством записи в них значений шестнадцатиричной системы счисления (которые переводились в двоичную). Чтобы светодиод загорелся, ему в двоичной последовательности должна принадлежать единица.