Acerca del curso
En este curso aprenderás a desarrollar proyectos basados en el CortexM de ARM desde cero. Utilizando herramientas estándar en la industria y Open Source.
Entre otras cosas, entenderás el proceso de arranque de los Cortex-M (qué pasa antes de llegar a la función main y cómo se debe configurar el arranque y la memoria). Dedicaremos varias secciones a la generación de los binarios, entendiendo las flags de compilación y de linkado, y veremos cómo flashearlos y depurarlos en cualquier placa usando herramientas estándar de la industria.
Posteriormente veremos cómo añadir las librerías CMSIS y la Standard Peripheral Library de ST, como un ejemplo práctico y detallado que os valdrá para aprender a integrar cualquier librería a vuestros proyectos.
Una vez que entendemos el proceso de arranque, veremos cómo integrar nuestros proyectos en Eclipse, un IDE gratuito y ampliamente utilizado.
Por último, finalizaremos el curso con ejemplos prácticos para mostrar cómo añadir un sistema operativo en tiempo real como FreeRTOS que nos abra loas puertas al desarrollo de aplicaciones multi-threading y de tiempo real. Haremos ejemplos de creación de tareas, comunicación entre ellas mediante colas de mensajes y utilización de software timers.
Módulos del curso:
-
Instalación y configuración del entorno de desarrollo
Como siempre, una primera sección para la instalación de herramientas, toolchain de ARM, etc que se utilizarán a lo largo del curso. No se usan herramientas propietarias ni de pago para tener un entorno de desarrollo versátil, totalmente gratuito y evitar el vendor lock-in. Todo el curso se realiza en Linux (aunque también se pueden encontrar las herramientas que se instalan para Windows, si quieres dedicarte a esto y sacarle el máximo partido, te recomiendo encarecidamente que uses Linux).
-
Arranque de la MCU. De reset a main.
Muchos desarrolladores usan IDEs que hacen todo el trabajo previo a la ejecución de main. Esto hace que no conozcan bien qué es lo que sucede realmente cuando la MCU arranca, ni los pasos necesarios para configurar correctamente la vector table, la memoria, el stack pointer, el reset handler.. y muchos otros detalles que es necesario entender para ser un desarrollador competente. Esto te permitirá depurar problemas de arranque, crear tus propios linker scripts, conocer las flags de compilación y linkado, organizar tu código en secciones, poder decidir dónde meter cada sección en memoria, entender los bootloaders.. en definitiva, tener el control total de lo que hace tu programa desde el momento que alimentas la placa o generas un reset.
En esta sección se explica el linker script, el startup file, las flags de compilación y linkado, la librería estandar de C, se analiza el binario generado, se graba y depura en la placa utilizando openocd y gdb.
Se combina la teoría con un ejemplo que se crea desde cero y sin la ayuda de ningún IDE, simplemente con un editor de texto.
-
Introducción a GNU Make
Una vez que sabemos generar nuestro binario, vemos como utilizar la herramienta Make para hacernos la vida mucho más fácil. Creamos los Makefile que automatizan la compilación y el linkado y permiten gestionar grandes proyectos.
-
Añadiendo CMSIS y la STM32 Standard Peripheral Library de ST a nuestro proyecto
Esto es algo que algunos me habíais pedido. Un ejemplo práctico de cómo añadir CMSIS y la Standard Peripheral Library de ST a cualquier proyecto.
Vemos paso a paso, y de forma práctica, cómo configurar e integrar la librería a nuestro proyecto para poder empezar a usar los drivers de ST. Se van resolviendo los problemas a medida que aparecen y se integran también las syscalls de la Newlib.
También se amplían los Makefiles de la sección anterior y se muestran un par de ejemplos que hacen uso de los drivers.
La idea es que, después de estudiar esta sección, podáis incorporar al proyecto cualquier librería que queráis utilizar.
-
Integración con Eclipse
Una vez que ya se entiende todo el proceso de compilación y arranque del sistema, podemos instalar cualquier IDE y configurarlo para que utilice nuestros Makefiles. De esta forma, podemos hacer uso de las funcionalidades que ofrece el IDE a la vez que entendemos y controlamos totalmente el proceso de generación de nuestro binario.
En esta sección, instalamos Eclipse y lo configuramos para compilar, grabar y depurar nuestro programa desde el IDE. También instalamos los paquetes CMSIS para mostrar los periféricos de la MCU de forma gráfica.
-
Integrando FreeRTOS en nuestros proyectos
En esta sección añadimos a nuestros proyectos FreeRTOS, que es un sistema operativo de tiempo real gratuito y muy utilizado en la industria.
Una vez más, se muestra todo el proceso de integración y configuración de forma práctica y desde cero, resolviendo los problemas que van surgiendo hasta llegar a una compilación limpia.
Se realizan ejemplos multi-thread donde diferentes tareas se comunican mediante colas de mensajes y se hace uso de los software timers que ofrece FreeRTOS.
No se entra a explicar FreeRTOS en profundidad, ya que eso daría para un curso en sí mismo, pero se muestran ejemplos de cómo usar varias de sus APIs de forma que, echando mano a la documentación, podáis empezar a jugar con él y a utilizar el resto de elementos y funcionalidades que ofrece.
Este curso es el complemento perfecto al curso de drivers, y completa los conocimientos para poder crear proyectos controlando cada parte del sistema.
Proceso de arranque
de los ARM CortexM
Aprende todo el proceso de arranque de la MCU y cómo configurarlo según tus necesidades.
Linker script
Entiende los linker scripts, qué son y cómo se definen para tener el control absoluto de la organización de la memoria.
Compilación y lincado
Veremos cómo compilar y lincar correctamente nuestro código objeto, utilizando las flags adecuadas, para generar el binario que corra en nuestra MCU.
GNU Make
Con la herramienta GNU Make aprenderemos cómo automatizar la generación del binario y hacer el proceso mucho más simple y eficiente.
Common Microcontroller Software Interface Standard
Añadiremos CMSIS como capa de abstracción vendor-independent.
STM32 Peripheral Library
Integraremos la STM32 Standard Peripheral Library de ST en nuestro proyecto para facilitar el manejo de periféricos.
Eclipse IDE
Una vez entendido todo el proceso de arranque y generación del binario desde cero, pasaremos a instalar Eclipse como entorno de desarrollo estándar.
Real Time Operating System
Agregaremos FreeRTOS a nuestro proyecto y veremos cómo crear tareas y comunicarlas entre ellas.
Dame feedback!
Pare crear nuevos cursos o añadir secciones a los existentes no dudes en mandarme un email o un mensaje con las secciones que te gustaría que tratara.
Example Curriculum
- Arranque de la MCU (1) (3:54)
- Arranque de la MCU (2) (4:55)
- Arranque de la MCU (3) (2:21)
- Arranque de la MCU (4) (3:57)
- Arranque de la MCU (5) (3:13)
- Linker script (1) (6:27)
- Linker script (2) (3:39)
- Linker script (3) (2:56)
- Linker script (4) (4:05)
- Startup file (1) (2:13)
- Startup file (2) (3:46)
- Startup file (3) (2:24)
- Startup file (4) (3:34)
- Startup file (5) (2:52)
- Ejemplo 1: arranque desde cero: Aplicación (6:44)
- Ejemplo 1: arranque desde cero: Linkerscript (5:00)
- Ejemplo 1: arranque desde cero: Startup code (4:16)
- Ejemplo 1: arranque desde cero: Compilación (6:46)
- Ejemplo 1: arranque desde cero: Análisis 1 (9:09)
- Ejemplo 1: arranque desde cero: Análisis 2 (4:44)
- Ejemplo 1: arranque desde cero: openocd (3:44)
- Ejemplo 1: arranque desde cero: GDB (10:58)
- Descarga e instalación de la STD Peripheral library de ST y CMSIS de ARM (7:20)
- Primer programa usando STD Peripheral library y CMSIS (7:14)
- Modificación del Makefile para integrar las librerías (11:43)
- Solucionando warnings y errores de compilación (3:45)
- Explicación de Newlib y syscalls necesarias (7:31)
- Implementación de las syscalls que espera Newlib (4:25)
- Utilización del header stm32f4xx_conf.h y definición del símbolo _end en el linker script (5:51)
- Ejecución y demostración del programa (4:32)
- Obtener fuentes para añadir la función SystemInit (2:48)
- Explicación del código fuente (6:40)
- Configuración del HSE_VALUE y utilización de la función SystemInit en nuestro código (2:50)
- Demostración del programa a 168MHz (2:33)
- Demostración práctica de la importancia del commando KEEP en el linker script (3:54)
- Generación automática de ficheros de dependencias para regenerar si se modifica algún header file (9:00)
- Ejemplo de lectura de puerto serie - explicación (3:41)
- Ejemplo de lectura de puerto serie - demostración (2:40)
- Creación de Makefile principal (7:07)
- Creación de Makefile principal (cont.) (4:47)
- Instalación (3:37)
- Hacer clean de todos los proyectos (2:18)
- Creación de los targets en Eclipse (3:30)
- Configuración de las rutas de los ficheros de cabecera (5:17)
- Configuración de OpenOCD y GDB en Eclipse (7:02)
- Debugando desde Eclipse y con la terminal serie integrada (4:05)
- Aprovechando los plugins de Eclipse (7:58)
- Instalación de paquetes CMSIS para mostrar los periféricos de la MCU (5:39)
- Demostración de depuración con acceso a los periféricos (3:48)
- Descargando FreeRTOS (8:35)
- Añadiendo el fichero de configuración FreeRTOSConfig.h (5:53)
- Compilando el proyecto con FreeRTOS (5:20)
- Creando las primeras tareas y configurando el kernel de FreeRTOS (10:02)
- Definiendo los manejadores de excepciones necesarios (7:28)
- Ejecutando el primer ejemplo multitarea (1:10)
- Añadiendo una cola de mensajes para la comunicación entre tareas (6:03)
- Añadiendo una cola de mensajes para la comunicación entre tareas (Cont.) (6:49)
- Definiendo la tarea que lee de la cola e imprime los mensajes por consola (5:12)
- Añadiendo un timer periódico con callback (4:57)
- Ejecutando el ejemplo con el timer añadido (2:30)
- Corrigiendo la configuración del PLL (3:54)
¡Si no te convence te devolvemos el dinero!
(*) Estamos tan seguros de que el curso te va a gustar que te devolvemos el dinero sin hacer preguntas si cancelas tu suscripción durante los primeros 30 días.
(siempre y cuando no hayas cursado más de un cuarto del mismo)
Otros cursos
Quizá también puedan interesarte estos otros cursos disponibles en la academia: