FreeRTOS(STM32CubeMX)

Introducción a FreeRTOS

inserte la descripción de la imagen aquí

FreeRTOS (sistema operativo en tiempo real) es un kernel de sistema operativo en tiempo real de código abierto diseñado para sistemas integrados y microcontroladores. Fue desarrollado por Richard Barry y lanzado originalmente en 2003. FreeRTOS proporciona un conjunto de mecanismos de administración de tareas y programación en tiempo real ricos en funciones que se pueden usar para implementar múltiples tareas en sistemas integrados.

El objetivo principal de FreeRTOS es proporcionar un sistema operativo en tiempo real ligero, eficiente y portátil para aplicaciones integradas. Es ampliamente utilizado en varios dispositivos integrados y áreas de aplicación, como automatización industrial, dispositivos IoT, electrónica de consumo, sistemas de control automotriz, equipos médicos, etc.
inserte la descripción de la imagen aquí

Características principales de FreeRTOS

  1. Programación en tiempo real: permite a los desarrolladores crear múltiples tareas e implementar la programación en tiempo real según la prioridad de las tareas para garantizar que las tareas de alta prioridad se ejecuten antes que las de baja prioridad.

  2. Gestión de tareas: admite la creación, eliminación y suspensión de tareas, así como la comunicación y sincronización entre tareas, a través de primitivas de sincronización como semáforos, colas, mutex y grupos de indicadores de eventos.

  3. Gestión de memoria: proporciona funciones de gestión de memoria y puede elegir la asignación de memoria estática o la asignación de memoria dinámica según los requisitos de la aplicación.

  4. Temporizador de software: contiene temporizadores de software que permiten que las aplicaciones implementen funciones de temporización periódicas o únicas.

  5. Soporte de bajo consumo: admite el modo de suspensión Hit-Tick, que permite que el microcontrolador entre en un estado de bajo consumo cuando está inactivo para ahorrar energía.

  6. Portabilidad: FreeRTOS está diseñado para ser altamente portátil y admite múltiples arquitecturas de procesador y cadenas de herramientas de desarrollo.

Con FreeRTOS, los desarrolladores pueden implementar un procesamiento complejo de tareas en tiempo real, lo que permite que los sistemas integrados realicen múltiples tareas de manera eficiente y confiable. Su simplicidad, portabilidad y naturaleza de código abierto hacen de FreeRTOS uno de los kernels de sistemas operativos en tiempo real más populares para el desarrollo integrado.

Cuándo usar FreeRTOS

inserte la descripción de la imagen aquí

  1. Multitarea: si la aplicación STM32 necesita realizar varias tareas al mismo tiempo y necesita programar y administrar estas tareas en tiempo real, FreeRTOS es una buena opción. FreeRTOS permite que se creen múltiples tareas en un solo microcontrolador STM32, y la programación en tiempo real se realiza de acuerdo con la prioridad de las tareas para garantizar que las tareas de alta prioridad se puedan ejecutar a tiempo.

  2. Comunicación y sincronización entre tareas: si diferentes tareas en la aplicación necesitan comunicarse y sincronizarse entre sí, por ejemplo, mediante el paso de mensajes o el intercambio de datos, las primitivas de sincronización proporcionadas por FreeRTOS (como colas, semáforos, mutexes, etc.) se pueden implementar fácilmente estas funciones.

  3. Requisitos en tiempo real: algunos escenarios de aplicaciones tienen altos requisitos en tiempo real y las tareas deben realizarse bajo estrictas limitaciones de tiempo. FreeRTOS es un sistema operativo en tiempo real que puede proporcionar mecanismos de respuesta y programación de tareas confiables para cumplir con estos requisitos en tiempo real.

  4. Ahorro de energía y bajo consumo de energía: FreeRTOS admite el modo de suspensión Hit-Tick, que permite que el microcontrolador entre en un estado de bajo consumo cuando está inactivo para ahorrar energía. Si su aplicación necesita ejecutarse en un modo de bajo consumo, FreeRTOS puede ayudarlo a hacerlo.

  5. Procesamiento de tareas complejas: para aplicaciones que involucran procesamiento de tareas complejas, control de subprocesos múltiples o máquinas de estado, el uso de FreeRTOS puede organizar mejor la estructura del código y mejorar la legibilidad y el mantenimiento del código.

  6. Portabilidad multiplataforma: si la aplicación necesita ejecutarse en diferentes plataformas de hardware, FreeRTOS proporciona una característica altamente portátil, lo que hace que el código de la aplicación sea más fácil de portar y reutilizar.

