简介
在裸机系统中,所有的程序基本都是自己写的,所有的操作都是在一个无限的大循环里面实现。现在还有一些项目开发用的都是裸机系统,而且也能够满足需求。 为什么还要学习 RTOS 编程,偏偏还要整个操作系统进来。一是项目需要,随着项目要实现的功能越来越多,单纯的裸机系统已经不能够完美地解决问题,反而会使编程变得更加复杂,如果想降低编程的难度,我们可以考虑引入RTOS 实现多任务管理,这是使用 RTOS 的最大优势。二是学习的需要,进入实时操作系统的学习对于我们后面学习Linux系统开发会有不少的帮助;
资源下载
Github下载:https://github.com/freertos
托管下载:https://sourceforge.net/projects/freertos/files/FreeRTOS/
官网下载:https://www.freertos.org/
在这里我采用FreeRTOSv9.0.0.zip这个包进行后续的开发,这也是使用人数较多的一个版本相对比较稳定,建议大家在学习的过程使用和我一样的版本,如果你的开发板和我的不同也没有关系,我们下面的工程创建将采用STM32CubeMX进行创建,理论上我们的应用代码是都可以使用的只是在创建工程时选择的芯片不同,后续的外设可能引脚会有所改变,但这不影响学习;
工程创建
选择自己对应的芯片
配置时钟,我这里使用的是正点原子的探索者所以高速和低速都选择外部晶振时钟,根据自己板子原理图搭配即可
配置调试模式和配置基准时钟(原来的systick用来作为FreeRTOS的任务切换了,我们的HAL_Delay就没有基准时钟了)
配置串口1
配置时钟
配置两个LED灯
配置工程
然后生成工程并测试工程
/** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin); HAL_Delay(200); HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin); HAL_Delay(200); } /* USER CODE END 3 */ }
【FreeRTOS】系统移植:资料下载(二)https://developer.aliyun.com/article/1472585