当前位置: 首页 > news >正文

STM32的FreeRtos的学习

首先就是去官网下载一个源文件:FreeRtos官网

下载下来的是一个zip文件,解压缩了。

然后再工程文件夹中创建个文件夹:

在这个文件夹中创建3个文件夹:

然后开始把下载下来的文件夹中的文件挑选出来放到我们的工程文件夹中:

至此所需要的文件就全部拷贝齐全了,接下来就是在工程中添加各个文件了。

最后三个文件夹的文件在工程中的分布如图:

接下来就是主程序了,其实过程就是:

1:声明一个任务句柄。

2:创建一个任务函数。

3:创建一个任务。

4:开启调度器。

#include "stm32f10x.h"                  // Device header
#include "freertos.h"      //包含freeRtos头文件
#include "task.h"           //包含task头文件TaskHandle_t myTaskHandler;   //声明一个任务句柄void myTask( void * arg)     //创建一个任务函数
{while(1)             //任务函数就是一个死循环{GPIO_ResetBits(GPIOC, GPIO_Pin_13);   //GPIO13口置0vTaskDelay(500);                      //延时500GPIO_SetBits(GPIOC, GPIO_Pin_13);     //GPIO13口置1vTaskDelay(500);                      //延时500}
}int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStruct);GPIO_ResetBits(GPIOC, GPIO_Pin_13);/*创建一个任务(第一个参数是任务函数名称,第二个参数是一个字符串,随便写第三个参数是任务堆栈大小,我定的是512第四个参数是任务传递参数,这里暂时不用写NULL第五个参数是任务优先级,可以随意设置,我设置的是2第六个参数是任务句柄)*/xTaskCreate(myTask, "myTask", 512, NULL, 2, &myTaskHandler); vTaskStartScheduler();   //开启调度器while(1){}
}

还需要在FreeRTOSConfig.h中添加几行宏定义:

#define xPortPendSVHandler                PendSV_Handler
#define vPortSVCHandler                   SVC_Handler
#define xPortSysTickHandler               SysTick_Handler

还要在stm32f10x_it.c文件中把刚刚宏定义的三个函数注释掉:107行    126行     135行

至此编译主函数下载到单片机中就能看到PC13的小灯在闪烁了。其他的地方我也不懂呢?今天第一天开始学习。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring Web MVC之过滤器Filter和拦截器HandlerInterceptor的区别和用法
  • Python第二语言(十、Python面向对象(上))
  • Java 类加载器与加载机制
  • 详解 Flink Table API 和 Flink SQL 之函数
  • 计算机网络(3) 字节顺序:网络字节序与IPv4
  • Stack详解(含动画演示)
  • Hutool有哪些常用方法
  • 服务架构的设计原则
  • DS1338/PT7C4338串行实时时钟-国产兼容RS4C1338
  • 如何免费用 Qwen2 辅助你翻译与数据分析?
  • Excel根据身份证号提取信息
  • C语言详解(预编译)
  • App推广效果分析,Xinstall助力精准优化
  • 【wiki知识库】06.文档管理页面的添加--前端Vue部分
  • 记录pytest中场景执行的token异常处理问题
  • php的引用
  • @angular/forms 源码解析之双向绑定
  • 【译】理解JavaScript:new 关键字
  • CSS 三角实现
  • Django 博客开发教程 8 - 博客文章详情页
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ECS应用管理最佳实践
  • IDEA 插件开发入门教程
  • Java读取Properties文件的六种方法
  • Mithril.js 入门介绍
  • mongo索引构建
  • MySQL-事务管理(基础)
  • Object.assign方法不能实现深复制
  • PermissionScope Swift4 兼容问题
  • spring cloud gateway 源码解析(4)跨域问题处理
  • ubuntu 下nginx安装 并支持https协议
  • yii2权限控制rbac之rule详细讲解
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 收藏好这篇,别再只说“数据劫持”了
  • 移动端解决方案学习记录
  • 责任链模式的两种实现
  • FaaS 的简单实践
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • MPAndroidChart 教程:Y轴 YAxis
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​什么是bug?bug的源头在哪里?
  • # 透过事物看本质的能力怎么培养?
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $$$$GB2312-80区位编码表$$$$
  • $(function(){})与(function($){....})(jQuery)的区别
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Qt) 默认QtWidget应用包含什么?
  • (二)Eureka服务搭建,服务注册,服务发现
  • (简单) HDU 2612 Find a way,BFS。