Обрабатывают ли библиотеки CMSIS регистры GPIO?

В настоящее время я изучаю встроенное программирование с процессорами ARM. В моем классе встроенных систем мы программируем на Atmel SAMD20 (Cortex M0+). В нашем лабораторном руководстве подробно объясняется, как использовать библиотеку Atmel для доступа к регистрам процессора для управления выводами GPIO.

Чему я пытался научиться в свободное время, так это тому, как самостоятельно начать работу с другим микроконтроллером, зная, что код будет несколько другим. Я читал о CMSIS, который кажется удобным способом начать программирование на новых микроконтроллерах, использующих то же ядро ​​ARM. Однако разные поставщики микросхем будут иметь разное количество портов/периферийных устройств GPIO, подключенных к микроконтроллеру. Как CMSIS может поддерживать согласованность между этими портами GPIO, если они различаются между разными чипами? Или CMSIS не обрабатывает порты GPIO и только то, что относится к ядру ARM?

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

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

Ответы (2)

Как говорит @Arsenal, CMSIS обрабатывает только основные функции ARM. GPIO реализуется конкретными поставщиками микроконтроллеров.

Микроконтроллеры STM32 имеют довольно хорошую документацию. ST предоставляет несколько опций для файлов заголовков устройств, заголовков CMSIS, уровней абстракции и так далее.

Я рекомендую загрузить стандартные периферийные библиотеки ST. SPL для STM32F10x, например, можно найти здесь . Он включает в себя большой, созданный Doxygen, связанный документ, охватывающий их заголовочные файлы, а также множество примеров кода.

Я должен объяснить, что SPL — это «старый способ» сделать это. Он довольно легкий и выполняет только основные функции для использования оборудования.

В последнее время ST подталкивает пользователей к их пакету разработки прошивки STM32Cube вместо SPL. Он не только имеет заголовочные файлы и основные функции, но также включает поддержку USB, графические модули и т. д. Он создает для вас много кода.

Некоторым это нравится; некоторые упорно продолжают использовать SPL. (я из упоротых). Если вы хотите, вы можете найти STM32Cube (для STM32F1) здесь .

SPL больше не поддерживается (и недоступен для более новых устройств), но ST работает над низкоуровневым Cube HAL, чтобы заменить SPL для тех, кому необходимо более тесно работать с оборудованием.

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

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

Для STM32 ST предоставляет среду Cube . Я не могу вам много рассказать об этом, потому что мы не используем его в наших продуктах, поэтому у меня пока не было времени возиться с ним.

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

Заголовки для периферийных устройств часто предоставляются компанией-компилятором, а не производителем чипа (или, по крайней мере, вы этого не замечаете, потому что они поставляются вместе с компилятором). Обычно заголовки точно следуют схеме именования справочного руководства. Некоторые используют структуру для одного периферийного устройства, другие определяют каждый регистр как собственный. Биты также обычно предопределены, так что вы можете писать читаемый код, не сдвигая биты как сумасшедший.