- ST-LINK V2
- STM32CubeMX
- Materiales necesarios
- Diagrama de circuito y conexiones
- Crear y grabar un programa en STM32 usando Keil uVision y ST-Link
- Salida de la placa STM32 programada por Keil
- Programa
Los microcontroladores STM32 que utilizan la arquitectura ARM Cortex M se están volviendo populares y se utilizan en muchas aplicaciones debido a sus características, costos y rendimiento. Hemos programado STM32F103C8 usando el IDE de Arduino en nuestros tutoriales anteriores. Programar STM32 con Arduino IDE es simple, ya que hay muchas bibliotecas disponibles para que varios sensores realicen cualquier tarea, solo necesitamos agregar esas bibliotecas en el programa. Este es un procedimiento fácil y es posible que no obtenga un aprendizaje profundo sobre los procesadores ARM. Así que ahora estamos entrando en el siguiente nivel de programación llamado programación ARM. De esta manera, no solo podemos mejorar nuestra estructura del código, sino que también podemos ahorrar espacio en la memoria al no usar bibliotecas innecesarias.
STMicroelectronics introdujo una herramienta llamada STM32Cube MX, que genera código básico de acuerdo con los periféricos y la placa STM32 seleccionada. Así que no tenemos que preocuparnos por la codificación de controladores y periféricos básicos. Además, este código generado se puede utilizar en Keil uVision para editarlo según los requisitos. Y finalmente el código se graba en STM32 usando el programador ST-Link de STMicroelectronics.
En este tutorial aprenderemos cómo programar STM32F103C8 usando Keil uVision & STM32CubeMX haciendo un proyecto simple de interconectar un botón pulsador y un LED con el tablero de pastillas azul STM32F103C8. Generaremos el código usando STM32Cube MX y luego editaremos y cargaremos el código a STM32F103C8 usando Keil uVision. Antes de entrar en detalles, primero aprenderemos sobre el programador ST-LINK y la herramienta de software STM32CubeMX.
ST-LINK V2
El ST-LINK / V2 es un depurador y programador en circuito para las familias de microcontroladores STM8 y STM32. Podemos cargar el código en STM32F103C8 y otros microcontroladores STM8 y STM32 usando este ST-LINK. El módulo de interfaz de un solo cable (SWIM) y las interfaces JTAG / depuración de cables en serie (SWD) se utilizan para comunicarse con cualquier microcontrolador STM8 o STM32 ubicado en una placa de aplicación. Como las aplicaciones STM32 usan la interfaz USB de alta velocidad para comunicarse con los entornos de desarrollo integrados Atollic, IAR, Keil o TASKING, podemos usar este hardware para programar los microcontroladores STM 8 y STM32.
Arriba está la imagen del dongle ST-LINK V2 de STMicroelectronics que admite la gama completa de interfaz de depuración STM32 SWD, una interfaz simple de 4 cables (incluida la alimentación), rápida y estable. Está disponible en una variedad de colores. El cuerpo está hecho de aleación de aluminio. Tiene una indicación LED azul ya que se utiliza para observar el estado de funcionamiento del ST-LINK. Los nombres de los pines están claramente marcados en el caparazón como podemos ver en la imagen de arriba. Puede interactuar con el software Keil, donde el programa se puede actualizar a los microcontroladores STM32. Así que veamos en este tutorial cómo se puede utilizar este programador ST-LINK para programar el microcontrolador STM32. La siguiente imagen muestra los pines del módulo ST-LINK V2.
Nota: Al conectar ST-Link con la computadora por primera vez, necesitamos instalar el controlador del dispositivo. Los controladores de dispositivos se pueden encontrar en este enlace de acuerdo con su sistema operativo.
STM32CubeMX
La herramienta STM32CubeMX es parte de STMicroelectronics STMCube. Esta herramienta de software facilita el desarrollo al reducir el esfuerzo, el tiempo y el costo de desarrollo. STM32Cube incluye STM32CubeMX, que es una herramienta de configuración de software gráfico que permite la generación de código de inicialización C utilizando asistentes gráficos. Ese código se puede utilizar en varios entornos de desarrollo como keil uVision, GCC, IAR, etc. Puede descargar esta herramienta desde el siguiente enlace.
STM32CubeMX tiene las siguientes características
- Solucionador de conflictos con clavijas
- Un ayudante para configurar el árbol del reloj
- Una calculadora de consumo de energía
- Una utilidad que realiza la configuración de periféricos MCU como pines GPIO, USART, etc.
- Una utilidad que realiza la configuración de periféricos MCU para pilas de middleware como USB, TCP / IP, etc.
Materiales necesarios
Hardware
- Tablero de pastillas azul STM32F103C8
- ST-LINK V2
- Presionar el botón
- LED
- Tablero de circuitos
- Cables de puente
Software
- Herramienta de generación de código STM32CubeMX (enlace)
- Keil uVision 5 (enlace)
- Controladores para ST-Link V2 (enlace)
Diagrama de circuito y conexiones
A continuación se muestra el diagrama del circuito para simplemente conectar un LED con la placa STM32 mediante un botón.
Conexión entre ST-LINK V2 y STM32F103C8
Aquí, la placa STM32 Blue Pill se alimenta desde el ST-LINK que está conectado al puerto USB de la computadora. Por lo tanto, no necesitamos alimentar el STM32 por separado. La siguiente tabla muestra la conexión entre ST-Link y el tablero de pastillas azul.
STM32F103C8 |
ST-Link V2 |
GND |
GND |
SWCLK |
SWCLK |
SWDIO |
SWDIO |
3V3 |
3,3 V |
LED y pulsador
El LED se usa para indicar la salida del tablero Blue Pill cuando se presiona un botón. El ánodo del LED está conectado al pin PC13 de la placa Blue Pill y el cátodo está conectado a tierra.
Un botón está conectado para proporcionar entrada al pin PA1 de la placa Blue Pill. También debemos usar una resistencia pull up de valor 10k porque el pin podría flotar sin ninguna entrada cuando se suelta el botón. Un extremo del botón pulsador está conectado a tierra y el otro extremo al pin PA1 y una resistencia pull up de 10k también está conectada a 3.3V de la placa Blue Pill.
Crear y grabar un programa en STM32 usando Keil uVision y ST-Link
Paso 1: - Primero instale todos los controladores de dispositivo para ST-LINK V2, las herramientas de software STM32Cube MX y Keil uVision e instale los paquetes necesarios para STM32F103C8.
Paso 2: - El segundo paso es Abrir >> STM32Cube MX
Paso 3: - Luego haga clic en Nuevo proyecto
Paso 4: - Después de esa búsqueda y seleccione nuestro microcontrolador STM32F103C8
Paso 5: - Ahora aparece el esquema de pin-out de STM32F103C8, aquí podemos establecer las configuraciones de pin. También podemos seleccionar nuestros pines en el apartado de periféricos según nuestro proyecto.
Paso 6: - También puede hacer clic en el pin directamente y aparecerá una lista, ahora seleccione la configuración de pin requerida.
Paso 7: - Para nuestro proyecto hemos seleccionado PA1 como GPIO INPUT, PC13 como GPIO OUTPUT & SYS debug como SERIAL WIRE, aquí solo conectamos los pines ST-LINK SWCLK & SWDIO. Los pines seleccionados y configurados aparecen en color VERDE. Puedes notar eso en la imagen de abajo.
Paso 8: - A continuación, en la pestaña Configuración , seleccione GPIO para establecer configuraciones de pines GPIO para los pines que hemos seleccionado.
Paso 9: - A continuación, en este cuadro de configuración de pines, podemos configurar la etiqueta de usuario para los pines que estamos usando, es decir, los nombres de los pines definidos por el usuario.
Paso 10: - Después de eso, haga clic en Proyecto >> Generar código .
Paso 11: - Ahora aparece el cuadro de diálogo de configuración del proyecto. En este cuadro, elija el nombre y la ubicación de su proyecto y seleccione el entorno de desarrollo. Estamos usando Keil, así que seleccione MDK-ARMv5 como IDE.
Paso 12: - A continuación, en la pestaña Generador de código , seleccione Copiar solo los archivos de biblioteca necesarios y luego haga clic en Aceptar.
Paso 13: - Ahora aparece el cuadro de diálogo de generación de código. Seleccione Abrir proyecto para abrir el proyecto automáticamente el código generado en Keil uvsion.
Paso 14: - Ahora se abre la herramienta Keil uVision con nuestro código generado en STM32CubeMx con el mismo nombre de proyecto con la biblioteca necesaria y los códigos que están configurados para los pines que seleccionamos.
Paso 15: - Ahora solo necesitamos incluir la lógica para realizar alguna acción en el LED de salida (pin PC13) cuando se presiona y suelta el botón en la entrada GPIO (pin PA1). Así que seleccione nuestro programa main.c para incluir algunos códigos.
Paso 16: - Ahora agregue el código en el ciclo while (1) , vea la imagen de abajo donde resalté esa sección para ejecutar el código continuamente.
while (1) {if (HAL_GPIO_ReadPin (BUTN_GPIO_Port, BUTN_Pin) == 0) // => Botón DETECTS presionado {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 1); // Para hacer que la salida sea alta cuando se presiona el botón d} else {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 0); // Para hacer que la salida sea baja cuando se presiona el botón}}
Paso 17: - Después de terminar de editar el código, haga clic en el ícono Opciones para el destino debajo de la pestaña de depuración, seleccione Depurador ST-LINK
Además, haga clic en el botón Configuración y luego en la pestaña Descarga de Flash marque la casilla de verificación Restablecer y ejecutar y haga clic en "Aceptar".
Paso 18: - Ahora haga clic en el icono Reconstruir para reconstruir todos los archivos de destino.
Paso 19: - Ahora puede conectar el ST-LINK a la computadora con las conexiones del circuito listas y hacer clic en el ícono DESCARGAR o presionar F8 para flashear el STM32F103C8 con el código que ha generado y editado.
Paso 20: - Puede notar la indicación parpadeante en la parte inferior de la ventana de keil uVision.
Salida de la placa STM32 programada por Keil
Ahora cuando presionamos el pulsador, el LED se enciende y cuando lo soltamos, el LED se apaga.
Programa
La parte principal que hemos agregado en el programa generado se muestra a continuación. El siguiente código debe incluirse en while (1 ) del programa main.c generado por STM32CubeMX. Puede volver al paso 15 al paso 17 para aprender cómo se debe agregar en el programa main.c.
while (1) {if (HAL_GPIO_ReadPin (BUTN_GPIO_Port, BUTN_Pin) == 0) // => Botón DETECTS presionado {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 1); // Para hacer que la salida sea alta cuando se presiona el botón d} else {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 0); // Para hacer que la salida sea baja cuando se presiona el botón}}
El proceso completo de creación y carga de proyectos en la placa STM32 también se explica en el video que se encuentra al final. Además, el código completo del archivo main.c se proporciona a continuación, incluido el código anterior.
Además, puede encontrar nuestro conjunto completo de proyectos STM32 aquí.