STM32F4移植FreeRTOS

在之前的文章:FreeRTOS全解析-2.源码结构与移植 中我们已经讲解过FreeRTOS移植的方法,并且给出了一个在ARM9上移植的例子,今天再来看一个例子:板子的芯片为STM32F407,架构为ARM_CM4F,IDE为keil。

1.随便找一个STM32F4例程

拿了正点原子LCD实验例程,先编译下载程序看看能不能正常运行

非常正常。

2.将FreeRTOS相关代码放到keil工程目录

如图整个复制过去

然后删减一下,portable文件夹里只保留,MemMang和RVDS两个文件夹,其他全删了。

再删减一下RVDS中的文件,因为我们的芯片是STM32F407,架构是ARM_CM4F,所以其他全删除。

在官方demo里找一个和我们架构相似的FreeRTOSConfig.h,复制进我们keil工程的USER文件夹

3.在keil中添加FreeRTOS代码

把必要的文件添加进去

别忘了设置头文件路径。

4.编译

写两个简单的任务,任务1:led循环亮灭,任务2:屏幕循环黑白切换

#include "sys.h"#include "delay.h"#include "usart.h"#include "led.h"#include "lcd.h"#include "FreeRTOS.h"#include "task.h"void vTask1( void *pvParameters ){  for( ;; ) {        LED0=0;    delay_ms(5000);    LED0=1;    delay_ms(5000);  }}void vTask2( void *pvParameters ){  for( ;; ) {    LCD_Clear(BLACK);      delay_ms(5000);    LCD_Clear(WHITE);    delay_ms(5000);  }}
static void prvSetupHardware( void ){  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);  delay_init(168);       uart_init(115200);      LED_Init();   LCD_Init();   }
int main(void)  prvSetupHardware();    xTaskCreate(vTask1, "Task 1", 1000, NULL, 1, NULL);  xTaskCreate(vTask2, "Task 2", 1000, NULL, 1, NULL);    vTaskStartScheduler();}

然后编译,有一个未定义错误。

将FreeRTOSConfig.h中的条件编译

#ifdef __ICCARM__

修改为

#if defined(__ICCARM__)||defined(__CC_ARM)||defined(__GNU__)

再编译

又提示port.o与stm32f4xx_it.o有重复定义

注释掉stm32f4xx_it.c中的SVC_Handler()、PendSV_Handler() SysTick_Handler()

再编译,又提示几个函数未定义,这是因为FreeRTOSConfig.h中配置了相关的功能,我们把相关配置关掉,就是置0。

#define configUSE_IDLE_HOOK        0#define configUSE_TICK_HOOK        0#define configCHECK_FOR_STACK_OVERFLOW  0#define configUSE_MALLOC_FAILED_HOOK  0

编译成功,效果:

两个任务都在运行,说明我们的移植已经成功了。

参考文章:

STM32F4移植FreeRTOS

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
FreeRTOS是一个实时操作系统,可以在嵌入式系统中使用。在STM32F4芯片上使用FreeRTOS可以提供多任务并发执行的能力。要在STM32F4上使用FreeRTOS,需要进行移植和配置。 移植FreeRTOSSTM32F4的具体步骤如下: 1. 配置开发环境:使用Keil等IDE进行开发,确保已经安装好相应的开发工具和驱动。 2. 下载FreeRTOS源码:从官方网站下载最新版本的FreeRTOS源码。 3. 创建工程:在IDE中创建一个新的工程,并将FreeRTOS源码添加到工程中。 4. 配置FreeRTOS:根据需要,通过修改FreeRTOSConfig.h文件中的宏定义来配置FreeRTOS功能,例如关闭空闲钩子函数、关闭堆栈溢出检测等。中给出的例子中,vTask1和vTask2分别是两个简单的任务,LED0和LCD_Clear函数分别控制LED和LCD的操作。 6. 初始化硬件:在main函数中,使用prvSetupHardware函数对硬件进行初始化,例如配置NVIC中断优先级、初始化延时函数、串口初始化、LED初始化和LCD初始化等。 7. 创建任务:使用xTaskCreate函数创建任务,指定任务函数、任务名称、任务堆栈大小等参数。 8. 启动调度器:使用vTaskStartScheduler函数启动任务调度器,开始多任务并发执行。 以上是在STM32F4上使用FreeRTOS的基本步骤。通过移植和配置FreeRTOS,可以实现多任务并发执行,提高系统的实时性和响应能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STM32F4移植FreeRTOS](https://blog.csdn.net/freestep96/article/details/129844798)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪耀大叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值