ЛЕКЦИЯ № 15. Регистры / Информатика и информационные технологии: конспект лекций

ЛЕКЦИЯ № 15. Регистры / Информатика и информационные технологии: конспект лекций Компьютер

Как настроить нужные нам пины gpio для того чтобы можно было включить светодиод?

Итак, мы знаем что нужные нам светодиоды подключены к порту GPIOC к пинам PC8 и PC9. Нам нужно настроить их в такой режим, чтобы загорался светодиод. Хотелось бы сразу же сделать оговорку, что порты GPIO мы рассмотрим подробнее в другой статье и тут мы сконцентрируемся именно на работе с регистрами.

Первым делом нам нужно перевести режим работы пинов PC8 и PC9 в режим Output. Остальные параметры порта можно оставить по умолчанию. Переходим в Reference Manual в раздел 9. General-purpose I/Os (GPIO) и открываем пункт отвечающий за режим работы пинов порта GPIO и видим что за этот параметр отвечает регистр MODER:


Судя по описанию, для установки пинов PC8 и PC9 в режим Output мы должны записать 01 в соответствующие поля регистра GPIOC.

Это можно сделать через прямую установку с помощью числовых значений:

  1. Формируем число для записи:
  2. Присваиваем это значение нашему регистру:
    /* Настраиваем режим работы портов PC8 и PC9 в Output*/
    GPIOC->MODER |= 0x50000;
    

Или через использование определений из библиотеки:

/* Включаем тактирование на порту GPIO */
GPIOC->MODER |= GPIO_MODER_MODER8_0 | GPIO_MODER_MODER9_0;


После данной инструкции наши пины PC8 и PC9 перейдут в режим Output.

Основные регистры процессора, совместимого с intel 386

IP (англ. Instruction Pointer ) — регистр, обозначающий смещение следующей команды относительно кодового сегмента.

IP — 16-битный (младшая часть EIP)

EIP — 32-битный аналог

Сегментные регистры — Регистры указывающие на сегменты.

CS — указатель на кодовый сегмент. Связка CS:IP указывает на адрес в памяти следующей команды.

Регистры данных — служат для хранения промежуточных вычислений.

RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15 — 64-битные

EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP — 32-битные (extended AX)

AX, BX, CX, DX — 16-битные

AH, AL, BH, BL, CH, CL, DH, DL — 8-битные (половинки 16-ти битных регистров)

RAXRBXRCXRDX
——EAX——EBX——ECX——EDX
————AX————BX————CX————DX
————AHAL————BHBL————CHCL————DHDL

Регистр флагов EFLAGS — содержит текущее состояние процессора.

Регистром называется функциональный узел, осуществляющий приём, хранение и передачу информации. Регистры состоят из группы триггеров, обычно D. По типу приёма и выдачи информации различают 2 типа регистров:

Сдвиговые регистры представляют собой последовательно соединённую цепочку триггеров. Основной режим работы — сдвиг разрядов кода от одного триггера к другому на каждый импульс тактового сигнала.

По назначение регистры различаются на:

Смотреть что такое «регистры процессора» в других словарях:

Архитектура процессора — количественная составляющая компонентов микроархитектуры вычислительной машины (процессора компьютера) (например, регистр флагов или регистры процессора), рассматриваемая IT специалистами в аспекте прикладной деятельности. С точки зрения… … Википедия

Регистр процессора — Эта статья включает описание термина «IP»; см. также другие значения. Регистр процессора блок ячеек памяти, образующий сверхбыструю оперативную память (СОЗУ) внутри процессора; используется самим процессором и большой частью недоступен… … Википедия

Кэш процессора — Кэш микропроцессора кэш (сверхоперативная память), используемый микропроцессором компьютера для уменьшения среднего времени доступа к компьютерной памяти. Является одним из верхних уровней иерархии памяти[1] … Википедия

Кэш центрального процессора — Кэш (англ. cache[1], произносится kæʃ кЭш) промежуточный буфер с быстрым доступом, содержащий копию той информации, которая хранится в памяти с менее быстрым доступом, но с наибольшей вероятностью может быть оттуда запрошена. Доступ к данным в… … Википедия

