FreeRTOS移植STM32F103:保姆级教程

0. 前言

硬件平台:

  • STM32F103ZET6

移植流程:

  1. 构建STM32运行环境
  2. 下载FreeRTOS源码
  3. 根据芯片型号选择对应的内核文件
  4. Keil配置项目
  5. 创建任务
  6. 运行

1. 构建STM32运行环境

搭建运行环境基本流程:

  1. 创建Keil项目
  2. 创建对应目录
  3. 复制stm32f103启动文件
  4. 创建main.c文件
  5. 创建串口驱动文件
  6. Keil配置项目结构
  7. 编写main.c与驱动代码

1.1 使用Keil创建项目

1.1.1 打开Keil创建新项目

创建一个项目文件夹用于存放项目(base_project):最上方Project->New … Project -> 输入项目名 -> 保存项目 -> 选择芯片 -> 保存

创建项目:
在这里插入图片描述

选择芯片:
![[Pasted image 20250101103319.png]]

1.2 创建目录

使用Keil创建好项目文件后,在目录中创建start、user、driver、freertos文件夹

  • start:用于存放stm32的启动文件
  • user:存放用户代码
  • driver:存放驱动文件
  • freertos:存放FreeRTOS的移植文件

![[Pasted image 20250101103359.png]]

1.3 复制stm32f103启动文件到start中

通过ST官网下载stm32f103的标准库文件,将以下6个文件拷贝到start文件夹中,这里主要讲FreeRTOS移植,就不一一讲解,可以私信作者获取项目结构源码。

![[Pasted image 20250101103418.png]]

1.4 创建main.c文件

在user文件夹中创建main.c文件,作为程序入口文件。

![[Pasted image 20250101103431.png]]

1.5 创建串口的驱动文件Driver_Usart

在driver文件夹中创建usart文件夹,在usart文件夹中创建Driver_Usart.c与Driver_Usart.h文件。用于调试代码时串口的输出打印。

![[Pasted image 20250101103451.png]]

1.6 打开Keil配置文件

流程步骤:

  1. 选择配置项目目录
  2. 添加文件夹
  3. 对应文件夹添加文件
  4. 配置头文件路径

1.6.1 选择配置项目目录

![[Pasted image 20250101103521.png]]

1.6.2 创建对应文件

![[Pasted image 20250101103654.png]]

![[Pasted image 20250101103730.png]]

1.6.3 添加对应文件

将对应的文件添加进对应的文件夹。
![[Pasted image 20250101103805.png]]

这里以usart的驱动文件为例,将Driver_Usart.c文件添加到对应的Driver/Usart中即可。
![[Pasted image 20250101103837.png]]

对应的main.c添加进文件夹。
![[Pasted image 20250101103934.png]]

添加启动文件,将所有的启动文件添加到Start文件夹中:
![[Pasted image 20250101104023.png]]

![[Pasted image 20250101104041.png]]

配置目录效果:
![[Pasted image 20250101104104.png]]

1.6.4 配置头文件路径

![[Pasted image 20250101104639.png]]

![[Pasted image 20250101104705.png]]

选择对应的头文件路径:
![[Pasted image 20250101104801.png]]

保存路径:
![[Pasted image 20250101104826.png]]

选择调试工具:
![[Pasted image 20250101104914.png]]

![[Pasted image 20250101104947.png]]

1.7 编写main.c与驱动代码

使用VSCode打开base_project文件夹,进行代码编写。

现在VSCode进行插件安装:

  • C/C++
  • Keil Assistant

![[Pasted image 20250101105151.png]]

![[Pasted image 20250101105207.png]]

main.c

#include "Driver_Usart.h"

int main()
{
   
	/* 初始化窗口 */
	USART_Init();


	printf("Hello World!\n");

	while (1)
	{
   
		
	}
	

	return 0;
}

Driver_Usart.h

#ifndef __DRIVER_USART_H
#define __DRIVER_USART_H

#include "stm32f10x.h"
#include "stdio.h"

// 初始化
void USART_Init(void);

#endif

Driver_Usart.c

#include "Driver_Usart.h"

void USART_Init(void)
{
   
    // 1. 配置时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
    RCC->APB2ENR |= RCC_APB2ENR_USART1EN;

    // 2. GPIO引脚配置
    // 2.1 PA9 设为复用推挽输出 MODE: 11, CNF: 10
    GPIOA->CRH |= GPI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值