Изучение работы микроконтроллера

Проведение исследования схемы подключения микроконтроллера STM32F303VCTx. Анализ реализации программы "бегущий огонь" на линиях PE8-PE15. Характеристика изменения состояния светодиодов. Особенность перевода номера варианта в двоичную систему счисления.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид лабораторная работа
Язык русский
Дата добавления 28.10.2021
Размер файла 366,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство науки и высшего образования Российской Федерации

Федеральное государственное автономное образовательное учреждение высшего образования

«Южно-Уральский государственный университет»

(Национальный исследовательский университет)

Высшая школа электроники и компьютерных наук

Кафедра «Автоматика и управление» дисциплина: Микропроцессоры, микроконтроллеры и вычислительная техника.

Отчет

По лабораторной работе

Работу принял

Е.В. Вставская

Автор работы

студент группы КЭ-417

Хамрокулов Т.Х.

Челябинск 2021

Схема микроконтроллера STM32F303VCTx:

Рисунок 1 Схема подключения (порты ввода-вывода):

Рисунок 2

ХОД РАБОТЫ:

Основной файл программы:

/* USER CODE BEGIN Header */

/**

* @file : main.c

* @brief : Main program body

* @attention

* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.

* All rights reserved.</center></h2>

* микроконтроллер программа светодиод

* This software component is licensed by ST under BSD 3-Clause license,

* the "License"; You may not use this file except in compliance with the

* License. You may obtain a copy of the License at:

* opensource.org/licenses/BSD-3-Clause

/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/

#include "main.h"

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#include "app.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/

/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**

* @brief The application entry point.

* @retval int

*/

int main(void)

{

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration--------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */

HAL_Init();

/* USER CODE BEGIN Init */

AppInit();

/* USER CODE END Init */

/* Configure the system clock */

SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */

MX_GPIO_Init();

/* USER CODE BEGIN 2 */

MX_I2C1_Init();

/* USER CODE END 2 */

/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

/* USER CODE END WHILE */

AppWork();

/* USER CODE BEGIN 3 */

}

/* USER CODE END 3 */

}

/**

* @brief System Clock Configuration

* @retval None

*/

void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct = { 0 };

RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 };

/** Initializes the RCC Oscillators according to the specified parameters

* in the RCC_OscInitTypeDef structure.

*/

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

RCC_OscInitStruct.HSIState = RCC_HSI_ON;

RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Error_Handler();

}

/** Initializes the CPU, AHB and APB buses clocks

*/

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK

| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

{

Error_Handler();

}

}

/**

* @brief GPIO Initialization Function

* @param None

* @retval None

*/

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = { 0 };

/* GPIO Ports Clock Enable */

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOE_CLK_ENABLE();

/*Configure GPIO pin Output Level */

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_12

| GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15, GPIO_PIN_RESET);

/*Configure GPIO pin : PA0 */

GPIO_InitStruct.Pin = GPIO_PIN_0;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/*Configure GPIO pins : PE8 PE9 PE10 PE12

PE13 PE14 PE15 */

GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_12

| GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

/*Configure GPIO pin : PE11 */

GPIO_InitStruct.Pin = GPIO_PIN_11;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**

* @brief This function is executed in case of error occurrence.

* @retval None

*/

void Error_Handler(void)

{

/* USER CODE BEGIN Error_Handler_Debug */

/* User can add his own implementation to report the HAL error return state */

__disable_irq();

while (1)

{

}

/* USER CODE END Error_Handler_Debug */

}

#ifdef USE_FULL_ASSERT

/**

* @brief Reports the name of the source file and the source line number

* where the assert_param error has occurred.

* @param file: pointer to the source file name

* @param line: assert_param error line source number

* @retval None

*/

void assert_failed(uint8_t* file, uint32_t line)

{

/* USER CODE BEGIN 6 */

/* User can add his own implementation to report the file name and line number,

ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* USER CODE END 6 */

}

#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

Файл app.с

#include "main.h"

#include "app.h"

void AppInit()

{

}

void AppWork()

{

}

1. Реализовать программу «бегущий огонь» на линиях PE8…PE15. Изменение состояния светодиодов 1 раз в 500 мс.

#include "main.h"

#include "app.h"

void AppInit()

{

}

void AppWork()

{

uint16_t pin = 0x0100U;

for (int8_t i = 0; i < 8; i++) {

HAL_GPIO_WritePin(GPIOE, pin, GPIO_PIN_SET);

HAL_Delay(500);

HAL_GPIO_WritePin(GPIOE, pin, GPIO_PIN_RESET);

pin *= 2;

}

}

2. Реализуйте «бегущий огонь с накоплением» на линиях PE8…PE15. Изменение состояния светодиодов 1 раз в 500 мс.

#include "main.h"

#include "app.h"

void AppInit()

{

}

void AppWork()

{

uint16_t pin = 0x0100U;

for (int8_t i = 0; i < 8; i++) {

HAL_GPIO_WritePin(GPIOE, pin, GPIO_PIN_SET);

HAL_Delay(500);

pin = 1 + (pin * 2);

}

HAL_GPIO_WritePin(GPIOE, 0xFF00, GPIO_PIN_RESET);

HAL_Delay(500);

}

3. Составьте программу «инверсный бегущий огонь без накопления» на линиях PE8…PE15 (от старшего разряда к младшему). Изменение состояния светодиодов 1 раз в 500 мс.

#include "main.h"

#include "app.h"

