stm32f103移植ucosII.docx

上传人:b****2 文档编号:23223983 上传时间:2023-05-15 格式:DOCX 页数:15 大小:597.52KB
下载 相关 举报
stm32f103移植ucosII.docx_第1页
第1页 / 共15页
stm32f103移植ucosII.docx_第2页
第2页 / 共15页
stm32f103移植ucosII.docx_第3页
第3页 / 共15页
stm32f103移植ucosII.docx_第4页
第4页 / 共15页
stm32f103移植ucosII.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

stm32f103移植ucosII.docx

《stm32f103移植ucosII.docx》由会员分享,可在线阅读,更多相关《stm32f103移植ucosII.docx(15页珍藏版)》请在冰豆网上搜索。

stm32f103移植ucosII.docx

stm32f103移植ucosII

2014年5月29日星期四

Author:

wit_yuan

Stm32移植uc/osII到stm32f103vet6上。

版本是v2.86

1、XX

2、进入官网

选择uc/os-II

3、选择cpus

之后进入Downloadcenter

4、选择一个型号的文件下载

如果没有注册的话,进行注册,就能下载文件了。

这里使用的是v2.86版本的stm32f103rb/stm32f103vb系列的进行移植。

4、下载文件

5、压缩

6、开始移植过程

用一个简单的裸机串口打印输出的实验代码,进行这个过程。

工程结构如下:

7、在以上源代码的基础上,添加两个文件夹,工程结构如下:

在此基础上,将下载下来的源代码Micrium->Software->uCOS-II->Source文件夹下的内容复制到ucosii,前提是在USART-DEMO的项目中也添加上两个文件夹ucosii和ucospart。

项目目录结构如下:

8、开始添加ucosii文件夹下的这部分代码:

9、同理,还得添加ucospart部分代码,这就得使用源代码中的Micrium->Software->uCOS-II->Ports->ARM-Cortex-M3->Generic->IAR文件夹下的代码。

10、这部分添加完成之后,可以看一下目录结构

11、试试编译一下:

发生错误

大意就是找不到一些文件,这个时候可以配置一下相关的参数等。

将刚才的添加的两个文件夹的相关.h文件的文件夹添加进来。

差异主要体现在:

12、再次编译,仍旧出现错误,如下:

大意是有一个文件不存在。

App_cfg.h。

报错的是不能打开,其实,源文件里面就是没有这个文件的。

这个时候可以示意性的添加一个这个文件,目前可以设置为空。

13、再次编译一下,会发现还是少一个文件

Os_cfg.h.

这个时候可以从官网下载的源代码中。

Micrium->Software->EvalBoards->ST->STM3210B-EVAL->OS-Probe目录下找到一个os_cfg.h文件。

注意:

我操作的时候,将两个文件夹全部添加到了user目录下

这个只是示意,使用的时候,将这两个从上面移除。

14、再次编译,依旧出现问题

大意是_root没有定义,那么进入这个报错的位置。

将其注释掉:

15、编译,还有错误

意思是有很多的内容没有定义。

16、在ucospart中将os_cpu_a.asm添加到其工程下,进行编译

17、报错如下:

这个时候,要注意的是,汇编代码PUBLIC是必须全部改为EXPORT的。

而且还要将第59行的

RSEGCODE:

CODE:

NOROOT

(2)

进行替换为:

AREA|.text|,CODE,READONLY,ALIGN=2THUMB

REQUIRE8

PRESERVE8

还要修改startup_stm32f10x_hd.s文件中的PendSV_Handler。

这个主要是根据os_cpu_a.asm文件中的OS_CPU_PendSVHandler来的。

需要对应一下。

在第76行,192,193行都替换一下

将os_cpu_c.c文件中的

注释掉,方法很简单,就是在voidOS_CPU_SysTickInit(void)上一行加上#if0

函数结束加上#endif。

对于voidOS_CPU_SysTickHandler(void)是同理的。

还要将:

Stm32f10x_it.c中添加:

voidSysTick_Handler(void)

{

OSIntEnter();

OSTimeTick();

OSIntExit();

}

18、编译:

