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

发布者:WanderlustGaze最新更新时间:2019-07-25 来源: eefocus关键字:STM32  移植  FreeRTOS 手机看文章 扫描二维码
随时随地手机看文章

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上进行下载。



关键字:STM32  移植  FreeRTOS 引用地址:STM32学习笔记(1)如何移植FreeRTOS

上一篇:FreeRTOS移植,基于STM32 HAL库
下一篇:用STM32Cube+FreeRTOS+Keil5对STM32F0编程之通过USART发送数据

推荐阅读最新更新时间:2024-11-09 23:25

S3C2440 U-Boot移植--Norflash驱动支持- S29AL016
U-Boot版本:2008.10 开发板:Mini2440 之前根据国嵌的实验手册移植了很久都没有成功,关键是国嵌手册上的Norflash型号是SST1601,而我的Mini2440开发板上配置的是Spansion公司的S29AL016J芯片,两者型号不同,修改的地方差异很大。后来通过在网上查资料发现S29AL016J芯片与smdk2410默认使用的芯片(AMD的AM29LV400)除了大小不一样外,其他如命令序列,操作方式都是一样的(也难怪在做完国嵌实验手册的2.4以后就可以进行环境变量的保存)。所以根据AM29LV400来移植的话所做的修改不多。 查询datasheet后,得到如下信息; 该Norflash芯
[单片机]
第六节:STM32基于HAL库的IIC通信
前言: IIC协议简介 维基百科的解释如下: I2C(Inter-Integrated Circuit)字面上的意思是积体电路之间,它其实是I2C Bus简称,所以中文应该叫集成电路总线,它是一种串行通讯汇流排,使用多主从架构,由飞利浦公司在1980年代为了让主机板、嵌入式系统或手机用以连接低速周边装置而发展。I2C的正确读法为“I平方C”( I-squared-C ),而“I二C”( I-two-C )则是另一种错误但被广泛使用的读法。自2006年10月1日起,使用I2C协定已经不需要支付专利费,但制造商仍然需要付费以取得I2C从属装置位址。 我们需要了解的是 : I2C通信只需要两根线即可进行数据传输; 即串行数据线(SD
[单片机]
第六节:<font color='red'>STM32</font>基于HAL库的IIC通信
STM32 103 USART
打开对应GPIO时钟 复用时钟 USART时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE ); USART2 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE ); USART3 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE ); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE ); GP
[单片机]
stm32 Ctext-M3内核最简单的多任务RTOS
RTOS 实时操作系统,我做的是一个多任务的操作系统,可以同时运行多个任务,我这里设置的最大任务数是32个, 估计跑30多个任务的嵌入式设备很少吧,32个任务够用了。 OS我把它叫做HesOS,主要功能如下,比较简单。 1--实现多任务调度 2--实现任务调度锁 3--实现临界区保护 4--实现读取cpu使用率(这个功能比较重要的) 5--实现us延时(用于模拟如IIC总线模拟) 对于一般的嵌入式应用有这些功能,差不多够用了。 移植HesOS也非常简单,不会像其它的OS一样比较庞大,修改的地方也比较多,使用起来也复杂。 HesOS不管是移植和使用都是非常简单的,类似于PC的线程使用。 主
[单片机]
<font color='red'>stm32</font> Ctext-M3内核最简单的多任务RTOS
stm32外部中断进入不了的原因分析
最近几天折腾stm32,遇见了很郁闷的问题,外部中断进入不了,最后找到解决方法的时候觉得 唉,下面总结几条原因以便于大家少走弯路。 1.切记打开复用时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 2.最好加上一个EXTI_GenerateSWInterrupt(EXTI_LineX);产生软件中断便于判断是不是本来就配置错误; 3.开启硬件仿真: 4.正确设置中断向量地址: #if defined (VECT_TAB_RAM) /* Set the Vector Table base location at 0x20000000 */ NVIC_Se
[单片机]
<font color='red'>stm32</font>外部中断进入不了的原因分析
基于STM32和AD5791实现单路超高精度可调电压电路的设计
引言 现在很多智能测量仪表要求具有超高精度的电压信号,同时要求高稳定性、高线形度和低噪声、低温度漂移。这样的模拟系统设计面临复杂的工程技术挑战,常规的方法是采用多个较低分辨率的DAC和大量分立元件与支持IC整合在一起,同时伴随着相当大的开发风险和高代价的修改时间,才能优化电路参数、减小误差和设计出复杂的自动校准电路,这样不仅增加了硬件设计的复杂性,通常达到的精度也不是很高。本系统设计的基于STM32微处理器和AD5791的20位超高精度测量系统中,实现了单路超高精度可调电压信号的输出,输出电压信号的幅值可以通过软件来设置。该系统可靠性高,不需要校准电路。 AD5791是美国ADI公司推出的一款高性能的单路20位电压输出数模转换
[单片机]
基于<font color='red'>STM32</font>和AD5791实现单路超高精度可调电压电路的设计
使用MCU GD32替代STM32的体会
GD32作为国产MCU里的佼佼者,产品线也比较丰富,是替代STM32的一个很好的选择。前段时间有个项目用到GD32的单片机,今天来说说使用的一些体会。 1.硬件我用的单片机型号为GD32F405RGT6,对应STM32F405RGT6。首先,硬件上基本兼容,有一点不同的是GD32的31和47脚为NC,STM32的为VCAP。STM32这两个引脚需要分别连接一个电容到GND,而GD32则不需要。当然,有这两个电容也无所谓,所以,硬件上GD32可以直接替换STM32。 仿真器可以使用Jlink,也可以使用STLink,但是下载程序时会弹框提示,非ST芯片。 2.软件软件上,前期
[单片机]
使用MCU GD32替代<font color='red'>STM32</font>的体会
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved