STM32F103移植FREERTOS
STM32F103移植FREERTOS
在STM32F103(Cortex-M3内核)上移植FreeRTOS的步骤如下:
1. 准备FreeRTOS源码
- 下载源码:从FreeRTOS官网或GitHub获取源码,需包含以下关键文件:
FreeRTOS/Source目录(核心源码)FreeRTOS/Source/portable/[编译器]/ARM_CM3(Cortex-M3端口文件,例如RVDS或GCC)FreeRTOS/Source/include(头文件)
2. 配置工程
- 添加文件到工程:
- 将
FreeRTOS/Source下的tasks.c、queue.c、list.c、timers.c等核心文件添加到工程。 - 将
ARM_CM3端口文件(如port.c)和内存管理文件(如heap_4.c)添加到工程。
- 将
- 包含头文件路径:
- 在IDE中设置头文件路径,确保包含
FreeRTOS/Source/include和ARM_CM3端口文件夹。
- 在IDE中设置头文件路径,确保包含
3. 修改系统时钟
- 配置SysTick定时器:
FreeRTOS依赖SysTick作为系统节拍(Tick)中断源。在
FreeRTOSConfig.h中设置:#define configCPU_CLOCK_HZ (SystemCoreClock) // 例如72MHz #define configTICK_RATE_HZ (1000) // 1ms节拍- 检查STM32的SysTick初始化代码,确保与FreeRTOS兼容。
4. 配置中断优先级
- 设置中断优先级:
Cortex-M3中,SysTick和PendSV的中断优先级需设为最低优先级,SVC中断优先级设为最高:
// 在FreeRTOSConfig.h中定义 #define configKERNEL_INTERRUPT_PRIORITY 0xF0 // 最低优先级(仅高4位有效) #define configMAX_SYSCALL_INTERRUPT_PRIORITY 0x80 // 高于此优先级的中断不可调用FreeRTOS API
5. 编写FreeRTOS配置文件
- 创建
FreeRTOSConfig.h: 在工程中新建此文件,配置基本参数:#define configUSE_PREEMPTION 1 // 启用抢占式调度 #define configUSE_IDLE_HOOK 0 // 是否使用空闲任务钩子 #define configUSE_TICK_HOOK 0 // 是否使用Tick钩子 #define configCPU_CLOCK_HZ (SystemCoreClock) #define configTICK_RATE_HZ (1000) #define configMAX_PRIORITIES (5) // 任务优先级数量 #define configMINIMAL_STACK_SIZE (128) // 空闲任务栈大小 #define configTOTAL_HEAP_SIZE (1024*10) // 堆大小(根据任务数量调整)
6. 修改启动文件
- 调整中断向量表:
在STM32启动文件(如
startup_stm32f10x_hd.s)中,确保以下中断服务函数指向FreeRTOS接口:SysTick_Handler→xPortSysTickHandlerPendSV_Handler→xPortPendSVHandlerSVC_Handler→vPortSVCHandler
7. 编写任务示例
-
创建任务并启动调度器:
#include "FreeRTOS.h" #include "task.h" void vTask1(void *pvParameters) { while(1) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); // 闪烁LED vTaskDelay(500 / portTICK_PERIOD_MS); // 延时500ms } } int main(void) { HAL_Init(); SystemClock_Config(); xTaskCreate(vTask1, "Task1", 128, NULL, 2, NULL); vTaskStartScheduler(); // 启动调度器 while(1); }
8. 解决常见问题
- 堆内存不足:增大
configTOTAL_HEAP_SIZE(默认值可能太小)。 - 中断冲突:确保所有FreeRTOS API调用被包裹在
taskENTER_CRITICAL()和taskEXIT_CRITICAL()中。 - HardFault:检查任务栈溢出(可通过
uxTaskGetStackHighWaterMark()调试)。
9. 编译与调试
- 编译器优化:建议使用-O1或-O0优化等级避免意外错误。
- 使用Trace工具:通过FreeRTOS的
vTaskList()或uxTaskGetStackHighWaterMark()监控任务状态。
完成以上步骤后,FreeRTOS即可在STM32F103上运行。建议使用STM32CubeMX生成基础工程,再手动集成FreeRTOS以简化配置。
基于STM32F103系统的FreeRTOS程序移植
在程序中,移植了正点原子的基于STM32的FreeRTOS程序,编写了自己的内存管理程序malloc.c,程序主要结构如下
2023-11-10 11:03:11
FreeRTOS移植到STM32F103步骤与注意事项
的FreeRTOS为例一步一步移植到STM32F103 上,并提醒大家某些需要注意的事项。本文档为非正式技术文档,故排版会有些凌乱,希望大家能提
FreeRTOS移植到STM32F103步骤与注意事项
对FreeRTOS的研究并在公司产品中应用,多少有些心得,接下来就由小灯以最新版的FreeRTOS为例一步一步移植到
资料下载
hxjq
2021-12-27 18:39:42
TencentOS tiny 移植到STM32F103全教程(基于标准库)
TencentOS tiny 移植到STM32F103全教程(基于标准库)
资料下载
申根换
2021-11-23 18:06:57
如何将FreeRTOS移植到STM32F103上详细步骤和注意事项详细说明
一步移植到STM32F103 上,并提醒大家某些需要注意的事项。本文档为非正式技术文档,故排版会有些凌乱,希望大家能提供宝贵意见以供小灯参考改进。
资料下载
佚名
2020-03-09 16:59:22
FreeRtos STM32F103移植教程
收集了一下关于FreeRtos的资料,通过教程自己在战舰上写了点例程STM32F103 FreeRtos 2015-01-26 16:45.zi
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览