FreeRTOS移植到STM32F103C8T6无法点灯解决方法

作者在学习FreeRTOS系统时遇到STM32F103C8T6 FLASH容量不足的问题,通过调整FreeRTOSConfig.h中的堆大小解决了点灯代码无法响应的难题,并计划后续学习STM32CubeIDE与HAL库的使用。

最近开始学习FreeRTOS系统,没想到刚开始就碰到了硬茬。按照正点原子的教学视频来一步一步做,然后编译没有问题,但是点灯代码烧录进去一直没反应,刚开始还以为是移植哪里出现了问题,我又重新移植了一遍发现还是老问题,查了挺久的资料后发现是STM32F103C8T6的FLASH太小了,所以需要修改一下移植后的系统堆大小。

在FreeRTOSConfig.h头文件里

这里原本是20*1024,把它修改成10*1024或者17 *1024即可。

最近也有在研究STM32CubeIDE这个官方软件,能自动生成代码十分方便,但生成的代码是给予Hal库的不是标准库函数,有点难受,所以接下来的打算是学习完FreeRTOS后开始接触Hal库的使用方法。毕竟能自动生成每一块芯片的FreeRTOS源码,这样以后换芯片就不需要移植了。

### 将FreeRTOS移植STM32F103C8T6 #### 准备工作 为了成功将FreeRTOS移植STM32F103C8T6,需要准备如下材料: - STM32系列开发板(本指南使用的是STM32F103C8T6) - 已经搭建好的标准工程环境 - Keil MDK集成开发环境用于编译和调试程序[^3] #### 获取并解压FreeRTOS源码包 下载最新的FreeRTOS版本,并将其解压缩至本地磁盘。确保获取的版本兼容目标硬件平台。 #### 配置FreeRTOSConfig.h文件 编辑`FreeRTOSConfig.h`以适应特定的应用需求。对于STM32F103C8T6而言,特别需要注意调整以下几个参数设置: - `configTOTAL_HEAP_SIZE`: 定义系统的总堆大小;考虑到该型号MCU资源有限,建议初始设定较小值如\(8 * 1024\)字节。 - 启用动态内存分配功能:通过将`configSUPPORT_DYNAMIC_ALLOCATION`设为1来允许运行时创建任务和其他对象[^5]. ```c #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 8 * 1024 ) ) #define configSUPPORT_STATIC_ALLOCATION 0 #define configSUPPORT_DYNAMIC_ALLOCATION 1 ``` #### 修改中断处理函数 根据具体应用情况更新`stm32f10x_it.c`内的相关中断服务例程(ISRs),使其能够正确响应来自内核的任务调度请求。这一步骤通常涉及对SysTick定时器ISR进行适当修改以便于实现上下文切换机制[^1]。 #### 创建简单的测试应用程序 编写一段基础代码用来验证移植是否成功完成。最简单的方式就是让LED按照一定周期闪烁,以此证明多线程环境下基本I/O操作可以正常运作。 ```c #include "FreeRTOS.h" #include "task.h" void vTaskBlink(void *pvParameters){ while(1){ GPIO_SetBits(GPIOA,GPIO_Pin_1); // Turn on LED connected to PA1 pin. vTaskDelay(pdMS_TO_TICKS(500)); // Delay for half a second. GPIO_ResetBits(GPIOA,GPIO_Pin_1);// Turn off the same LED again after delay period ends. vTaskDelay(pdMS_TO_TICKS(500)); } } int main(){ /* Initialization code here */ xTaskCreate(vTaskBlink,"BLINK",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&handle); vTaskStartScheduler(); for (;;); } ``` 上述例子展示了如何在一个新创建的任务中控制外部设备的状态变化,从而直观地展示出实时操作系统的核心特性——并发执行多个独立进程的能力[^2]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值