Моделезависимые регистры — (Model Specific Registers, MSR) cпециальные регистры процессоров архитектуры x86, наличие и назначение которых варьируется от модели к модели процессора. Программно доступны при помощи команд RDMSR и WRMSR. Адресуются 32 битным индексом,… … Википедия

Регистр (цифровая техника) — У этого термина существуют и другие значения, см. Регистр. 4 х разрядный сдвиговый регистр, преобразователь последовательного кода в параллельный и обратно Регистр последовательное или параллельное … Википедия

РОН (электроника) — Регистр процессора сверхбыстрая память внутри процессора, предназначенная прежде всего для хранения промежуточных результатов вычисления (регистр общего назначения/регистр данных) или содержащая данные, необходимые для работы процессора … … Википедия

Регистр (вычислительная техника) — Регистр процессора сверхбыстрая память внутри процессора, предназначенная прежде всего для хранения промежуточных результатов вычисления (регистр общего назначения/регистр данных) или содержащая данные, необходимые для работы процессора … … Википедия

Motorola 6809 — > Центральный процессор Процессор Motorola 6809E с рабочей частотой 1 МГц, выпущен в 1983 году … Википедия

Иерархия памяти — Пирамида иерархии памяти. По левой грани обозначены размер и емкость, по центру требование постоянного электропитания и длительность хранения, справа пример памяти данного уровня, скорос … Википедия

Источник

Как включить светодиод?

Если мы обратим внимание на список доступных регистров для управления портом GPIO то можем увидеть регистр ODR:

Каждый из соответствующих битов отвечает за один из пинов порта. Его структуру вы можете увидеть ниже:


Для того, чтобы обеспечить попеременную смену состояний светодиодов надо с определенным временным интервалом включать/выключать 8 и 9 биты. То есть попеременно присваивать регистру значение 0x100 и 0x200.

Сделать это мы можем через прямое присвоение значений регистру:

GPIOC->ODR = 0x100; // Зажигаем PC8, гасим PC9
GPIOC->ODR = 0x200; // Зажигаем PC9, гасим PC8

Можем через использование определений из библиотеки:

GPIOC->ODR = GPIO_ODR_8; // Зажигаем PC8, гасим PC9
GPIOC->ODR = GPIO_ODR_9; // Зажигаем PC9, гасим PC8

Но так как микроконтроллер работает очень быстро — мы не будем замечать смены состояний светодиодов и визуально будет казаться что они оба горят постоянно. Для того чтобы они действительно моргали попеременно мы внесем искусственную задержку в виде цикла который займет МК бесполезными вычислениями на некоторое время. Получится следующий код:

/* Зажигаем светодиод PC8, гасим PC9 */
GPIOC->ODR = GPIO_ODR_8;
for (int i=0; i<500000; i  ){}	// Искусственная задержка
					
/* Зажигаем светодиод PC9, гасим PC8 */
GPIOC->ODR = GPIO_ODR_9;
for (int i=0; i<500000; i  ){}	// Искусственная задержка


На этом первоначальное знакомство с регистрами и методами работы с ними мы можем закончить.

Как включить тактирование на нужный порт gpio?

В целом, любая работа с периферией в микроконтроллерах STM32 сводится к стандартной последовательности действий:

  1. Включение тактирования соответствующего периферийного модуля. Осуществляется это через регистр RCC путем подачи тактового сигнала напрямую с шины на которой находится данный модуль. По умолчанию тактирование всей периферии отключено для минимизации энергопотребления.
  2. Настройка через управляющие регистры, путем изменения параметров специфичных для конкретного периферийного устройства
  3. Непосредственный запуск и использование результатов работы модуля

То есть, для начала работы нам нужно запустить тактирование на порт GPIOC. Это делается напрямую через обращение к регистру RCC отвечающему за тактирование всего и вся и включению тактового сигнала с шины, к которой подключен наш порт GPIO.

Внимание! Вопрос касательно системы тактирования, её настройки и использования мы подробно рассмотрим в отдельной статье.

