Inicio rápido STM32. Parte 1 software, materiales, Cube MX

Recientemente, cada vez más a menudo me encuentro con holivares sobre el tema de Cube MX y HAL, tal como se aplica a los controladores STM32.

Por un lado, hay defensores a los que les gusta la facilidad de configuración y la legibilidad del código.

Por otro lado, los adherentes escriben todo con sus manos, por lo que la velocidad del trabajo y el uso cuidadoso de los recursos son importantes.

Para puntear todos los i - intente escribir "Hola mundo" con las tres rutas más utilizadas CMSIS, LL, HAL. Calcularemos los costos (recursos del controlador, el volumen del archivo ejecutable y, por supuesto, el tiempo del desarrollador).

El artículo constará de varias partes:

Inicio rápido STM32. Parte 1 software, materiales, Cube MX.
Inicio rápido STM32. Parte 2 Hello World en HAL, configurando la depuración en Atollic TrueSTUDIO
Inicio rápido STM32. Parte 3 Hello World en LL
Inicio rápido STM32. Parte 4 Hello World en CMSIS
Inicio rápido STM32. Parte 5 Resumen, comparación de HAL, LL, CMSIS.

Primero, decidamos qué programaremos realmente, es decir, encontrar el hardware adecuado.

Una opción ideal sería una placa de presupuesto en el microcontrolador STM32F103C8T6.

imagen

Esta tarifa se puede encontrar en todo el sitio conocido a un precio de 100 rublos rusos.

Búsqueda por palabras clave: STM32F103C8T6 ARM STM32 Mínimo

https://en.aliexpress.com/af/STM32F103C8T6-ARM-STM32-Minimum.html?SearchText=STM32F103C8T6+ARM+STM32+Minimum

Para completar el firmware y jugar con la depuración, también se requiere un programador
Para empezar, y para uso futuro, el clon chino del programador ST-LINK V2 es ideal.

Puede comprar en el mismo sitio a un precio de 120 rublos rusos.

imagen

Búsqueda por palabras clave ST LINK Stlink ST 252dLink V2 Mini STM8 STM32:

https://en.aliexpress.com/af/ST-LINK-Stlink-ST%25252dLink-V2-Mini-STM8-STM32.html?SearchText=ST+LINK+Stlink+ST%252dLink+V2+Mini+STM8+ STM32

Para desarrollar software para STM32, puede usar varios IDE.

Los más populares son IAR, Keil, Coocox (Eclipse).

Seguiremos el camino que recientemente ha sido completamente gratuito y totalmente proporcionado por ST.

Usaremos Atollic TrueSTUDIO para STM32 o en la gente común Tolik.

¿Cuáles son las ventajas de este software: absolutamente gratis, no hay límite en el tamaño del código, hay un buen depurador, fácil instalación y configuración.

Contras: no se completó el código automático.

Las versiones para Windows y Linux están disponibles.

Descargue aquí https://atollic.com/resources/download/
No debería haber ningún problema con la instalación de este software, todo está intuitivamente claro, elegimos dónde colocarlo y hacemos clic en "siguiente" todo el tiempo.

Después de la instalación, no puede ejecutarlo, porque además del IDE en sí, necesita algo más.

Si aún lo comenzó, solo ciérrelo.

Dado que TrueSTUDIO es una herramienta de desarrollo y depuración, me gustaría no armar el proyecto a mano (conectando las bibliotecas requeridas y prescribiendo las rutas), sino obtener algún archivo preconfigurado en el que pueda escribir código inmediatamente sin problemas innecesarios.

Para hacer esto, use el programa generador de código Cube MX o en la gente común "Kalokub".
Este software es el primer escollo en holivars sobre qué escribir bajo STM: en registros y CMSIS o en HAL.

Los defensores de la primera ideología hacen los siguientes argumentos: Cube MX genera una cantidad enorme e innecesaria de código, que también ralentiza el trabajo de MK.

Defensores de lo segundo: digamos que el código generado automáticamente reduce el tiempo de desarrollo, lo que permite al desarrollador cambiar rápidamente a la parte de la canaleta del dispositivo (a la lógica principal), dando la rutina periférica al software especializado (Cube MX).