Cuando las aplicaciones STM32 requieren multitarea, comunicación y sincronización entre tareas, garantías en tiempo real o funciones de bajo consumo y ahorro de energía, FreeRTOS es una opción muy adecuada a considerar. Pero tenga en cuenta que los requisitos de cada aplicación son diferentes. Para aplicaciones simples o escenarios con recursos limitados, también puede elegir otras soluciones de administración de tareas livianas o escribir código de sondeo simple para implementar funciones.

Cómo usar FreeRTOS en STM32CubeMX

Usar FreeRTOS con STM32CubeMX es muy simple. STM32CubeMX es una herramienta de configuración gráfica proporcionada por STMicroelectronics, que se utiliza para generar rápidamente código de inicialización y configuración de microcontroladores STM32. Admite la integración de FreeRTOS en proyectos STM32, lo que facilita la creación y administración de tareas de FreeRTOS y aprovecha sus capacidades de programación en tiempo real.

Los siguientes son los pasos básicos para usar FreeRTOS en STM32CubeMX:

  1. Abra STM32CubeMX: Primero, abra la herramienta STM32CubeMX y seleccione el modelo de microcontrolador STM32.
    inserte la descripción de la imagen aquí

  2. Configure el reloj del sistema y los periféricos: según los requisitos del proyecto, configure el reloj del sistema y los periféricos en la pestaña "Configuración". Esto incluye configurar fuentes de reloj, frecuencias de reloj, pines GPIO, módulos periféricos, etc.
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí

  3. Configure FreeRTOS: en la pestaña "Middleware", seleccione "FreeRTOS" y actívelo. Puede optar por configurar parámetros como el tamaño de la pila y la prioridad de la tarea de FreeRTOS.
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí

  4. Agregar tareas: después de configurar FreeRTOS, se pueden agregar tareas en la pestaña "Tareas". Haga clic en el botón "Agregar tarea" para ingresar el nombre de la tarea, el tamaño de la pila, la prioridad y otra información.
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí

  5. Configurar tarea: después de seleccionar la tarea agregada, puede configurar las propiedades de la tarea a la derecha. Se puede especificar la prioridad de la tarea, el tamaño de la pila y la función de ejecución de la tarea (función de tarea).

  6. Generar código: después de completar la configuración, haga clic en el botón "Proyecto" en la barra de herramientas STM32CubeMX y seleccione "Generar código" para generar el código del proyecto STM32 integrado con FreeRTOS.

  7. Escriba la función de la tarea: de acuerdo con la función de la tarea configurada en STM32CubeMX, busque la función de la tarea correspondiente en el código generado y escriba la implementación específica de la tarea.

  8. Compilar y grabar: abra el proyecto de código generado con su IDE favorito (STM32CubeIDE, Keil, IAR, etc.), compile el código y grábelo en el microcontrolador STM32.

Iluminación FreeRTOS para STM32

  1. Abra STM32CubeMX y seleccione el modelo de microcontrolador de la serie STM32F4 (por ejemplo, STM32F407VG).
    inserte la descripción de la imagen aquí

  2. Configure el reloj del sistema y GPIO: en la pestaña "Configuración", configure el reloj del sistema y los pines GPIO que se utilizarán para controlar los LED. Supongamos que conectamos un LED al Pin 3 del GPIOB.
    inserte la descripción de la imagen aquí

  3. Configure FreeRTOS: en la pestaña "Middleware", seleccione "FreeRTOS" y actívelo. Puede agregar tareas en la pestaña "Tareas", aquí agregue una tarea para controlar el LED.
    inserte la descripción de la imagen aquí

  4. Agregar una tarea: en la pestaña "Tareas", haga clic en el botón "Agregar tarea". Nombre la tarea "LEDTask".
    inserte la descripción de la imagen aquí

  5. Configure la tarea: haga clic con el botón derecho en la "LEDTask" agregada, seleccione "Generación de código abierto" y luego ingrese el nombre de la función de la tarea en "Función de tarea". Nombre la función de tarea "vLEDTask".
    inserte la descripción de la imagen aquí

  6. Generar código: haga clic en el botón "Proyecto" en la barra de herramientas STM32CubeMX y seleccione "Generar código" para generar código.
    inserte la descripción de la imagen aquí

  7. Escriba la función de la tarea: busque la función "vLEDTask" en el código generado y escriba la implementación específica de la tarea.

Ejemplo de código (basado en la biblioteca HAL STM32CubeF4):
agregue el siguiente código en el archivo main.c:

//提示:包含了就不用写
#include "main.h"
#include "cmsis_os.h"

// Function prototypes
void vLEDTask(void *argument);

int main(void)
{
    
    
  xTaskCreate(vLEDTask, "LEDTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
  vTaskStartScheduler();
  while (1);
}

void vLEDTask(void *argument)
{
    
    
  for (;;)
  {
    
    
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
    vTaskDelay(pdMS_TO_TICKS(500));
  }
}

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_56694518/article/details/132155463
Recomendado
Clasificación