¿Las bibliotecas CMSIS también manejan registros GPIO?

Actualmente estoy explorando la programación integrada con procesadores ARM. Mi clase de sistemas integrados nos tiene programando en un Atmel SAMD20 (Cortex M0+). Nuestro manual de laboratorio explica en detalle cómo utilizar una biblioteca Atmel para acceder a los registros del procesador para controlar los pines GPIO.

Lo que he estado tratando de aprender en mi tiempo libre es cómo ponerme en marcha por mi cuenta con un microcontrolador diferente, sabiendo que el código será algo diferente. Leí sobre CMSIS, que parece una forma conveniente de comenzar a programar en nuevos microcontroladores usando el mismo núcleo ARM. Sin embargo, diferentes proveedores de silicio tendrán una cantidad diferente de puertos/periféricos GPIO conectados al microcontrolador. ¿Cómo puede CMSIS mantener la consistencia entre estos puertos GPIO cuando son diferentes entre diferentes chips? ¿O CMSIS no maneja puertos GPIO y solo cosas relacionadas con ARM Core?

Si este último es el caso, ¿significa esto que debo mirar las hojas de datos del proveedor para entender cómo codificar un microcontrolador específico? Estoy mirando microcontroladores STM32 en este momento y tengo problemas para localizar cualquier cosa que documente sus archivos de encabezado. Estoy un poco perdido y abrumado en este momento, por lo que agradecería cualquier consejo y dirección.

GPIO también requiere con frecuencia alguna configuración de muxing de pines, así como quizás relojes.

Respuestas (2)

Como dice @Arsenal, el CMSIS solo maneja la funcionalidad principal de ARM. El GPIO es implementado por los proveedores de microcontroladores específicos.

Los microcontroladores STM32 tienen una documentación bastante buena. ST ofrece algunas opciones para archivos de encabezado de dispositivo, encabezados CMSIS, capas de abstracción, etc.

Recomiendo descargar las bibliotecas de periféricos estándar de ST. El SPL para el STM32F10x, por ejemplo, se puede encontrar aquí . Incluye un gran documento vinculado creado por Doxygen que cubre sus archivos de encabezado, y también muchas piezas de código de ejemplo.

Debo explicar que el SPL es la "manera antigua" de hacer esto. Es bastante liviano y solo realiza funciones básicas para usar el hardware.

Recientemente, ST está empujando a los usuarios hacia su paquete de desarrollo de firmware STM32Cube en lugar del SPL. No solo tiene archivos de encabezado y funciones básicas, sino que también incluye compatibilidad con USB, módulos gráficos, etc. Crea mucho código para ti.

A algunas personas les encanta; algunos obstinadamente siguen usando el SPL. (Soy uno de los tercos). Si lo desea, puede encontrar STM32Cube (para los STM32F1) aquí .

El SPL ya no es compatible (y no está disponible para dispositivos más nuevos), pero ST está trabajando en un Cube HAL de bajo nivel para reemplazar el SPL para aquellos que necesitan trabajar más cerca del hardware.

No. Los GPIO son un periférico externo al núcleo y, como tales, no tienen un diseño o especificación de registro estandarizados. CMSIS solo maneja el núcleo y los periféricos del núcleo que están estandarizados por ARM.

Por lo general (en estos días) los proveedores proporcionan una capa de abstracción de hardware específica para sus modelos.

Para el STM32 ST proporciona el entorno Cube . Realmente no puedo contarles mucho al respecto porque no lo usamos en nuestros productos, así que no tuve tiempo de perder el tiempo con eso todavía.

Si sigue la ruta que hicimos (bare metal, propio HAL), debe consultar el manual de referencia de su dispositivo específico, la hoja de erratas para indicarle si necesita manejar algunos errores de hardware en el software y la hoja de datos para asignaciones de pines y otros datos eléctricos.

Los encabezados de los periféricos a menudo son proporcionados por la compañía compiladora y no por el fabricante del chip (o al menos no lo nota porque vienen empaquetados con el compilador). Por lo general, los encabezados siguen de cerca el esquema de nombres del manual de referencia. Algunos usan una estructura para un periférico, otros definen cada registro como propio. Los bits también suelen estar predefinidos, por lo que puede escribir código legible sin cambiar los bits como un loco.