Найти к какой шине подключен наш порт GPIOC можно найти в Datasheet’е на наш МК в разделе Memory Mapping в Таблице 16. STM32F051xx peripheral register boundary addresses.

Как вы уже успели заметить, необходимая нам шина именуется как AHB2. Для того чтобы подробнее ознакомиться с регистром, в котором включается тактирование на нужный нам порт GPIO на шине AHB, надо перейти в соответствующий раздел в Reference Manual. По названию регистров мы можем определить тот, который нужен нам:

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


Смотрим на таблицу и видим нечто напоминающее опции включения тактирования на портах GPIO. Переходим к описанию и находим нужную нам опцию:

Соответственно если мы установим 19 бит в значение «1» то это обеспечит включение тактирования на порт I/O C – то есть на наш GPIOC. К тому же — нам нужно включить отдельно один бит из группы, не затрагивая остальные т.к. мы не должны мешать и изменять без надобности другие настройки.

Основываясь на материалах прошлого урока, мы знаем что для того чтобы выставить определенный бит нужно используя логическую операцию «ИЛИ» сложить текущее значение регистра с маской которая содержит те биты которые необходимо включить. Например, сложим значение регистра RCC->AHBENR по умолчанию, т.е. 0x14 и число 0x80000 тем самым включим тактирование GPIOC путем установки 19 бита:

Каким образом мы можем это сделать из программы? Всё достаточно просто. В данном случае у нас два варианта:

  1. Запись в регистр напрямую численного значения регистра напрямую через его адрес.
  2. Настройка с использованием библиотеки CMSIS

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

То есть, мы могли бы обращаться к адресам регистров напрямую по адресу и написать так:

__IO uint32_t * register_address = (uint32_t *) 0x40021014U; // Адрес нашего регистра в памяти	
*(__IO uint32_t *)register_address |= 0x80000; // Включаем 19 бит с нашим параметром

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

Классификация

● накопительные (регистры памяти, хранения);

В свою очередь сдвигающие регистры делятся:

● по способу ввода-вывода информации на параллельные, последовательные, комбинированные;

● по направлению передачи информации на однонаправленные, реверсивные.

Память и регистры


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

что же это такое

В целом, регистр — это особый вид памяти внутри микроконтроллера, который используется для управления процессором и периферийными устройствами. Каждый регистр в архитектуре ARM представляет собой ячейку памяти и имеет длину в 32 бита, где каждый бит можно представить в виде крошечного выключателя с помощью которого осуществляется управление тем или иным параметром микроконтроллера.

Каждый из регистров имеет свой порядковый номер – адрес. Адрес регистра обозначается 32-битным числом представленным в шестнадцатеричной системе счисления. Путём записи по адресу регистра определённой комбинации единиц и нулей, которые обычно представлены в шестнадцатеричном виде, осуществляется настройка и управление тем или иным узлом в МК.

Вспомним, что в программе для работы с битовыми операциями, мы могли представить в виде шестнадцатеричного числа произвольный набор единиц и нулей. В целом стоит отметить, что существует два вида регистров: регистры общего назначения и специальные регистры. Первые расположены внутри ядра МК, а вторые являются частью RAM-памяти.

Так же стоит отметить, что Reference Manual, который мы скачивали в первом уроке, это один большой справочник по регистрам, содержащимся в целевом микроконтроллере, а библиотека CMSIS позволяет нам оперировать символьными именами регистров вместо числовых адресов.

Итак, обычно структура регистра описывается в виде небольшой таблицы с указанием:

  1. Названия регистра и описания его назначения
  2. Адреса регистра или смещением относительно базового адреса
  3. Значения по умолчанию после сброса
  4. Типа доступа к ячейкам регистра (чтение, запись, чтение/запись)
  5. Значения и описания параметров записываемых битов


Давайте рассмотрим пример работы с регистрами в конкретной ситуации, чтобы получить общее представление о принципах настройки микроконтроллера.

Примечания

Микроконтроллеры