Curiosamente, ambas ideologías son verdaderas y aplicables en la práctica, pero solo cada una en sus propias condiciones.

Veamos un par de ejemplos:

Ejemplo No. 1: Se requiere desarrollar un dispositivo que sea lo más barato posible, ya que se planea producir en lotes de 100500 piezas anualmente. Naturalmente, cada rublo adicional del precio del dispositivo dará como resultado cientos de miles de rublos de gastos en el dispositivo final. Además, en el desarrollo planificado hay un par de cálculos pesados ​​y trabajo con periféricos (ADC, SPI, UART) a velocidades máximas.

El dispositivo es un producto totalmente autónomo, en el futuro está previsto realizar cambios mínimos durante todo el período de producción de este equipo. El período de desarrollo hasta la muestra terminada es de 1-2 años.

Ejemplo No. 2: Se requiere un prototipo de un dispositivo, que puede ser de interés para el cliente y él ordenará 100 piezas de dispositivos similares para la conversión de su instalación. El primer lote planificado debe enviarse al cliente en 2 meses. El tamaño del primer lote de prueba de 10 piezas.

Las especificaciones exactas se ajustarán en el proceso de trabajo en el proyecto, pero se sabe que en el futuro se planean varias revisiones del hardware, para lo cual es necesario ajustar rápidamente toda la lógica aplicada.

En el primer ejemplo, la opción ideal sería seleccionar el controlador más barato y escribir un código óptimo pero dependiente del hardware, donde el trabajo con periféricos se organizará mediante el acceso a los registros apropiados (CMSIS). El desarrollador que participa en este proyecto debe tener un conocimiento bueno o excelente de la periferia de una familia MK en particular. Idealmente, cuando intente despertarlo por la noche, debe nombrar inmediatamente la dirección del vector requerido de la tabla de vectores de interrupción.

En el segundo ejemplo, la elección del controlador está determinada por el hardware disponible, así como por el tiempo requerido para escribir la funcionalidad requerida por el cliente. Por lo tanto, la velocidad y la optimización del software en sí se están desvaneciendo. No hay tiempo para la inicialización manual, al igual que no hay tiempo para resolver las dependencias de hardware.

En este caso, se selecciona un controlador que se puede poner rápidamente en producción en la región actual, se inicializa usando Cube MX, la lógica de la aplicación se escribe en HAL y el prototipo se transfiere al cliente para su prueba. Tal proyecto puede ser realizado por cualquier desarrollador promedio que haya adquirido habilidades para trabajar con el lenguaje de programación de destino. Prácticamente no se requiere una comprensión de las complejidades del trabajo de la periferia.

No importa cuán triste suene esto, en las realidades del desarrollo moderno de dispositivos en Rusia, el ejemplo No. 1 se está volviendo menos común, pasando el testigo al ejemplo No. 2.

Volveremos a la discusión de los ejemplos No. 1 y No. 2 al final de la serie de artículos, y ahora continuamos con la preparación del espacio de trabajo.

En esta etapa, tomaremos un breve descanso, visitaremos my.st.com y registraremos una cuenta en él, ya que la política de la compañía ST no permite descargar los materiales necesarios sin registrarse.

Después de que tengamos acceso al sitio, descargue STM32 Cube MX.

En la parte inferior de la página hay un botón de selección de versión, necesitamos la versión 5.0.0

imagen

En el camino, hasta que nos vayamos de aquí, descargamos dos cosas más que serán útiles en el futuro.
https://www.st.com/en/development-tools/stsw-link008.html

Controlador ST-LINK V2

imagen

y https://www.st.com/en/development-tools/stm32cubeprog.html
Programa intermitente.

imagen

Instalar el controlador, el controlador de flash y Cub en sí no causa ninguna dificultad, solo estamos de acuerdo con todo y hacemos clic en.

Después de una instalación completa del software necesario, podemos comenzar a crear un proyecto.
Para hacer esto, ejecuta Cube MX.

En la ventana que aparece, haga clic en el botón "ACCESO AL SELECTOR DE MCU".

