提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、freeROTS是什么?
  • 二、移植FreeRTOS步骤
    • 1.移植工具
    • 2.第一步建立一个工程
    • 3.第二步下载FreeRTOS工程文件
    • 4.第三步在新建的keil工程里面新建FreeRTOS文件夹并添加Source里面的全部文件
    • 5.第四步删除portable里面除了下面三个文件外的其他文件
    • 6.第五步在include文件夹下面添加FreeRTOSConfig.h文件
    • 7.第六步在keil里面添加FreeRTOS_CORE和后面那个个文件
    • 8.第七步修改文件解决报错
  • 三.跑例程
  • 总结

前言

今天学习了一下freeROTS操作系统,俗话说工艺善其器,必先利其器。所以今天我学了一下freeRTOS操作系统的移植。


提示:以下是本篇文章正文内容,下面案例可供参考

一、freeROTS是什么?

freeROTS是一款实时操作系统,他不想不带操作系统的单片机运行是按顺序逐步运行,他而是几个优先级相同的任务交叉运行。(理论的东西没啥好说的,网上一大把)

二、移植FreeRTOS步骤

1.移植工具

1.开发板:stm32f103zet6
2.软件:KEIL5、CUBEMX

2.第一步建立一个工程

工程我是用cubemx创建的。我只打开了一个UART1,设置了时钟倍频、程序下载方式。



3.第二步下载FreeRTOS工程文件

下载地址直接搜索freertos,注意要科学上网哈。

4.第三步在新建的keil工程里面新建FreeRTOS文件夹并添加Source里面的全部文件


5.第四步删除portable里面除了下面三个文件外的其他文件

6.第五步在include文件夹下面添加FreeRTOSConfig.h文件

这个文件DOME里面有可以直接复制 ,打开dome然后找到下面文件打开就有FreeRTOSConfig.h文件

7.第六步在keil里面添加FreeRTOS_CORE和后面那个个文件

然后在FreeRTOS_CORE里面添加下面的.c文件

在FreeRTOS_PALAT里面添加下面的文件

然后添加头文件路径

8.第七步修改文件解决报错

第一个要注释掉stm32f1xx_it.c里面的void SVC_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
记住是上面三个文件

然后在添加下面三个宏定义在FreeRTOSConfig.h文件里面

补充:如果移植的不是72mhz的板子需要修改下面的频率哦(针对GD32)
最后就是修改下面的文件

这样基本移植成功了

三.跑例程

main.c

