Курс "Микропроцессорные устройства"

Кафедра Промышленная электроника НИУ МЭИ.

Оглавление

Преподаватели

Александр Николаевич Смирнов

Электронная почта: smirnovalnik@mpei.ru

Практические занятия и лабораторные работы проводятся преподавателями выпускающих кафедр.

Обзор курса

Курс предначен для студентов бакалавриата четвертого года обучения факультета электронной техники. Курс знакомит с основами микропроцессорной техники, программированию микроконтроллеров на языке Ассемблер и C.

Цели

Целями первой части курса являются:

  • изучение принципов построения микропроцессорных устройств
  • изучение языка программирования Ассемблер и его применения для встраиваемых микропроцессорных систем

Целями второй части курса являются:

  • изучение периферийных модулей микроконтроллера STM32F072RBT6
  • изучение языка программирования C и его применения для встраиваемых микропроцессорных систем

Предварительные требования

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

Структура курса

Курс состоит из двух частей: осенний семестр (часть 1) и весенний семестр (часть 2).

Часть 1 Основы микропроцессорной техники

  • Лекции
    • Лекция №1: Принципы организации цифровых систем управления и преобразования цифровых сигналов
    • Лекция №2: Структура микропроцессорной системы
    • Лекция №3: Память в микропроцессорной системе
    • Лекция №4: Память в микропроцессорной системе
    • Лекция №5: Устройства ввода/вывода
    • Лекция №6: Система команд центрального процессора
    • Лекция №7: Система команд центрального процессора
    • Лекция №8: Структура центрального процессора
    • Лекция №9: Структура центрального процессора
    • Лекция №10: Структура центрального процессора
    • Лекция №11: Карта памяти и селектор адреса
    • Лекция №12: Исключения и прерывания
    • Лекция №13: Прямой доступ к памяти
    • Лекция №14: Модульный принцип построения микроконтроллера
    • Лекция №15: Системные модули микроконтроллера
    • Лекция №16: Подсистема тактирования микроконтроллера
  • Практические занятия
    • Практическое занятие №1: Команды загрузки данных (пример)
    • Практическое занятие №2: Команды обработки данных (пример)
    • Практическое занятие №3: Команды ветвления (пример)
    • Практическое занятие №4: Команды вызова подпрограмм (пример)
    • Практическое занятие №5: Поиск наибольшего элемента в массиве (пример)
    • Практическое занятие №6: Сортировка массива (пример)
    • Практическое занятие №7: Порт ввода/вывода общего назначения (пример)
    • Практическое занятие №8: Мигающий светодиод (пример)
  • Лабораторные работы
    • Лабораторная работа №1: Команды обработки данных и загрузки данных (пример)
    • Лабораторная работа №2: Поиск элеметов в массиве данных (пример)
    • Лабораторная работа №3: Обработка массива данных (пример)
    • Лабораторная работа №4: Логическая функция (пример)
  • Зачет с оценкой

Часть 2 Микроконтроллер и периферийные модули

  • Лекции
    • Лекция №1: Микроконтроллер
    • Лекция №2: Порты ввода/вывода общего назначения
    • Лекция №3: Подсистема прерываний
    • Лекция №4: Аналоговый ввод/вывод
    • Лекция №5: Таймер-счетчик общего назначения
    • Лекция №6: Каналы выходного сравнения таймера-счетчика
    • Лекция №7: Каналы входного захвата таймера-счетчика
    • Лекция №8: Последовательный ввод/вывод: UART
    • Лекция №9: Последовательный ввод/вывод: SPI
    • Лекция №10: Последовательный ввод/вывод: I2C
    • Лекция №11: Последовательный ввод/вывод: CAN
    • Лекция №12: Контроллер прямого доступа к памяти
    • Лекция №13: Подсистема тактирования
  • Практические занятия
    • Практическое занятие №1: Язык программирования C (пример)
    • Практическое занятие №2: Порты ввода/вывода МК (пример)
    • Практическое занятие №3: Подсистема аналогового ввода/вывода МК (пример)
    • Практическое занятие №4: Подсистема прерываний МК (пример)
    • Практическое занятие №5: Подсистема реального времени МК: "бегущий огонь" (пример)
    • Практическое занятие №6: Подсистема реального времени МК: регулирование яркости (пример)
    • Практическое занятие №7: Подсистема последовательного ввода/вывода МК: UART (пример)
    • Дополнительное практическое занятие №1: Подсистема последовательного ввода/вывода МК: I2C (пример)
    • Дополнительное практическое занятие №2: Подсистема последовательного ввода/вывода МК: SPI (пример)
  • Лабораторные работы
    • Лабораторная работа №1: Язык программирования C (пример)
    • Лабораторная работа №2: Подсистема аналогового ввода/вывода МК (пример)
    • Лабораторная работа №3: Подсистема реального времени МК (пример)
    • Лабораторная работа №4: Подсистема последовательного ввода/вывода МК: UART (пример)
  • Экзамен

Лекции

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

Практические занятия

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

Лабораторные работы

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

Выполнение лабораторных работ предполагает предварительную самостоятельную подготовку: создание проекта и написание исходных текстов программы.

Лабораторные работы №1, №2, №3 первой части и №1 второй части могут быть выполнены на симуляторе. Остальные работы выполняются на учебном стенде.

Зачет и экзамен

Первая часть курса заканчивается зачетом с оценкой, вторая - экзаменом.

Материалы курса

Материалы курса размещены на сайте GitHub, который является большим хранилищем программ (исходных текстов) под управлением системы контроля версий git.

Репозиторий непрерывно обновляется и поэтому рекомендуется периодически "подтягивать" изменения.

Если вы не знакомы с git, то можете скачивать архив проекта по указанной ниже инструкции.

Клонирование репозитория

git clone https://github.com/smirnovalnik/microprocessor-units-course.git

Загрузка репозитория в виде zip архива

Перечень директорий репозитория

  • docs - различная документация
    • arm_official - официальная документация (технические описания, руководства и т.д.) на процессор ARM Cortex-M0
    • asm_lang - шпаргалка по ассемблеру ARM
    • c_lang - шпаргалка по языку C
    • learning_stand - документация (спецификации, схемы электрические принципиальные, сборочные чертежи) на Учебный стенд
    • mcu_st_official - официальная документация (технические описания, руководства и т.д.) на МК STM32F072RBT6 на английском языке
    • peripheral - описание регистров специальных функций МК STM32F072RBT6
    • misc - различные полезные документы
  • exam - вопросы к зачету и экзамену, примеры билетов
  • examples - примеры лабораторных работ и задачи для практических занятий
    • part1 - для первой части курса
      • labs - примеры лабораторных работ
      • workshop - примеры, разобранные на практических занятиях
    • part2 - для второй части курса
      • labs - примеры лабораторных работ
      • workshop - примеры, разобранные на практических занятиях
  • hardware - исходные файлы проекта Учебный стенд в Altium Designer
  • img - различные картинки используемые в README файлах
  • lectures - слайды и тексты программ лекций
  • programs - программы для установки на ПК
  • tests - проекты для тестирования Учебного стенда
  • templates - шаблоны проектов

Литература

  • Харрис Сара Л., Харрис Дэвид М. "Цифровая схемотехника и архитектура компьютера: RISC-V"
  • Харрис Сара Л., Харрис Дэвид М. "Цифровая схемотехника и архитектура компьютера. Дополнение по архитектуре ARM"
  • Угрюмов Е. П. "Цифровая схемотехника"
  • Joseph Yiu "The Definitive Guide to ARM Cortex-M0 and Cortex-M0+ Processors 2nd Edition"
  • Козаченко В.Ф., Алямкин Д.И., Анучин А.С., Жарков А.А., Лашкевич М.М., Савкин Д.И., Шпак Д.М. "Практический курс микропроцессорной техники на базе процессорных ядер ARM-Cortex-M3/M4/M4F"
  • Для обучения программированию на языке C обязательна к прочтению и решению всех упражнений книга Керниган Б., Ритчи Д. "Язык программирования C" 2-е издание.

Полезные ссылки

Учебный стенд

Конструктивно стенд состоит из нескольких плат с электронными компонентами: отладочная плата STM32F072B-DISCO, основная плата, ЖК индикатор, модуль беспроводной передачи данных.

Основная плата содержит исполнительные устройства и устройства ввода для микропроцессорного контроллера. Эта плата разработана на кафедре Промышленной Электроники НИУ МЭИ.

Отладочная плата STM32F072B-DISCO содержит изучаемый МК STM32F072RBT6, а также программатор ST-LINK/V2. Программатор позволяет загружать коды программы для микроконтроллера, которые подготовлены в ПК, в постоянную память МК и затем наблюдать на экране монитора ПК за исполнением этой программы микроконтроллером.

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

  1. Отладочная плата STM32F072B-DISCO
  2. Цифро-буквенный ЖКИ индикатор со встроенным контроллером
  3. Переключатели для смены периферийных устройств
  4. Выходы ЦАП с разъемом BNC
  5. Вход АЦП по SPI с разъемом BNC
  6. Вход АЦП с разъемом BNC
  7. 16 RGB светодиодов (D1-D16)
  8. Переключатели для выбора канала АЦП между входами BNC и потенциометрами POT1, POT2
  9. Потенциометры (POT1 и POT2)
  10. Клавиатура, состоящая из 16 тактовых кнопок без фиксации
  11. Тактовые кнопки без фиксации (SB1-SB4)
  12. Переключатели (SW1-SW4)
  13. 4-х разрядный семисегментный индикатор
  14. Разъем для SD карты
  15. Разъем CAN
  16. Разъем USB-UART
  17. Разъем питания
  18. Модуль передачи данных (ZigBee, Wi-Fi, Bluetooth)

