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

相关文章

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断