imagen

El microcontrolador STM32F103C8T6 está instalado en nuestra placa de destino.

Ingrese su nombre en la barra de búsqueda y haga doble clic para seleccionar la única opción encontrada.

En la misma tabla puede ver el relleno principal de nuestro MK (64 kilobytes de flash, 20 kilobytes de RAM, etc.).

imagen

Ante nosotros apareció una caja del controlador representada esquemáticamente con las piernas separadas en diferentes direcciones.

En esta etapa, definitivamente debe elegir el método de conexión del depurador.

Para hacer esto, seleccione el elemento SYS en la pestaña Configuración de pines y configuración en el menú de la izquierda y establezca el valor de Conexión en serie en la lista desplegable bajo el nombre "Depuración".

Al mismo tiempo, notamos por el rabillo del ojo que el programa ha reservado dos pines para propósitos de depuración en el controlador mnemónico.

imagen

Una vez más, recordamos que queremos parpadear un LED en nuestra placa.

Para hacer esto, primero debe averiguar a qué pierna en particular está conectado.

En esto ayudaremos al diagrama del circuito eléctrico:

imagen

o pinout de tablero más colorido y fácil de entender

imagen

El LED deseado está en la pata de la PC13.

En consecuencia, es necesario configurar esta salida para que funcione en modo de salida.

Para hacer esto:

  1. Encontramos la conclusión en el diagrama mnemónico.
  2. Hacemos clic derecho sobre él, en el menú desplegable, seleccione el elemento "GPIO_Output"
  3. Ve al menú GPIO,
  4. En la lista, seleccione PC13
  5. Completamos la tabla de configuración PC13-TAMPER-RTC de acuerdo con la captura de pantalla, estamos especialmente interesados ​​en el modo GPIO y los parámetros de etiqueta de usuario

imagen

Continuamos configurando el proyecto, vaya a la pestaña Configuración del reloj.

De hecho, esta es una de las pestañas más importantes que le permite configurar los ajustes del reloj periférico, pero por ahora no tocaremos nada aquí, ya que el objetivo principal en este momento no es este.

imagen

Vaya a la pestaña Administrador de proyectos, debajo de la pestaña Proyecto.

Asegúrese de completar los siguientes parámetros:

  1. Nombre del proyecto (es mejor usar solo letras latinas)
  2. El directorio en el que se creará el proyecto (también es mejor usar solo el alfabeto latino)
  3. IDE en el que planeamos trabajar en el proyecto (planeamos usar TrueSTUDIO)

imagen

Bajamos a continuación, debajo de la pestaña Generador de código.

Aquí definitivamente notamos la opción Generar inicialización periférica como par ...

Por lo tanto, obtenemos un proyecto más estructurado, en el que para cada tipo de periferia hay un par de archivos C y H.

imagen

El último paso quedó. Pestaña secundaria Configuración avanzada.

  1. Elija el tipo de biblioteca HAL para todos los módulos periféricos.
  2. Recopilamos el proyecto con la configuración actual

imagen

En el lanzamiento inicial, es posible que deba descargar la versión actual de la biblioteca para la familia MK seleccionada.

Aceptamos descargar archivos:

imagen

Vamos a calentar la tetera o hacer café:

imagen

Después del final del trabajo del generador de código, lo abrimos inmediatamente:

imagen

Elija cualquier carpeta donde Atollic almacenará el espacio de trabajo:

imagen

Tras una apertura exitosa, veremos la ventana principal de Atollic TrueSTUDIO para STM.

La información general es de poco interés para nosotros, así que vaya inmediatamente al árbol de archivos.

imagen

Encuentre el archivo main.c y la función int main (void) allí:

imagen

Para autocomprobación: intente recopilar un proyecto vacío

  1. En el menú Proyecto -> Reconstruir proyecto
  2. A continuación, seleccione la pestaña Consola
  3. Tras el ensamblaje exitoso: debe recibir la inscripción Build Finished

imagen

Continúa en la siguiente parte.

PD: publiqué previamente el artículo en mi blog personal .

Source: https://habr.com/ru/post/442162/


All Articles