Установка и настройка инструментов разработки

Keil uVision5

Разработка программ для микроконтроллера проводится в интегрированной среде разработки (Integrated Development Environment - IDE) Keil MDK Lite Edition. Для загрузки потребуется регистрация на сайте Keil. Процесс установки ничем не отличается от установки любой другой программы для Windows.

💡 Примечание: Избегайте русскоязычных названий директорий как в пути установки программы, так и в путях к вашим проектах. Некоторые компоненты среды разработки могут не работать.

Эта версия обладает практически полной функциональностью профессиональной версии, но с ограничением на размер скомпилированной программы в 32 кБайта. Для лабораторных работ и практических занятий данного курса этого более чем достаточно.

В Keil MDK Lite Edition есть симулятор, поэтому работу программы можно проверить без отладочной платы. Однако данный симулятор поддерживает только центральный процессор, но не периферийные модули микроконтроллера.

Keil MDK Lite Edition изначально ничего не знает о микроконтроллерах фирмы ST. Поэтому потребуется скачать и установить пакет с библиотеками для stm32f0 по ссылке Keil.STM32F0xx_DFP.2.1.0.pack.

Создание нового проекта для языка Ассемблер в Keil uVision5

Создание нового проекта для языка C в Keil uVision5

Настройка подключения ST-Link в Keil uVision5

Настройка симулятора

Работа в отладчике

Исправление ошибки загрузки программы в Keil uVision5

vscode gcc

💡 Примечание: Использование инструментов gcc и vscode не обязательно. Все примеры практических задач и лабораторных работ сопровождаются проектом в Keil uVision5.

Установка всех компонентов будет происходить в командной строке. Последовательность действий зависит от операционной системы.

Для работы потребуется кросс-компилятор arm-none-eabi-gcc, утилита сборки make, отладчик openocd и текстовый редактор Visual Studio Code с расширениями.

Windows

Открыть командную строку в режиме администратора.

  • Скачать и установить пакетный менеджер Chocolatey

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

    Установка выполняется командой:

    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

    Проверить установку следует командой:

    choco --version

    Если установка прошла успешно, то в командной строке напечатается версия программы, например

    0.10.15
  • Установить кросс-компилятор arm-none-eabi-gcc и другие инструмент:

    choco install gcc-arm-embedded
    choco install make
    choco install openocd

    Проверка правильности установки:

    make --version
    arm-none-eabi-gcc --version
    openocd --version

    Каждая команда должна вернуть свою версию.

  • Скачать и установить текстовый редактор vscode.

Linux

  • Установка в системах с пакетным менеджером apt:

    sudo apt install bin-utils
    sudo apt install arm-none-eabi-gcc
    sudo apt install openocd

    Проверка правильности установки:

    make --version
    arm-none-eabi-gcc --version
    openocd --version

    Каждая команда должна вернуть свою версию.

  • Скачать и установить текстовый редактор vscode.

MacOS

  • Установка в системах с пакетным менеджером brew:

    brew tap ArmMbed/homebrew-formulae
    brew install arm-none-eabi-gcc
    brew install openocd

    Проверка правильности установки:

    make --version
    arm-none-eabi-gcc --version
    openocd --version

    Каждая команда должна вернуть свою версию.

  • Скачать и установить текстовый редактор vscode.

Текстовый редактор vscode

Инструкция применима для всех операционных систем.

Загрузить и установить с сайта версию Visual Studio Code в соответствие с вашей операционной системой.

Установить расширения (extensions):

  • Для работы с кодом на языке C/C++ - C/C++ for Visual Studio Code

  • Для визуализации отладки - Cortex-Debug

  • Для подсветки синтаксиса ассемблера - Arm Assembly

  • Для подсветки синтаксиса скрипта компоновщика - LinkerScript

Ошибки и опечатки

Если вы нашли ошибки или опечатки просьба сообщать о них через issues в GitHub или писать на почту smirnovalnik@mpei.ru.

Если вы хотите улучшить содержание репозитория, то можете создать pull request на добавление ваших изменений.