void AppInit()

{

}

void AppWork()

{

uint16_t pin = 0x8000U;

for (int8_t i = 0; i < 8; i++) {

HAL_GPIO_WritePin(GPIOE, pin, GPIO_PIN_SET);

HAL_Delay(500);

HAL_GPIO_WritePin(GPIOE, pin, GPIO_PIN_RESET);

pin = pin / 2;

}

}

4. Реализовать бегущий огонь парами светодиодов на линиях PE8…PE15. Через каждые 0,5 секунды активная пара светодиодов смещается на 1 позицию в сторону старших разрядов.

#include "main.h"

#include "app.h"

void AppInit()

{

}

void AppWork()

{

for (int8_t i = 0; i < 7; i++)

{

HAL_GPIO_WritePin(GPIOE, 1 << (i + 8), GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE, 1 << (i + 9), GPIO_PIN_SET);

HAL_Delay(500);

HAL_GPIO_WritePin(GPIOE, 0xFF00, GPIO_PIN_RESET);

}

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_15, GPIO_PIN_SET);

HAL_Delay(500);

HAL_GPIO_WritePin(GPIOE, 0xFF00, GPIO_PIN_RESET);

}

5. Номер варианта перевести в двоичную систему счисления и показать на светодиодах на линиях PE8…PE15. (вариант 15)

#include "main.h"

#include "app.h"

void AppInit()

{

}

void AppWork()

{

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, GPIO_PIN_SET);

}

6. Номер варианта должен высвечиваться на светодиодах (см. п.5) в момент, когда кнопка нажата (и удерживается). (вариант 15)

#include "main.h"

#include "app.h"

void AppInit()

{

}

void AppWork()

{

if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)

{

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, GPIO_PIN_SET);

}

else

{

HAL_GPIO_WritePin(GPIOE, 0xFF00, GPIO_PIN_RESET);

}

}

7. Реализовать бегущий огонь по кнопке. Каждое нажатие кнопки приводит к смещению активного светодиода в сторону старших разрядов на линиях PE8…PE15. Отпускание кнопки не изменяет состояние светодиодов.

#include "main.h"

#include "app.h"

uint16_t i;

uint16_t flag;

void AppInit()

{

uint16_t i = 0;

uint16_t flag = 0;

}

void AppWork()

{

if ((HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) && (flag == 0))

{

HAL_GPIO_WritePin(GPIOE, 0xFF00, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOE, 1 << (i + 8), GPIO_PIN_SET);

i++;

i %= 8;

flag = 1;

}

else if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)

{

flag = 0;

}

}

Размещено на Allbest.ru


Подобные документы

  • Общие принципы разработки программно-аппаратного терминала с CAN-шиной, его основные физические интерфейсы. Структурная схема разрабатываемого устройства. Схема подключения микроконтроллера. Схема подключения микроконтроллера Atmega128 и для ПЭВМ.

    дипломная работа [1,4 M], добавлен 07.07.2011

  • Функциональная спецификация, описание объекта, структура системы и ресурсов микроконтроллера. Ассемблирование, программирование микроконтроллера и разработка алгоритма работы устройства, описание выбора элементной базы и работы принципиальной схемы.

    курсовая работа [2,2 M], добавлен 02.01.2010

  • Двоичные логические операции с цифровыми сигналами. Преобразование десятичных чисел в двоичную систему счисления. Применение шифратора. Изучение результатов исследований работы логических устройств с помощью программы схемотехнического моделирования.

    дипломная работа [868,1 K], добавлен 11.01.2015

  • Микропроцессорные системы и микроконтроллеры. Разработка схемы и программы микроконтроллера. Симуляция проекта в программе Proteus 7. Прерывание программы по внешнему сигналу, поступающему в процессор. Устройство и настройка канала порта на ввод-вывод.

    контрольная работа [551,8 K], добавлен 26.01.2013

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

    курсовая работа [667,0 K], добавлен 23.04.2015

  • Функциональная спецификация и структурная схема электронных автомобильных часов-термометра-вольтметра. Разработка алгоритма работы и принципиальной электрической схемы. Получение прошивки программы для памяти микроконтроллера в результате ассеблирования.

    курсовая работа [2,0 M], добавлен 26.12.2009

  • Разработка принципиальной схемы и описание работы контроллера клавиатуры/дисплея КР580ВД79. Схема сопряжения микроконтроллера с фотоимпульсным датчиком. Расчет потребляемого тока от источника питания. Блок-схема программы вывода информации на индикацию.

    курсовая работа [736,9 K], добавлен 18.02.2011

  • Разработка схемы без включения элементной базы с нужными функциональными узлами. Цоколевка корпуса МК51 и наименования выводов. Принцип работы датчиков под воздействием внешнего магнитного поля. Эффект Холла. Граф состояния системы микроконтроллера.

    курсовая работа [1,3 M], добавлен 08.03.2013

  • Понятие и функциональные особенности микроконтроллера, его структура и взаимодействие основных элементов, архитектура. Принципы работы светодиодного табло и порядок программирования микроконтроллера. Основные понятия и измерение надежности системы.

    курсовая работа [108,1 K], добавлен 29.03.2014

  • Исследование системы команд языка Assembler для микроконтроллера MSC-51. Выполнение каждого шага программы и фиксирование состояния регистров микроконтроллера с помощью скриншота экрана компьютера. Скриншоты работоспособности написанной программы.

    лабораторная работа [1,6 M], добавлен 18.05.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.