STM32F103移植FreeRTOS
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、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相关推荐
- STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级)
STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级) STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级) ...
- 基于STM32F103移植FreeRTOS教程
前言 本教程只针对移植实操,关于理论部分请另行百度学习. 本教程移植实操基于正点原子源码.教程手册进程移植. 移植实操 1.将正点原子跑马灯程序源码复制一份,添加一个文件夹对FreeRTOS源码进行管 ...
- 2.STM32F407ZGT6 学习笔记-移植 FreeRTOS
程序移植的代码: https://gitee.com/chejia12/free-rtos_-f407.git 1. 在工程下建议FreeRTOS文件夹 2. 在FreeRTOS文件夹下建立 src ...
- 移植FreeRTOS到STM32
移植FreeRTOS到STM32单片机上 引言 介绍 什么是 RTOS? 为什么嵌入式设备往往使用RTOS? FreeRTOS 具体步骤 总结 引言 本文详细介绍如何移植FreeRTOS到STM32单 ...
- STM32系列单片机标准库移植FreeRTOS V10.4.6详解
文中所用到的资料下载地址 https://download.csdn.net/download/qq_20222919/87370679 最近看正点原子新录制了手把手教你学FreeRTOS的视 ...
- 转发:stm32 移植 freertos
原链接:http://www.51hei.com/bbs/dpj-106526-1.html 看到一篇stm32移植freertos的文章,讲述的最完整. 前言: 由于之前听过太多人抱怨移植FreeR ...
- FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
上一次,我们简单的测试了FreeRTOS的基于IAR EWARMv6.4和STM32F103VET6平台的Demo,对其有了一个基本认识.接下来我们开始自己移植FreeRTOS的过程. 1.创建 ...
- STM32F103移植mpu9250
STM32F103移植mpu9250 1. 需求和来源 1.1. 基本配置 1.2. 遗留问题 2. 解决办法 2.1. libmpllib.lib 2.2. 空间不够 1. 需求和来源 回归技术的第 ...
- 英飞凌TC397移植FreeRTOS
英飞凌TC397移植FreeRTOS 一.准备工作 1.FreeRTOS源码 2.STM驱动代码 3.中断相关配置文件 4.AURIX Developement Studio初始工程(包含SDK) 二 ...
最新文章
- [Voice Tips 2] IPHONE
- 苹果电脑右键怎么按_天正CAD右键菜单怎么改为CAD默认右键菜单?
- Intent四个重要属性
- Lattice diamond IPexpress 例子 - PLL
- Spring JDBC-使用XML配置声明式事务
- java类加载器、双亲委派、沙箱安全机制全都让你整明白(三万字,收藏慢慢啃)
- 程序员的思维修炼》读书笔记
- 收到计算机系统公司退款会计分录,企业账户收到退款,怎么做账务处理?
- CVPR2021论文集锦 | CVPR2021最新论文 | CVPR2021审稿结果 | CVPR2021录取结果
- MIUI Android p手势,小米8 Android P内测9月开启
- 40岁,将站到哪里(转)
- hdu 4932 BestCoder Round #4 1002
- 女博士实名举报北航人工智能教授:性骚扰!
- 营山天气预报软件测试,营山天气预报15天
- 记一次IDEA克隆项目代码启动问题
- 计算机语言培训机构排行榜,TIOBE 2月编程语言排行榜
- 什么是RS232电平?什么是TTL电平?
- MySQL 报错:ERROR 1137 (HY000): Can't reopen table: 'tempId'
- 深度学习之Deep Image CTR Model
- 武汉意向岗位(一)——中国建设银行数据运营中心