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

Posted CHENxiaomingming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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口速度为50MHz
    GPIO_Init(GPIOA, &GPIO_InitStructure);					 //根据设定参数初始化GPIOA.8
      while (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口速度为50MHz
  GPIO_Init(GPIOA, &GPIO_InitStructure);					 //根据设定参数初始化GPIOA.8
	a--;
	
	GPIO_SetBits(GPIOA,GPIO_Pin_8);						 //PA.8 输出高;	
	

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

更换成C6以上

完美解决 

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

以上是关于STM32F103x/Free RTOS系统学习笔记之环境搭建-CXM的主要内容,如果未能解决你的问题,请参考以下文章

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

STM32F103x/Free RTOS系统学习笔记之SR04超声波测距串口输出-CXM

STM32F103x/Free RTOS系统学习笔记之SR04超声波测距串口输出-CXM

STM32F103x/Free RTOS系统学习笔记之SR04超声波测距串口输出-CXM

RTX移植STM32F103,超详细~

RTX移植STM32F103,超详细~