单片机
返回首页

STM32学习笔记(1)如何移植FreeRTOS

2019-07-25 来源:eefocus

STM32固体库创建demo

下载相关文件

keil5下载地址:keil5


下载相关的pack包:Keil.STM32F1xx_DFP.2.1.0.pack


移植所需的freertos源码:FreeRTOSv9.0.0.exe


移植所需的STM32固件库:STM32F10x_StdPeriph_Lib_V3.5.0.rar


建立固体库项目

建立如下图所示的项目组:



BSP目录放相关的driver.


FreeRTOS目录将放置我们所需移植的东西


Libraries目录将防止我们固体库所需的代码如下:


USER放置main函数,并放置一些用户自己定制的一些文件

如何真的进行相关的操作可以参考STM32F1开发指南-库函数版本_V3.1 .pdf的第三章


差不多准备工作完成了,下面重点就是如何移植FreeRTOSv9.0.0


移植FreeRTOSv9.0.0到STM32F103中

1.1打开解压后点源码


1.2双击打开“FreeRTOS”文件夹,看到如下文件


图中圈圈的就是源码了,整个文件夹拷贝到新建工程的“FreeRTOS”文件夹中


1.3在源码文件夹中**FreeRTOSDemoCORTEX_STM32F103_Keil这个路径下,找到文件FreeRTOSConfig.h**,拷贝到工程文件夹FreeRTOS中


1.4打开keil,添加文件


添加文件如上如所示


“port.c”文件路径…FreeRTOSSourceportableRVDSARM_CM3


“heap_2.c”文件路径…FreeRTOSSourceportableMemMang


“list.c”、“queue.c”、“tasks.c”文件路径…FreeRTOSSource


1.5添加头文件


注意填入:STM32F10X_HD,USE_STDPERIPH_DRIVER


1.6修改main函数


#include 'FreeRTOS.h'

#include 'task.h'

#include 'queue.h'

#include 'misc.h'


#include 'led.h'



void LED0_Task(void * pvParameters);

void LED1_Task(void * pvParameters);


int main(void)

{

LED_Init();

xTaskCreate(LED0_Task, (const char *)'LED0', configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 3, NULL);

xTaskCreate(LED1_Task, (const char *)'LED1', configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 4, NULL);

vTaskStartScheduler();

}


void LED0_Task(void * pvParameters)

{

while (1)

{

LED0 = !LED0;

vTaskDelay(800 / portTICK_RATE_MS);

}

}


void LED1_Task(void * pvParameters)

{

while (1)

{

LED1 = !LED1;

vTaskDelay(500 / portTICK_RATE_MS);

}

}



1.7修改启动文件


遇到问题

在移植过程中难免有错误。需要我们去解决


问题一 编译

…OBJFreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationTickHook (referred from tasks.o).


可以选择在BSP目录下添加相关的程序代码。


void vApplicationTickHook(void)

{

  

}


关于项目

本项目在github上已经有了,可以从我的github上进行下载。



进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章