STM32F103x/Free RTOS系统学习笔记之环境搭建-CXM
Posted CHENxiaomingming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F103x/Free RTOS系统学习笔记之环境搭建-CXM相关的知识,希望对你有一定的参考价值。
前言
越学到后面越感觉会的越少,为什么要引入嵌入式操作系统呢,因为现在一直局限于while大循环里,能做的功能十分有限,至于为什么要选择Free RTOS 系统是因为这个系统目前比较成熟且使用的人很多,资源也比较多
这一篇主要会记录我是如何搭建环境
Free RTOS系统是嵌入式的操作系统,它的特点在于它的实时性,其任务调度的机制十分完善。
开发环境是keil 5
使用芯片STM32F103x,
目录
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