#include "main.h"
#include "usart.h"
#include "gpio.h"
#include "FreeRTOS.h"
#include "task.h"
void SystemClock_Config(void);void Task1Function( void * param){ for(;;){uint8_t buff[10]="2\r\n";HAL_UART_Transmit(&huart1,(uint8_t*)buff,strlen(buff)*sizeof(char),HAL_MAX_DELAY);vTaskDelay(100);}
}
void Task2Function(void* param){GPIO_InitTypeDef GPIO_Init;__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_Init.Mode=GPIO_MODE_OUTPUT_PP;GPIO_Init.Speed = GPIO_SPEED_FREQ_LOW;GPIO_Init.Pin=GPIO_PIN_5;HAL_GPIO_Init(GPIOB,&GPIO_Init);for(;;){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,RESET);vTaskDelay(500);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,SET);vTaskDelay(500);}
}int main(void)
{TaskHandle_t HandlerTask1;HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();xTaskCreate(Task1Function,"Task1",100,NULL,1,&HandlerTask1);xTaskCreate(Task2Function,"Task2",100,NULL,1,&HandlerTask1);vTaskStartScheduler(); //开始调度while (1){}}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

最终成功跑起来了。


总结

移植其实很简单,慢慢来别急躁。他时若遂凌云志,敢笑黄巢不丈夫。

STM32F103移植FreeRTOS相关推荐

  1. STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级)

    STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级) STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级) ...

  2. 基于STM32F103移植FreeRTOS教程

    前言 本教程只针对移植实操,关于理论部分请另行百度学习. 本教程移植实操基于正点原子源码.教程手册进程移植. 移植实操 1.将正点原子跑马灯程序源码复制一份,添加一个文件夹对FreeRTOS源码进行管 ...

  3. 2.STM32F407ZGT6 学习笔记-移植 FreeRTOS

    程序移植的代码: https://gitee.com/chejia12/free-rtos_-f407.git 1. 在工程下建议FreeRTOS文件夹 2. 在FreeRTOS文件夹下建立 src ...

  4. 移植FreeRTOS到STM32

    移植FreeRTOS到STM32单片机上 引言 介绍 什么是 RTOS? 为什么嵌入式设备往往使用RTOS? FreeRTOS 具体步骤 总结 引言 本文详细介绍如何移植FreeRTOS到STM32单 ...

  5. STM32系列单片机标准库移植FreeRTOS V10.4.6详解

      文中所用到的资料下载地址 https://download.csdn.net/download/qq_20222919/87370679   最近看正点原子新录制了手把手教你学FreeRTOS的视 ...

  6. 转发:stm32 移植 freertos

    原链接:http://www.51hei.com/bbs/dpj-106526-1.html 看到一篇stm32移植freertos的文章,讲述的最完整. 前言: 由于之前听过太多人抱怨移植FreeR ...

  7. FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS

     上一次,我们简单的测试了FreeRTOS的基于IAR EWARMv6.4和STM32F103VET6平台的Demo,对其有了一个基本认识.接下来我们开始自己移植FreeRTOS的过程. 1.创建 ...

  8. STM32F103移植mpu9250

    STM32F103移植mpu9250 1. 需求和来源 1.1. 基本配置 1.2. 遗留问题 2. 解决办法 2.1. libmpllib.lib 2.2. 空间不够 1. 需求和来源 回归技术的第 ...

  9. 英飞凌TC397移植FreeRTOS

    英飞凌TC397移植FreeRTOS 一.准备工作 1.FreeRTOS源码 2.STM驱动代码 3.中断相关配置文件 4.AURIX Developement Studio初始工程(包含SDK) 二 ...

最新文章

  1. [Voice Tips 2] IPHONE
  2. 苹果电脑右键怎么按_天正CAD右键菜单怎么改为CAD默认右键菜单?
  3. Intent四个重要属性
  4. Lattice diamond IPexpress 例子 - PLL
  5. Spring JDBC-使用XML配置声明式事务
  6. java类加载器、双亲委派、沙箱安全机制全都让你整明白(三万字,收藏慢慢啃)
  7. 程序员的思维修炼》读书笔记
  8. 收到计算机系统公司退款会计分录,企业账户收到退款,怎么做账务处理?
  9. CVPR2021论文集锦 | CVPR2021最新论文 | CVPR2021审稿结果 | CVPR2021录取结果
  10. MIUI Android p手势,小米8 Android P内测9月开启
  11. 40岁,将站到哪里(转)
  12. hdu 4932 BestCoder Round #4 1002
  13. 女博士实名举报北航人工智能教授:性骚扰!
  14. 营山天气预报软件测试,营山天气预报15天
  15. 记一次IDEA克隆项目代码启动问题
  16. 计算机语言培训机构排行榜,TIOBE 2月编程语言排行榜
  17. 什么是RS232电平?什么是TTL电平?
  18. MySQL 报错:ERROR 1137 (HY000): Can't reopen table: 'tempId'
  19. 深度学习之Deep Image CTR Model
  20. 武汉意向岗位(一)——中国建设银行数据运营中心

热门文章

  1. 停止无效学习,4种高效学习方法,快速提升自己
  2. 当攀藤 PM2.5 传感器遇上 RT-Thread(国产实时线程操作系统内核)(转载)
  3. 几款好用的报表制作软件!!!
  4. Java到底能干什么?
  5. 夜神模拟器没有开发者选项怎么办?
  6. Xneomai 简介
  7. linux lvm删除分区,Linux LVM中的PV物理卷(硬盘或分区)删除方法
  8. UE5 植被系统详解
  9. Camera4 MTK camera驱动结构介绍
  10. 快速提取Word文档中的所有图片