如果继续报错,那么修改os_cfg.h文件中的OS_APP_HOOKS_EN为0,OS_DEBUG_EN为0,里面其实有一些EN的,都可以暂时为0。

这里面的EN为0,能达到一个裁剪的目的。

同时要将#defineOS_TIME_DLY_HMSM_EN1设置好,防止后面程序报错。

19、编译,没有问题,这个时候主要的任务是进行一些应用的测试。

达到测试uc/osii移植成功与否。

20、在app_cfg.h文件中,添加一些内容。

#ifndef__APP_CFG_H__

#define__APP_CFG_H__

/*******************设置任务优先级*******************/

#defineSTARTUP_TASK_PRIO4

#defineTASK_LED2_PRIO5

#defineTASK_LED3_PRIO6

/************设置栈大小(单位为OS_STK)************/

#defineSTARTUP_TASK_STK_SIZE80

#defineTASK_LED2_STK_SIZE80

#defineTASK_LED3_STK_SIZE80

#endif

如下所示:

21、在main.c中添加一些内容

#include"ucos_ii.h"

#include"ucos_ii.h"

OS_STKstartup_task_stk[STARTUP_TASK_STK_SIZE];

voidSysTick_init(void)

{

SysTick_Config(SystemCoreClock/OS_TICKS_PER_SEC);

}

intmain(void)

{

SysTick_init();

USART1_Config();

OSInit();

OSTaskCreate(Task_Start,(void*)0,

&startup_task_stk[STARTUP_TASK_STK_SIZE-1],STARTUP_TASK_PRIO);

OSStart();

return0;

}

完成之后,需要添加一个app.c和一个app.h文件

22、添加两个文件app.c和app.h。

在app.c文件中:

#include"app.h"

#include"ucos_ii.h"

#include"app_cfg.h"

#include"stm32f10x_rcc.h"

#include"stm32f10x.h"

OS_STKtask_2_stk[TASK_2_STK_SIZE];//定义栈

OS_STKtask_3_stk[TASK_3_STK_SIZE];//定义栈

voidTask_Start(void*p_arg)

{

(void)p_arg;//'p_arg'并没有用到,防止编译器提示警告

OSTaskCreate(Task_2,(void*)0,//创建任务2

&task_2_stk[TASK_2_STK_SIZE-1],TASK_2_PRIO);

OSTaskCreate(Task_3,(void*)0,//创建任务3

&task_3_stk[TASK_3_STK_SIZE-1],TASK_3_PRIO);

while

(1)

{

OSTimeDlyHMSM(0,0,0,100);

}

}

//任务2

voidTask_2(void*p_arg)

{

(void)p_arg;

while

(1)

{

printf("----1-----\r\n");

OSTimeDlyHMSM(0,0,0,200);

}

}

//任务3

voidTask_3(void*p_arg)

{

(void)p_arg;

while

(1)

{

printf("----2-----\r\n");

OSTimeDlyHMSM(0,0,0,300);

}

}

在app.h文件中:

#ifndef_APP_H_

#define_APP_H_

/****************用户任务声明*******************/

voidTask_Start(void*p_arg);

voidTask_2(void*p_arg);

voidTask_3(void*p_arg);

#endif//_APP_H_

23、经过以上的步骤,进行编译,运行,程序应该就能达到这样的效果:

这样,就完成将ucosII代码到stm32f103的移植了。

声明:

例程中的串口打印是使用的野火的串口1的polling方式,使用了PA9,PA10

voidUSART1_Config(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

USART_InitTypeDefUSART_InitStructure;

/*configUSART1clock*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);

/*USART1GPIOconfig*/

/*ConfigureUSART1Tx(PA.09)asalternatefunctionpush-pull*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

/*ConfigureUSART1Rx(PA.10)asinputfloating*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStructure);

/*USART1modeconfig*/

USART_InitStructure.USART_BaudRate=9600;

USART_InitStructure.USART_WordLength=USART_WordLength_8b;

USART_InitStructure.USART_StopBits=USART_StopBits_1;

USART_InitStructure.USART_Parity=USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

USART_Init(USART1,&USART_InitStructure);

USART_Cmd(USART1,ENABLE);

}

因此,可以从野火的哪个源代码进行相应的移植。

同时参考:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1