STM32F103x/Free RTOS系统学习笔记之环境搭建-CXM

2023-11-21 17:20

本文主要是介绍STM32F103x/Free RTOS系统学习笔记之环境搭建-CXM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

越学到后面越感觉会的越少,为什么要引入嵌入式操作系统呢,因为现在一直局限于while大循环里,能做的功能十分有限,至于为什么要选择Free RTOS 系统是因为这个系统目前比较成熟且使用的人很多,资源也比较多

这一篇主要会记录我是如何搭建环境

Free RTOS系统是嵌入式的操作系统,它的特点在于它的实时性,其任务调度的机制十分完善。

开发环境是keil 5

使用芯片STM32F103x,


目录

前言

STM32F103C6官方库搭建

1.新建文件夹

2.下载拷贝官方库

3.往项目里面移植官方库

4.主函数尝试调用官方函数库

5.编译

 Free RTOS 系统添加

1.移植文件

​        .portable

         .RVDS

         .转移文件到项目里

 2.将系统文件添加到工程中

 3.编译测试


STM32F103C6官方库搭建

stm32存在于两种方式一种是直接操作寄存器,一种就是使用他的官方库。

1.新建文件夹

2.下载拷贝官方库

ST官网https://www.stmicroelectronics.com.cn/content/st_com/zh.html

 

 

 然后下载完成之后 解压 Libraries 就是我们需要的文件库

 然后添加进我们的工程文件夹里开始创建我们的项目

3.往项目里面移植官方库

 这里要注意的是在Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm目录里面需要添加startup_stm32f10x_hd.s 否则无法正常运行

 记得在C/C++里面头文件目录添加上

4.主函数尝试调用官方函数库

随便写一段

int main(void)
{GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 //LED0-->PA.8 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					 //根据设定参数初始化GPIOA.8while (1){GPIO_SetBits(GPIOA,GPIO_Pin_8);						 //PA.8 输出高;	}
}

5.编译

完成架构后开始编译 发现居多的警告和报错这个原因是因为库是3.0需要在C/C++,Define写上USE_STDPERIPH_DRIVER,

 然后在进行编译,成功无报错

 Free RTOS 系统添加

官网下载地址https://www.freertos.org/a00104.html

1.移植文件

        .portable

在Source下portable中只保留这三个文件其余删掉

         .RVDS

保留和外卖芯片对应的CM3就行

         .转移文件到项目里

 2.将系统文件添加到工程中

将源码添加到工程文件夹中

 

 这个heap是五种内存管理的方法

 头文件添加

 到这里还缺一个FreeRTOSConfig.h 配置文件

这个文件在官方案例中可以找到 我们直接在相同芯片版本的案例中复制一个

 放进外部库里就可以

 3.编译测试

有一个错误  查了一下只需要 吧值从0改成1就行

但是我查看了他的案例并没有改成1此处

通过keil查询

和这个调用有关 如果改为0则报错  

#ifndef INCLUDE_xTaskGetCurrentTaskHandle#define INCLUDE_xTaskGetCurrentTaskHandle    0
#endif

 修改完成后成功编译

 开始使用一下任务调度

#include "stm32f10x.h"
#include "FreeRTOS.h"
#include "task.h"void led_end(void);
TaskHandle_t StartTask_Handler;
int main(void)
{xTaskCreate((TaskFunction_t )led_end,            //任务函数(const char*    )"led_end",          //任务名称(uint16_t       )120,        //任务堆栈大小(void*          )NULL,                  //传递给任务函数的参数(UBaseType_t    )1,       //任务优先级(TaskHandle_t*  )&StartTask_Handler);   //任务句柄              vTaskStartScheduler();          //开启任务调度
}void led_end(void)
{int8_t a=1;if(a==1){GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 //LED0-->PA.8 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					 //根据设定参数初始化GPIOA.8a--;}GPIO_SetBits(GPIOA,GPIO_Pin_8);						 //PA.8 输出高;	}

最尴尬的事情 C6 内存不够溢出了

更换成C6以上

完美解决 

学习的正点原子哥的Free RTOS移植手册PDF 写的非常好

这篇关于STM32F103x/Free RTOS系统学习笔记之环境搭建-CXM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/403846

相关文章

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