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

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详