1,华为 LiteOS-m移植STM32F103C8T6(固件库类型)

目录

前言:

之前就了解到Liteos,想要移植到STM32,奈何资料太少(反正楼主很难找到),最近有了点时间,又搜了一下,勉强能移植一下。

1,LiteOS-m移植STM32F103C8T6

2,新建固件库工程

3,接下来我们移植LiteOS(为了不打击初学者对华为LiteOS的热情,博主把移植过程简化)争取大家一次成功

4,修改移植问题

5,LiteOS任务管理点亮LED灯

6.下载程序

7,文件下载


前言:

之前就了解到Liteos,想要移植到STM32,奈何资料太少(反正楼主很难找到),最近有了点时间,又搜了一下,勉强能移植一下。

1,LiteOS-m移植STM32F103C8T6

  需要移植的资料我会放在文末,接下来我们开始移植;

2,新建固件库工程

我们首先在Keil 5新建工程(为了傻瓜式移植所以把移植步骤完全操作一遍)

1,在桌面新建一个文件夹(名字要是英文)在该文件夹里新建Library  Start    User  这三个文件夹。

2,然后我们就从固件库里添加一些需要的文件在我们建好的文件夹里,固件库名字为STM32F10x_StdPeriph_Lib_V3.5.0(我会把这些文件都在文末分享出来)

首先,我们在Library中添加的文件有

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc下的所有文件

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src下的所有文件

其次,我们在Start中添加的文件有

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的所有文件

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下的所有文件

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下的所有.c,和.h文件

最后,我们在User中添加的文件有

STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下除了system_stm32f10x.c的所有.c,和.h文件

这样我们就把所需的固件库文件添加好了,接下来我们打开Keil5 新建工程

路径选择我们刚刚在桌面上创建的文件夹,点击打开,名字为LiteOS

点击保存,就会弹出让我们选择芯片的界面,我们选择STM32F103C8,点击OK

然后会弹出一个CMSIS界面我们点击OK,就会弹出我们新建的工程界面。

接下来,我们点击文件管理,把我们刚刚在固件库里的文件添加进去,我们先把工程里文件建好,根据下面4个操作就可以完成我们如下界面中文件的创建。

然后我们选中User点击添加文件

我们点击User,文件类型选择全部文件,全部选中,添加

然后我们选中Start点击添加文件,文件类型选择全部文件,需要添加的文件有

我们在Start中选择这些文件就好。然后点击添加

最后我们选中Library 点击添加文件

点击Library文件类型选择全部文件,全部选中,添加

这样我们就把文件都添加好了,接下来我们需要一些设置,可以让工程运行

我们点击魔术棒>Target    进行以下配置

魔术棒>Output   进行以下配置(用来生成下载到芯片的程序)

魔术棒>C/C++   进行以下配置

点击后,我们添加以下路径

最后我们点击OK

接下来我们打开main.c,把里面的代码全部删除,添加如下代码

编译后 0 error,我们的固件库工程就建好了。

#include "stm32f10x.h"                  // Device header
int main(void)
{
	while(1)
	{
		
	}


}

3,接下来我们移植LiteOS(为了不打击初学者对华为LiteOS的热情,博主把移植过程简化)争取大家一次成功

首先我们把文件HUAWEI LITEOS复制到我们在桌面是创建的文件夹中

在Keil 5点击文件管理,添加如下文件

arch\arm\arm-m\src 目录下的全部文件
    los_hw.c
    los_hw_tick.c
    los_hwi.c
arch\arm\arm-m\cortex-m3\keil目录下的全部文件

kernel\base\core 文件夹下全部.c文件
    los_priqueue.c
    los_swtmr.c
    los_sys.c
    los_task.c
    los_tick.c
    los_timeslice.c
kernel\base\ipc  文件夹下全部.c文件
    los_event.c
    los_mux.c
    los_queue.c
    los_sem.c
kernel\base\mem\bestfit_little 文件夹下全部.c文件
    los_heap.c
    los_memory.c
kernel\base\mem\common 文件夹下全部.c文件
    los_memcheck.c
    los_memstat.c
    los_slab.c
    los_slabmem.c
kernel\base\mem\membox 文件夹下全部.c文件
    los_membox.c
kernel\base\misc 文件夹下全部.c文件
    los_misc.c
kernel\base\om 文件夹下全部.c文件
    los_err.c
kernel\extended\tickless 文件夹下全部.c文件
    los_tickless.c
kernel 文件夹下的 
    los_init.c

OS_CONFIG 文件夹下全部.h文件
  target_config.h(这个文件里就是我们移植不同的板子需要更改的配置)

添加完文件后我们要添加文件路径

魔术棒>C/C++   进行以下配置


点击OK,这样我们就移植完成了

4,修改移植问题

把stm32f10x_it.c中的systick和pendsv这两个中断注释掉

由于我们的CMSIS版本已经不适合做LiteOS移植,移植后会出现兼容问题报错

    Error:     Undefined symbol_ _get_IPSR(找不到符号)

解决方式:把HUAWEI LITEOS\arch\arm\common\cmsis下的所有文件复制到我们在桌面建的文件夹中的Start文件夹中,粘贴时选择替换所有目标。

然后编译后 0 error,我们的LiteOS就移植好了。

5,LiteOS任务管理点亮LED灯

我们在main.c文件中添加如下代码

#include "stm32f10x.h"                  // Device header
#include "los_typedef.h"
#include "los_base.h"
#include "los_task.h"

static UINT32 TaskLed1_ID;
extern UINT32 TaskLed1(VOID);

#define TSK_PRIOR_Led1  4


void LED_Init(void)
{	//PA4
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET);
	//PA5
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);

}


	
	
UINT32 TaskMain(void)
{
    UINT32 uwRet;
    TSK_INIT_PARAM_S stInitParam;
    if (LOS_KernelInit() != LOS_OK)  //系统内核初始化
    {
        return LOS_NOK;
    }
    stInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskLed1;              //要创建任务进入的函数
    stInitParam.usTaskPrio = TSK_PRIOR_Led1;                          //要创建任务的优先级
    stInitParam.pcName = "TaskLed1";                                  //要创建任务的名字
    stInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;//要创建任务的堆栈大小
    uwRet = LOS_TaskCreate(&TaskLed1_ID, &stInitParam);               //创建LED1任务
    if (uwRet != LOS_OK)
    {
        return LOS_NOK;
    }
	LOS_Start();	
	return LOS_OK;
}

	UINT32 TaskLed1(VOID)
{
    while(1)
    {
        GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET);
	    GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET);
		LOS_TaskDelay(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET);
	    GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
		LOS_TaskDelay(500);
    }
}
//	SysTick_Handler
int main(void)
{
	LED_Init();
	
	TaskMain();
	while(1)
	{
		
	}



}

大家直接复制代码把原本main.c中的代码替换掉就行。

6.下载程序

博主这里用的是DAP

如果你用的是其他类型的下载器的话

你可以在魔术棒>Debug   中更改

下载完成后LED闪烁

7,文件下载

文件下载

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

盛一碗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值