CMSIS и драйверы периферии

какие типы кодов записываются в файлы CMSIS и файл драйверов периферийных устройств. Как я могу их отличить? любой пример будет более полезным. Спасибо.


person istiaq2379    schedule 05.09.2014    source источник


Ответы (2)


«CMSIS» — это программный интерфейс микроконтроллера Cortex. Стандарт. Это стандарт ARM, поэтому код должен быть более или менее переносимым между реализациями Cortex.

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

По крайней мере, это мое основное понимание работы (в основном) с ARM в семействе STM32. Однако я заметил на этой странице CMSIS, что область действия CMSIS на самом деле больше:

CMSIS-Driver: определяет общие интерфейсы драйверов периферийных устройств для промежуточного программного обеспечения, что позволяет повторно использовать их на поддерживаемых устройствах. API не зависит от RTOS и соединяет периферийные устройства микроконтроллера с промежуточным программным обеспечением, которое реализует, например, коммуникационные стеки, файловые системы или графические пользовательские интерфейсы.

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

ОБНОВЛЕНИЕ: на STM32, с которыми я работал, GPIO управляется с использованием только периферийной библиотеки ST.

Это довольно просто, на самом деле:

  1. Используйте RCC_AHB1PeriphClockCmd(), чтобы включить часы периферийного устройства GPIO. Есть много часов, поэтому убедитесь, что вы делаете это правильно. Я думаю, что все GPIO находятся на AHB1.
  2. Инициализируйте переменную типа GPIO_InitTypeDef, вызвав для нее GPIO_StructInit(), чтобы получить значения по умолчанию.
  3. Установите нужные параметры в GPIO_InitTypeDef, при необходимости отменяя значения по умолчанию.
  4. Вызовите GPIO_Init() на соответствующий порт, также передав ему GPIO_InitTypeDef с вашими фактическими настройками. Это потыкает регистры в периферии.
  5. Используйте такие вызовы, как GPIO_SetBits(), GPIO_ReadInputDataBit() и так далее, чтобы фактически использовать вывод GPIO.
person unwind    schedule 05.09.2014
comment
на самом деле я тоже думал что-то подобное ... но на самом деле для меня это кажется одинаковым. Но это не так. подходящий пример GPIO было бы неплохо узнать. Я только что начал STM32 за 1 неделю до этого. Так что это было бы полезно. - person istiaq2379; 05.09.2014
comment
Для Stm32F10x: RCC_APB2Periph… но для F2xx и F4xx: RCC_AHB1Periph… и ИМХО для F30x: RCC_AHBPeriph…. - person Joe; 17.09.2014

Код CMSIS написан для контроллера ARM для разных поставщиков, таких как NXP (серия LPC и т. Д.), STM (STM32f4, stm32F1), в основном контроллер с архитектурой ARM. это портативное программное обеспечение. этим языком кодирования в большинстве случаев является C/C++, но в некоторых файлах используется язык ассемблера. обычно язык ассемблера используется в файлах запуска.

В драйвере периферии код написан на языке c/c++. периферийный драйвер используется для целей связи.

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

например: если вы хотите прочитать данные с датчика, подключенного через I2C. вы можете напрямую использовать драйвер I2C Cmsis для реализации приложения. Единственное, что вам нужно знать, это аппаратный адрес датчика.

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

person Nagendra Murthy    schedule 28.09.2016