Архитектура
8-bitMCS-51 • MCS-48 • AVR • Z8 • H8 • COP8 • 68HC08 • 68HC11
16-bitPIC24 • MAXQ • Nios • 68HC12 • 68HC16
32-bitARM • PIC32MX • 683XX • M32R •
fec2801f6aa8045c7900cd5a77a318f5ПроизводителиAnalog Devices • Fujitsu • Holtek • Infineon • MicroChip • Maxim • Parallax • Texas Instruments • ZilogКомпонентыРегистр • Прерывание • CPU • SRAM • Флеш-память • кварцевый резонатор • кварцевый генератор • RC-генератор • КорпусПериферияТаймер • АЦП • ЦАП • Компаратор • ШИМ контроллер • Счётчик • LCD • Датчик температуры • Watchdog TimerИнтерфейсCAN • UART • SPI • I²C • ОСμClinux • BeRTOS • ChibiOS/RT • RTEMS • Unison • MicroC/OS-II • ПрограммированиеПрограмматор • Ассемблер • MPLAB • AVR Studio • MCStudio

Проверка результатов работы нашего кода

Небольшое приятное дополнение в конце статьи: в Keil имеется отличный Debug-инструмент с помощью которого мы можем пошагово выполнить нашу программу и просмотреть текущее состояние любого периферийного блока. Для этого после загрузки прошивки после компиляции мы можем нажать кнопку Start Debug Session:

Рабочая среда Keil переключится в режим отладки. Мы можем управлять ходом программы с помощью данных кнопок:

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

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

Если вы кликните по одному из пунктов данного меню, вы увидите адрес регистра и его краткое описание. Так же можно просмотреть описание к каждому отдельному параметру регистра:

Попробуйте самостоятельно пошагово выполнить программу, включить/выключить светодиоды не используя программу, а используя данный режим работы с микроконтроллером. Простор для фантазии тут обширный. Так же попробуйте поиграться с длительностями задержек, сделайте одновременное моргание обоими светодиодами. В общем экспериментируйте! )

Источник

Продолжаем рассмотрение базовых вопросов

мы рассмотрели работу с битовыми операциями и двоичными числами, тем самым заложив основу для рассмотрения новой темы. В этом уроке мы с Вами рассмотрим очередной вопрос:

что такое регистры и как с ними работать

Список статей:

  1. Начинаем изучать STM32 или Управляем светом по-умному
  2. Начинаем изучать STM32: битовые операции
  3. Начинаем изучать STM32: Что такое регистры? Как с ними работать?

Разбор кода из первого занятия

Итак, давайте вспомним задачу, которую мы решили на

используя готовый код примера: нам было необходимо написать программу, которая бы обеспечила попеременное включение двух светодиодов на плате Discovery (возможно и не двух, если у вас другая версия платы Discovery) с временным интервалом.

Давайте еще разок взглянем на код программы, которую мы использовали для того, чтобы заставить наш МК дрыгать двумя ногами на которых расположены наши светодиоды:

Первым делом, при работе с STM32, даже для такой простой задачи как включение и выключение светодиода нам необходимо предварительно ответить на ряд вопросов:

  1. Куда подключены наши светодиоды? К какому выводу микроконтроллера?
  2. Как включить тактирование на нужный порт GPIO?
  3. Как настроить, нужные нам, пины порта GPIO для того чтобы можно было включить светодиод?
  4. Как включить и выключить светодиод?

Ответим на них по порядку.

Регистр cr0

Первые 16 бит регистра CR0 называются словом состояния машины (MSW). Слово состояния машины впервые появилось в процессоре Intel286. В более поздних процессорах оно является лишь частью управляющего регистра CR0 и сохранено для совместимости.

PE (Разрешение защиты, бит 0: Intel286 …)

Бит PE (Protection Enable) предназначен для переключения режимов работы процессора — режима реальной адресации и защищенного режима. При сброшенном PE процессор работает в режиме реальной адресации, при установленном — в защищенном режиме (включая режим V86).

Бит PE можно установить загрузкой слова состояния машиныMSW с помощью команды LMSW или всего регистра CR0 командой MOV CR.

