STM32F10x SPL V3.6.2 集成 FreeRTOS v202112( 二 )

测试代码以上步骤就已经完成了 FreeRTOS 的集成, 可以使用以下代码检测结果. 对于 Bluepill 板载 LED PC13 的亮灯测试.
需要注意的是, 如果使用了 FreeRTOS, 就不要再调用 SysTick_Config() 方法, 会和 FreeRTOS 冲突.
#include <stm32f10x.h>#include <stm32f10x_gpio.h>#include <stm32f10x_rcc.h>#include "FreeRTOS.h"#include "task.h"#include "queue.h"void vTaskFunction(void *pvParameters){(void)(pvParameters);// Suppress "unused parameter" warningwhile (1){GPIO_ResetBits(GPIOC, GPIO_Pin_13);vTaskDelay(500);GPIO_SetBits(GPIOC, GPIO_Pin_13);vTaskDelay(500);}}void LED_Config(void){// GPIO structure for port initializationGPIO_InitTypeDef GPIO_InitStructure;// enable clock on APB2RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);/* configure port PC13 for driving an LED* Use GPIO_Pin_All if you want to drive the whole port*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;// output push-pull modeGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // highest speedGPIO_Init(GPIOC, &GPIO_InitStructure);// initialize port}int main(void){BaseType_t xReturned;/** Don't use Delay_Init(), which conflict with FreeRTOS tick handling*/LED_Config();xReturned = xTaskCreate(vTaskFunction,// Task function point"TaskLED",// Task nameconfigMINIMAL_STACK_SIZE,// Use the minimum stack size, each take 4 bytes(32bit)NULL,// Parameters2,// PriorityNULL);// Task handlerif (xReturned != pdPASS){while (1);}/* Start the scheduler. */vTaskStartScheduler();/* Will only get here if there was not enough heap space to create the idle task. */return 0;}参考

  • 快速上手 https://www.freertos.org/FreeRTOS-quick-start-guide.html
  • 如何集成, 需要哪些文件 https://www.freertos.org/Creating-a-new-FreeRTOS-project.html
  • FreeRTOS 作者 Richard Barry 的演讲,2013年 https://www.youtube.com/watch?v=1oagM_tEyeA
【STM32F10x SPL V3.6.2 集成 FreeRTOS v202112】

经验总结扩展阅读