STM32F4 - CMSIS y bibliotecas específicas de placa

Recientemente compré una placa STM32F4 para aprender la arquitectura ARM. Me siento bastante cómodo con la programación integrada después de haber trabajado con la serie AVR durante aproximadamente un año.

Estaba pasando por este tutorial aquí

En esto, el autor ha mencionado que, por lo general, en el mundo de las placas ARM, tiene 2 conjuntos de bibliotecas:

  1. Estándar de interfaz de software Cortex M (CMSIS): capa/interfaz HAL general para características específicas de Cortex M
  2. Bibliotecas STM32: específicamente para los periféricos integrados en la placa de desarrollo STM (I2C, SPI, CAN, etc.)

El autor también menciona que, al igual que cualquier capa HAL, el propósito de estos es que uno se desarrolle rápidamente en lugar de perder el tiempo configurando las cosas.

Viniendo del lado de AVR donde estoy usando bibliotecas mínimas/sin bibliotecas y configurando todo a mano (por ejemplo, configuración de spi, funciones controladas por interrupción de rx y tx, etc.), encuentro esto un poco extraño. Al usar las bibliotecas específicas de STM, ¿no se limitaría a usar solo sus microcontroladores? Luego, en el futuro, si uso el chip de otros proveedores, tendré que aprender a usar su biblioteca específica

Me gustaría obtener una opinión de que si este es el camino correcto a seguir. Siendo nuevo en ARM, ¿debería usar estas bibliotecas por ahora hasta que me sienta más cómodo o debo acostumbrarme desde el principio a hacer todo yo mismo?

La idea es apoyarse en ARM independientemente de cualquier placa o microcontrolador específico del proveedor.

Respuestas (3)

Recomiendo encarecidamente las bibliotecas. Una gran ventaja de cortex M es poder mover fácilmente su código a otros miembros de la misma familia (es decir, STMF0 a STMF4), o incluso a diferentes fabricantes, y pierde esta ventaja si no usa las bibliotecas.

Por cierto, muchas bibliotecas específicas de proveedores son compatibles con CMSIS.

He evitado familias que no suministran bibliotecas compatibles con CMSIS. Además, no he probado STM Cube por las mismas razones.

Entonces, ¿básicamente los proveedores tienen la opción de hacer que sus bibliotecas sean compatibles con CMSIS? Lo que me confunde es el hecho de que, como se mencionó en el caso de STM, tiene la parte de CMSIS (que podría ser la misma en diferentes proveedores si eligen ser compatible con CMSIS como usted dijo) pero luego están las bibliotecas específicas de STM (para periféricos ) que supongo sería diferente entre diferentes proveedores. ¿correcto? Si lo entendí correctamente, la biblioteca CMSIS proporciona la capa HAL para la funcionalidad central y el acceso específico del proveedor a los periféricos que el proveedor ha incluido en su placa
No, hay un núcleo, y probablemente también haya algunas especificaciones del proveedor, pero las bibliotecas periféricas pueden ser compatibles con CMSIS y las bibliotecas periféricas STM son compatibles, pero no cubo.
Entonces, básicamente, el CMSIS se ocupa de la funcionalidad central. Dado que el proveedor obtuvo la licencia del núcleo de ARM, CMSIS sería prácticamente igual en todos los proveedores (aunque podría tener algunas personalizaciones específicas del proveedor). Es más probable que la biblioteca de periféricos sea diferente entre proveedores, ya que pueden estar utilizando periféricos específicos de su elección.
No, el CMSIS maneja el núcleo y los periféricos.
Perfecto. ¡Ese enlace lo explicaba todo!

Estoy de acuerdo con Scott y la afirmación "el propósito de estos es que uno se desarrolle rápidamente en lugar de perder el tiempo configurando las cosas".

En última instancia, depende de lo que entiendas por aprender ARM. El uso de las bibliotecas no le impide meterse debajo del capó y escribir sus propios controladores, pero el STM32F4 (que acabo de empezar a usar) es solo uno de los más de 2000 procesadores de 16 fabricantes que usan el núcleo ARM.

Para mí, los controladores ofrecen la flexibilidad de desarrollar sin atascarse en los detalles. No significa que no miro los detalles o intento modificarlos.

Para migrar a otro procesador con periféricos compatibles, solo debería implicar cambiar los controladores.

Gracias por la útil respuesta. ¿Puedo preguntar qué IDE estás usando? Hay muchos de ellos
Estoy usando Keil uVision5.

Si yo fuera usted, usaría las bibliotecas periféricas específicas del proveedor. Lleva mucho tiempo cuidar los registros para configurar los periféricos. Diría que lleva mucho más tiempo que aprender a usar las bibliotecas de otros proveedores. Son bastante similares, por lo que no se necesita mucho tiempo para aprender usando otra biblioteca de microcontroladores.

Por otro lado, puedes encontrar muchos más tutoriales y soporte para las bibliotecas periféricas, porque son más utilizadas.