Сбросить PE можно только загрузкой CR0 командой MOV CR. В целях прямой совместимости с Intel286 бит PE не может быть сброшен командой LMSW.

MP (Слежение за сопроцессором, бит 1: Intel286 …)

В процессорах Intel286 и Intel386 используется совместно с битом TS для определения — будет ли команда WAIT генерировать особую ситуацию #NM (сопроцессор отсутствует); ловушка генерируется при установленных MP и TS.

При запуске программ процессоров Intel286 и Intel386 на процессорах со встроенным сопроцессором (Intel486DX, Pentium, …) бит MP должен быть установлен; в случае процессора Intel486SX (нет встроенного сопроцессора) бит MP должен быть сброшен.

EM (Эмуляция сопроцессора, бит 2: Intel286 …)

Установка этого бита вызывает генерацию особой ситуации #NM (сопроцессор отсутствует) всеми кодами команд сопроцессора. Значение EM не влияет на выполнение команды WAIT.

TS (Задача переключена, бит 3: Intel286 …)

Процессор устанавливает флаг TS при каждом переключении задач и анализирует его при поступлении команд сопроцессора, команд MMX/3DNow! и SIMD. Это делается для исключения исполнения этих команд над данными, перекочевавшими из другой задачи. Команда CLTS очищает этот бит.

ET (Тип сопроцессора, бит 4: Intel386, Intel486SX)

При ET = 1, используется 32-битный протокол Intel387. При ET = 0, используется 16-битный протокол Intel287. При необходимости может быть сброшен или установлен загрузкой CR0. В целях прямой совместимости с Intel286 не изменяется командой LMSW. В процессорах современных модификаций (Pentium …) данный бит считается зарезервированным (ET = 1).

NE (Ошибка сопроцессора, бит 5: Intel486 …)

Бит предназначен для управления режимом реагирования на ошибки сопроцессора. Если NE установлен, действует внутренний механизм, обеспечивающий генерацию ошибки сопроцессора #MF сразу по поступлении очередной команды FPU/MMX/3DNow! вслед за командой, вызвавшей незамаскированное исключение (с помощью регистра управления сопроцессора CW можно замаскировать все исключения).

Если NE сброшен, реакция на исключительния FPU происходит в так называемом стиле MS-DOS, который предполагает обработку ошибок сопроцессора через вызов внешнего прерывания. В этом режиме задействуются специальные выводы FERR# и IGNNE# (вывод FERR# аналогичен выводу ERROR# сопроцессоров Intel287 и Intel387 и обычно подключается к внешнему программируемому контроллеру прерываний).

Механизмы реакции различных моделей процессоров и сопроцессоров на возникновение исключительных ситуаций сопроцессора обладают некоторыми специфическими особенностями, варьирующимися от модели к модели. Подробное описание всех этих особенностей приведено в Intel 64 and IA-32 Architectures Developer’s Manual: Vol. 1

WP (Защита записи, бит 16: Intel486 …)

Установка этого бита позволяет защитить страницы пользовательского уровня (которые определены как страницы только для чтения) от изменения их программой супервизором, работающей на более высоком уровне привилегий.

AM (Маска выравнивания, бит 18: Intel486 …)

Этот бит позволяет осуществлять контроль выравнивания, если он установлен. Если бит AM сброшен, контроль выравнивания запрещен. Контроль выравнивания осуществляется, только если установлены бит AM, флаг AC и CPL = 3 (режим пользователя).

NW (Запрет сквозной записи, бит 29: Intel486 …)

Предназначен для управления встроенным КЭШ. Если этот бит сброшен, то сквозная запись (write-through) и циклы недействительности КЭШ разрешены. Если бит установлен, то сквозная запись и циклы недействительности запрещены.

CD (Разрешение работы КЭШ, бит 30: Intel486 …)

Если CD = 0, работа внутреннего КЭШ (L1 и L2) разрешена, иначе — запрещена. Если работа внутреннего КЭШ запрещена, но он содержит некоторое количество достоверных данных, то при обращении к памяти данные поступают из КЭШ при попадании или извне при промахе.

