какие типы кодов записываются в файлы CMSIS и файл драйверов периферийных устройств. Как я могу их отличить? любой пример будет более полезным. Спасибо.
CMSIS и драйверы периферии
Ответы (2)
«CMSIS» — это программный интерфейс микроконтроллера Cortex. Стандарт. Это стандарт ARM, поэтому код должен быть более или менее переносимым между реализациями Cortex.
Периферийные библиотеки, как правило, больше зависят от поставщика, поскольку нет стандарта того, как два разных поставщика будут реализовывать, например. таймер или блок UART.
По крайней мере, это мое основное понимание работы (в основном) с ARM в семействе STM32. Однако я заметил на этой странице CMSIS, что область действия CMSIS на самом деле больше:
CMSIS-Driver: определяет общие интерфейсы драйверов периферийных устройств для промежуточного программного обеспечения, что позволяет повторно использовать их на поддерживаемых устройствах. API не зависит от RTOS и соединяет периферийные устройства микроконтроллера с промежуточным программным обеспечением, которое реализует, например, коммуникационные стеки, файловые системы или графические пользовательские интерфейсы.
Похоже, что он будет делать вещи, которые я связываю с кодом конкретного поставщика, но, возможно, не все поставщики на самом деле еще используют CMSIS-драйвер.
ОБНОВЛЕНИЕ: на STM32, с которыми я работал, GPIO управляется с использованием только периферийной библиотеки ST.
Это довольно просто, на самом деле:
- Используйте
RCC_AHB1PeriphClockCmd()
, чтобы включить часы периферийного устройства GPIO. Есть много часов, поэтому убедитесь, что вы делаете это правильно. Я думаю, что все GPIO находятся на AHB1. - Инициализируйте переменную типа
GPIO_InitTypeDef
, вызвав для нееGPIO_StructInit()
, чтобы получить значения по умолчанию. - Установите нужные параметры в
GPIO_InitTypeDef
, при необходимости отменяя значения по умолчанию. - Вызовите
GPIO_Init()
на соответствующий порт, также передав емуGPIO_InitTypeDef
с вашими фактическими настройками. Это потыкает регистры в периферии. - Используйте такие вызовы, как
GPIO_SetBits()
,GPIO_ReadInputDataBit()
и так далее, чтобы фактически использовать вывод GPIO.
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.