Acerca del curso
En este curso aprenderás paso a paso y en profundidad a programar drivers en C para manejar diferentes periféricos y crear firmware de calidad. Durante el proceso, aprenderás también a manejar toda la documentación necesaria (reference manuals, datasheets, user guides...), a manejar un analizador lógico y a depurar tu código.
No se utiliza ningún tipo de código auto generado ni de terceros. Los drivers proporcionados por los fabricantes, como la HAL de ST, intentan ser todo lo generalistas que pueden para abarcar el número máximo de MCUs, esto hace que sean muy poco eficientes y poco aconsejables para proyectos profesionales. En este curso se estudian las particularidades de los cortex-m y se van construyendo los drivers poco a poco desde bajo nivel (escribiendo directamente en los registros) para crear las APIs que ofrecen al usuario el nivel de abstracción necesario para simplificar en gran medida el control de los periféricos en el desarrollo del firmware en capas superiores. Esto te permitirá entender en profundidad cómo funcionan los periféricos internamente, en lugar de usar a ciegas drivers de terceros.
El temario está dividido en cinco módulos, en los que verás:
-
GPIO: Todo lo relacionado con las entradas y salidas de propósito general. Programarás un driver para configurarlas y controlarlas por completo, incluyendo su uso mediante interrupciones.
-
RCC: en este módulo aprenderás las diferentes fuentes de reloj de las que dispone la MCU y cómo configurar el clock del sistema. También aprenderemos el uso del PLL para multiplicar la frecuencia de reloj y ajustarla a nuestras necesidades. Sacaremos varias señales de reloj hacia el exterior mediante el pin MCO1 para poder medir la frecuencia configurada y comprobar que nuestro driver funciona correctamente.
-
TIMERS: este es el módulo más extenso, ya que se estudia al detalle el uso de los diferentes timers con incluye la MCU. Desde los básicos hasta los avanzados, pasando por los de propósito general. No solo estudiamos el uso de los timers como simple temporización, sino que también se explican los usos de Input Capture para la obtención del tiempo entre eventos de entrada y medición de señales, y de Output Compare para la generación de salidas y señales PWM. Hay multitud de ejercicios para afianzar los conceptos de cada uno de los modos. Al final del módulo se incluyen ejercicios avanzados. En uno de ellos se explica el PWM Input mode, para la medición por hardware del periodo y el ciclo de trabajo de una señal PWM. En otro se utiliza el modo Encoder para la obtención y el tratamiento, también por hardware, de las señales entregadas por los encoders.
-
SYSTICK: en este módulo se estudia el timer del sistema, interno al CortexM4. Aprenderás a configurarlo y a beneficiarte de las ventajas que ofrece y que aprovechan los sistemas de tiempo real RTOS.
- WATCHDOG: en este móculo se estudia el uso de los diferentes watchdogs que ofrece la MCU. Primero se explica el Independent Watchdog (IWDG), que es el más común, y luego se ve el Window Watchdog (WWDG), que permite controlar los tiempos de refresco de forma más fina e introduce un tiempo mínimo de espera antes de actualizar el watchdog para evitar el reset. Como siempre, programamos los drivers para ambos y realizamos ejercicios para ver posibles usos y afianzar conocimientos.
En resumen, más de 11h de curso repartidas en 5 módulos de los que acabarás siendo un experto. Después de este curso serás capaz de programar tus propios drivers, entenderás el funcionamiento de periféricos fundamentales, de los cortex-M y tendrás un conocimiento amplio del desarrollo firmware.
¡IMPORTANTE! No se utilizan generadores de código ni librerías de terceros. Lo hacemos todo desde cero, que es como más se aprende.
Si estás interesado en el mundo de los microcontroladores y el desarrollo firmware, este curso te va a ser de gran ayuda y te va a ahorrar cientos de horas de búsqueda de información por tu cuenta.
¡Espero verte dentro!
GPIO
Aprende en profundidad el funcionamiento y el uso de los GPIOs. Crea tu driver para su uso tanto por polling como por interrupciones.
RCC / PLL
Entiende el uso y configuración de las diferentes fuentes de reloj así como de los PLL para alcanzar frecuencias más elevadas.
SYSTICK
Configura el reloj del sistema para disponer de funcionalidades de timestamp y cálculo de tiempos.
TIMERS
Configura los diferentes timers que ofrece la MCU (basic, general purpose y advanced) para aprovechar toda la potencia del microcontrolador y poder maximizar la eficiencia de tu hardware.
WATCHDOG
Aprende a utilizar los diferentes watchdogs para hacer tus aplicaciones más robustas frente a fallos y sucesos inesperados.
Impulsa tu creatividad
Realiza los numerosos ejercicios que pueden resolverse de infinitas formas, encuentra la más adecuanda y aprende a solucionar problemas de la manera más eficiente y creativa.
Example Curriculum
- Explicación del diagrama esquemático de los pines de la MCU (7:41)
- Resistencias de Pull-up y Pull-down (4:25)
- Configuraciones de push-pull y open drain. Casos de uso. (4:35)
- Registros (2:44)
- Creación proyecto stm32f4xx_drivers (5:52)
- Modificación estado de led desde debugger (10:22)
- Modificación de registros por código. Primera aproximación. (8:49)
- Creación del include principal y definición de la estructura GPIO (13:15)
- Definición de estructura de registros para RCC y macros de control (6:24)
- Creación de los ficheros para el driver GPIO y estructuras asociadas (12:03)
- Creación de las primeras APIs del driver (16:48)
- Inicialización del driver (9:49)
- Ejemplo 1: control de LED (5:16)
- Ejemplo 2: lectura de pulsador mediante polling (7:45)
- Interrupciones (12:01)
- Interrupciones GPIO: controlador EXTI (6:18)
- Configuración de los registros del EXTI (7:13)
- Añadir defines y estructura de registros EXTI (6:55)
- Configuración de las interrupciones (14:37)
- NVIC: Nested Vectored Interrupt Controller (7:31)
- Implementación de las APIs GPIO_NVIC (15:14)
- Ejemplo 3: Lectura de GPIO mediante interrupciones (10:10)
- Explicación del clock tree. Fuentes de reloj y PLL (15:22)
- Ejercicio de cálculo de PLL (3:00)
- Configuración del reloj HSE (High Speed External) (12:17)
- Configuración del reloj LSE (Low Speed External) y PLL (Phase Locked Loop) (16:28)
- Configuración del MCO1 y de la fuente de reloj del SYSCLOCK (9:54)
- Configuración de los prescalers de los buses AHB, APB1 y APB2 (2:51)
- Obtención de las frecuencias configuradas para el reloj del sistema y los buses. (12:47)
- Aclaración HSE en la NUCLEO-F446RE
- Ejercicio de configuración de los relojes del sistema (18:28)
- Conceptos generales y Basic Timers (9:19)
- Definición del driver para los Basic Timers (18:49)
- Implementación Basic Timers 1 (4:56)
- Implementación Basic Timers 2 (21:23)
- Ejercicio 1: Basic TImers utilizando polling. (11:16)
- Ejercicio 2: Basic TImers utilizando interrupciones (3:38)
- Input Capture: Timers avanzados y de propósito general. (7:19)
- Input Capture: Definición de su estructura y API de configuración (9:09)
- Input Capture: Implementación de la rutina de configuración (14:08)
- Input Capture: Finalización de la implementación (5:56)
- Input Capture: Explicación ejercicio de lectura de frecuencia (5:35)
- Ejercicio 3: Input Capture para lectura de frecuencia (Parte 1 de 2) (13:55)
- Ejercicio 3: Input Capture para lectura de frecuencia (Parte 2 de 2) (14:50)
- Ejercicio 3: Demostración y solución de problemas (8:57)
- Output Compare: Explicación de funcionamiento y modos (14:07)
- Output Compare: API de inicialización canal 1 (10:39)
- Output Compare: Inicialización resto de canales (0:52)
- Ejercicio 4: Output Compare para el toggle por hardware del led (Parte 1 de 2) (6:48)
- Ejercicio 4: Output Compare para el toggle por hardware del led (Parte 2 de 2) (3:09)
- Ejercicio 5: Output Compare para generación de señales cuadradas (3:54)
- Ejercicio 6: Output Compare para la generación de diferentes frecuencias (11:00)
- Ejercicio 7: Output Compare para generación de señales PWM (8:31)
- Ejercicio 8: Output Compare para control del brillo del led mediante PWM (1:10)
- Ejercicio 9: Output Compare para el control de un servo mediante PWM (8:51)
- Modos avanzados: explicación modos maestro/esclavo (5:46)
- Modos avanzados: implementación APIs maestro/esclavo (6:23)
- Ejercicio 10: Medición por hardware de señales PWM (Parte 1 de 4) (3:22)
- Ejercicio 10: Medición por hardware de señales PWM (Parte 2 de 4) (4:34)
- Ejercicio 10: Medición por hardware de señales PWM (Parte 3 de 4) (13:47)
- Ejercicio 10: Medición por hardware de señales PWM (Parte 4 de 4) (3:29)
- Ejercicio 11: Manejo de encoders por hardware (Parte 1 de 3) (8:06)
- Ejercicio 11: Manejo de encoders por hardware (Parte 2 de 3) (5:08)
- Ejercicio 11: Manejo de encoders por hardware (Parte 3 de 3) (2:02)
- IWDG: Explicación del Independent Watchdog (8:26)
- IWDG: Implementación del driver (6:12)
- IWDG: Ejercicio de demostración (Parte 1 de 2) (5:24)
- IWDG: Ejercicio de demostración (Parte 2 de 2) (3:45)
- WWDG: Window Watchdog (9:06)
- WWDG: Implementación del driver (3:56)
- WWDG: Ejercicio de demostración (17:49)
¡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: