当前位置: 首页 > news >正文

STM32F407ZGT6移植freeRTOS

平台:VScode

RTOS版本:freertos-code-r2837-tags-V10.4.1

 硬件:STM32F407ZGT6

这是在原有文件上移植 创建一个目录用来放rtos

复制一下内容

进入portable文件 这里我只保留了这两个因为是在vscode 上移植所以不需要keil那个文件 保留以下即可 看个人需求 和环境

因为用的是f407的芯片所以我把其他的都删了 只保留4F

GCC也是相同的

保留这两个即可  看个人 理论只保留ARM_CM4F 即可 我没试过就多留了一个

然后进入人家Demo工程里 找到相关芯片的Demo例程

这个文件最主要的是这个FreeRTOSConfig.h main文件可以完全用自己的

把这个文件移到创建的freertos目录中去即可

还有一个文件在 freertos-code-r2837-tags-V10.4.1\freertos-code-r2837-tags-V10.4.1\FreeRTOS\Source\portable目录下的MemMang里面 看个人需求 我这里用

heap_4.c也是最常用的内存管理方式

也是复制到创建的freertos目录中去即可

自此完成一半了

然后在vscode 创建文件夹添加文件即可 这里创建了两个文件夹 方便添加一下文件 方便管理

.h文件路径

../../freertos

../../freertos/include

../../freertos/portable/RVDS/ARM_CM4F

修改FreeRTOSConfig.h中的内容 主要修改后面有注释的 

把原来在这个地方的替换成下面这个

#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
// #ifdef __ICCARM__
	#include <stdint.h>
	extern uint32_t SystemCoreClock;
#endif

然后在 stm32f4xx_it.c里面把这几个注释了 不然会和rtos冲突

// void SysTick_Handler(void)

// {

// }

/ void SVC_Handler(void)

// {

// }

// void PendSV_Handler(void)

// {

// }

// void SysTick_Handler(void)

// {

// }

 

  1.  system_stm32f4xx.c 文件,将 371 行的 25 改为 8,这是PLL倍频系数。PLL倍频计算公式:PLL_VCO = HSE_VALUE * PLL_N / PLL_M / PLL_P = 8000000 * 336 * 8 / 2 = 168MHz。

stm32f4xx.h

system_stm32f4xx.c

在自己的main.c文件中条件 头文件和相关即可测试

#include "drv_led.h"
#include "drv_systick.h"
#include "drv_usart.h"
#include "drv_beep.h"
#include "drv_rcc.h"
#include "stdio.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
#include "timers.h"

void vTask1(void *pvParameters) {
    while (1) {
		// 任务1的行为
		GPIO_ResetBits(GPIOF, GPIO_Pin_10);

		SYSTICKs_DelayNms(550);
		GPIO_SetBits(GPIOF, GPIO_Pin_10);
		SYSTICKs_DelayNms(50);
    }
}

void vTask2(void *pvParameters) {
    while (1) {
		// 任务2的行为
		GPIO_ResetBits(GPIOF, GPIO_Pin_9);
		SYSTICKs_DelayNms(1000);
		GPIO_SetBits(GPIOF, GPIO_Pin_9);
		SYSTICKs_DelayNms(500);
    }
}
int main(void)
{
	RCC_DeInit();
	RCC_config();
	SYSTICKs_Config(168);
	USART1_Config();
	LED_Config();
// 创建任务1
xTaskCreate(vTask1, "Task1", 120, NULL, 1, NULL);
// 创建任务2
xTaskCreate(vTask2, "Task2", 120, NULL, 1, NULL);
// 启动调度器
vTaskStartScheduler();

 
	while(1)
	{	
	
		

}
}

相关的根据自己的文件自己测试能不能就行

如果port.c报错的话选一下支持浮点运算即可 如果芯片本身就不支持的话 把port 文件换成M版本的

相关文章:

  • java异步编程接口简介
  • WPF学习之Prism(二)
  • 【HarmonyOS Next】 鸿蒙应用useNormalizedOHMUrl详解
  • Day29 第八章 贪心算法 part02
  • 分布式主键生成服务
  • 医院HIS接入大模型:算力基础设施与训练能力的深度剖析与测算
  • 树莓集团:数字影像领航,开启未来影像变革
  • 【STL学习】(5)list
  • Android内存优化指南:从数据结构到5R法则的全面策略
  • 浅显易懂HashMap的数据结构
  • 玩转 Netty : 如何设计高性能RPC通信组件
  • 【计算机网络协议01】应用层协议HTTP
  • PS渐变工具
  • 【项目实施阶段一】【软件部署与环境搭建】
  • MySQL DBA技能指南
  • 表单input 通过点击按钮新增input框(Vue3)
  • 锂电池保护板测试仪:电池安全的守护者与创新驱动力
  • 使用pinia存储登录用户的全部个人信息
  • React面试(一)
  • 数据库并发问题有那些以及解决办法
  • 上海科创再出发:“造星”的城和“摘星”的人
  • 解密62个“千亿县”:强者恒强,新兴产业助新晋县崛起
  • 外交部官方公众号发布视频:不跪!
  • 杨国荣︱学术上的立此存照——《故旧往事,欲说还休》读后
  • 第二艘国产大型邮轮实现坞内起浮,重点强化邮轮供应链本土化建设
  • 玉渊谭天丨中方减少美国农产品进口后,舟山港陆续出现巴西大豆船