Во время записи ситуация аналогичная, т.е. когда записываются данные попадающие в КЭШ, то они сперва записываются в КЭШ, а затем методом обратной записи (Write-back) — в память (соответстующие ячейки КЭШ после этого считаются недействительными), а если нет попадания в КЭШ, то запись производится непосредственно во внешнюю память.

Для предотвращения использования КЭШ, когда CD = 1, необходимо определить его как недействительный. Биты CR3.PCD и CR3.PWT, а также аналогичные биты PCD и PWT в элементах таблиц страничных преобразований при отключенном КЭШ игнорируются.

PG (Включение страничного механизма, бит 31: Intel386 …)

Если PG = 1, то страничный механизм включен, иначе — выключен. Бит PG может использоваться только в защищенном режиме работы процессора (CR0.PE = 1). Попытка установить этот бит в реальном режиме адресации приводит к генерации ошибки общей защиты (#GP).

Регистр cr2

Если включен механизм страничной адресации (CR0.PG = 1), и генерируется особая ситуация 14 (Страничная ошибка), то регистр CR2 будет содержать полный 32-разрядный линейный адрес, поступление которого в блок страничной адресации вызвало эту ошибку.

Регистр cr3

При включенном страничном механизме регистр CR3 (а именно, 20 его старших бит) содержит 20 старших бит физического адреса каталога страниц (младшие 12 бит 32-разрядного адреса каталога страниц принимаются равными 0). Иногда CR3 называют регистром базы каталога страниц (PDBR).

Начиная с процессора Intel486 используется еще два бита этого регистра (PWT, PCD), которые управляют кэшированием страниц. В процессорах начиная с Pentium, которые поддерживают расширения физического адреса (управляются битом CR4.PAE), в режиме расширенного физического адреса 27 старших бит регистра CR3 содержат адрес таблицы указателей на каталоги страниц (27 его старших бит, а младшие 5 бит принимаются равными 0).

PWT (Сквозная запись страниц, бит 3: Intel486 …)

Бит используется для управления кэшированием текущего каталога страниц. При PWT = 1, для текущего каталога обновление реализуется методом сквозной записи (write-through), при PWT = 0 — методом обратной записи (write-back).

PCD (Запрещение кэширования страниц, бит 4: Intel486 …)

Бит используется для управления кэшированием текущего каталога страниц. PCD = 1 запрещает кэширование. Программы также могут управлять кэшированием таблиц страниц и отдельных страниц посредством специальных битов PCD, PWT в элементах таблиц страничных преобразований.

Регистры отладки и тестирования

32-разрядные регистры отладки ( DR0…DR7 ) имеют следующее назначение:

Регистры тестирования ( TR3…TR7 ) используются при тестировании кэш-памяти и буфера ассоциативной трансляции адресов страниц ( TLB ).

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

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

Регистры. устройство, принцип работы

Регистр — это последовательностное логическое устройство, используемое для хранения n-разрядных двоичных чисел и выполнения преобразований над ними. Регистр представляет собой упорядоченную последовательность триггеров, число которых соответствует числу разрядов в слове.

Типичными являются следующие операции:

● прием слова в регистр;

● передача слова из регистра;

● поразрядные логические операции;

● сдвиг слова влево или вправо на заданное число разрядов;

● преобразование последовательного кода слова в параллельный и обратно;

● установка регистра в начальное состояние (сброс).

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

Куда подключены наши светодиоды? к какому выводу микроконтроллера?

Для того, чтобы посмотреть где что находится на плате Discovery, а в частности, нужные нам светодиоды — нужно открыть Schematic-файл, либо тот который мы скачали с сайта ST, либо прямо из Keil:

Открыв Schematic мы увидим схему всего того, что есть на плате — схему ST-Link, обвязку всей периферии и многое другое. На текущий момент нас интересуют два светодиода, ищем их обозначение:

Как мы видим, наши светодиоды подключены к порту GPIOC на 8 и 9 пин.

Оцените статью
OverComp.ru