nbhkdz.com冰点文库

在ucos上移植stm32

时间:2013-08-02


1.准备材料
在 st 官网上下载最新的固件库(现在是 v3.5.0) ,地址为: http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32 f10x_stdperiph_lib.zip(地址仅为参考,以最新变更为准) 解压后目录如下:

在 ucos 官网上下载移植 stm32 移植版的 ucosii 代码,这个需要注册一下,下载地址为: http://micrium.com/download/uCOSII-ST-STM32F103ZE-SK.exe(以最新变更为准) 下载安装后目录如下:

2.创建工程文件(以 Template 为例)
创 建 一 个 文 件 夹 , 取 名 为 Template , 新 建 App,Bsp,Libraries,Project,Readme,uCos-II,Source insight 文件夹, 如图:

App:用于存放与应用程序有关的文件 Bsp:用于存放与硬件有关的驱动程序 Libraries:用于存放固件库和启动文件 Project:存放项目工程文件 Readme:存放一些说明性的文件 Source Insight:存放 Source insight 项目文件 uCOS-II:存放 uCOS 的相关文件。 接下来往各个文件夹下添加相应的文件(以下图的文件路径为例) :

(1)将 路 径 E:\Micrium\Software\EvalBoards\ST\STM32-SK\IAR\OS-Probe-LCD 下 的 app,app_cfg,includes,os_cfg 复制到 App 文件目录下,除 os_cfg 外其他三个文件中的内容可 以删除或在应用时更改。 (2)将路径 E:\Micrium\Software\EvalBoards\ST\STM32-SK\IAR\BSP 下的 bsp.c,bsp.h 复制到 Bsp 文件目录下,用户使用时可以根据项目需求重写或更改。 (3)在 Libraries 文件夹下新建 CMSIS 文件夹,并在 CMSIS 中新建 startup 文件夹,将路径 E:\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries 下的 STM32F10x_StdPeriph_Driver 文件夹复制到 Libraries 中, 将路径 E:\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下 的 core_cm3.c,core_cm3.h 、 路 径 E:\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下 stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h 文 件 复 制 到 CMSIS 中 , 将 路 径 E:\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\start up\iar 下的 startup_stm32f10x_hd.s(根据 mcu 型号选择)复制到 startup 文件夹下,将路径 E:\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\EWARM 下 的 stm32f10x_flash.icf 复制到 startup 文件夹下。 (4)将路径 E:\Micrium\Software\uCOS-II 下的 Ports 和 Source 文件夹复制到 uCOS-II 文件夹 下(注意:将 Source 文件夹下的 ucos-ii.h 文件复制到 Prots 下) 。 至此文件复制的工作完成。

3.创建 IAR 项目文件

如上图新建一个 IAR 项目(选择 ARM,Empty project ) ,取名为 Template 并保存在 Project 目录下。

往项目工程下添加组,如下图,

添加如下项目列表中的文件(部分文件夹下有子目录,Output 文件是建立项目时自动添加 的) ,

文件夹展开后如下,

给各个文件夹添加文件, (1)将路径 E:\Template\App 下的文件添加到 Template 项目中的 App 文件下。 (2)将路径 E:\Template\Bsp 下的文件添加到 Template 项目的 Bsp 文件下。 (3)将 路 径 E:\Template\Libraries\CMSIS 和 E:\Template\Libraries\CMSIS\startup (stm32f10x_flash.icf 除外) 下的文件添加到 Template 项目的 CMSIS 文件下。 (4)将 路 径 E:\Template\Libraries\STM32F10x_StdPeriph_Driver\inc 下 的 文 件 添 加 到 STM32F10x_StdPeriph_Driver 下的 inc 文件夹下。 (5)将 路 径 E:\Template\Libraries\STM32F10x_StdPeriph_Driver\src 下 的 文 件 添 加 到 STM32F10x_StdPeriph_Driver 下的 src 文件夹下。

(6)将路径 E:\Template\uCOS-II\Source 下的文件添加到 uCOS-II 下的 core 文件夹下。 (7)将路径 E:\Template\uCOS-II\Ports 下的文件添加到 uCOS-II 下的 port 文件夹下。 (8)配置工程 选取芯片如图:

添加相应的包含目录和宏定义

该例的包含目录为 $PROJ_DIR$\..\App

$PROJ_DIR$\..\Bsp $PROJ_DIR$\..\Libraries\CMSIS $PROJ_DIR$\..\Libraries\STM32F10x_StdPeriph_Driver\inc $PROJ_DIR$\..\uCOS-II\Ports (注:$PROJ_DIR$\..\表示当前工程所在目录的上一级目录。例如 E:\Template\Project 表示当 前工程所在的目录,$PROJ_DIR$\..\则表示 E:\Template\。 ) 需要的宏定义 USE_STDPERIPH_DRIVE 表示使用固件库。 STM32F10X_HD 表示选择的芯片为大容量芯片 这两个宏定义也可以在 stm32f10x.h 中通过取消相关的注释来选择。个人认为直接在此添加 宏定义比较方便,建议使用这种方法。 (注: 前面的方框不要打勾,

如果打勾的话,安装目录下的一些标准头文件不能被包含,造成编译错误。 ) 配置链接文件如下图:

(注:白色方框内的路径需要根据链接文件所在的位置修改,本例使用是 $PROJ_DIR$\..\Libraries\CMSIS\startup\stm32f10x_flash.icf 配置仿真如下图(根据自己的编译器选择) :

至此工程项目创建并配置完成。 4.移植 由于我们要保留 2.86 版本的 uCOS-II 操作系统以方便后期升级 stm32 的固件库, 所以修改的 文 件 主 要 是 与 stm32 有 关 的 文 件 。 主 要 修 改 的 文 件 有 os_cfg.h,os_cpu.h,os_cpu_c.c,startup_stm32f10x_hd.s,stm32f10x_it.h,stm32f10x_it.c 。 移 植 开 始: (1)打开 os_cpu.h 文件,将函数声明中的 void OS_CPU_SysTickInit(void); void OS_CPU_SysTickClkFreq(void);(其中前一个函数调用了后一个函数) 注释掉,这两个函数主要用来配置系统的心跳时钟的,我们会自己编写,如下:

注:void OS_CPU_SysTickInit(void) 函数仅供参考。 (2)打开 os_cpu_c.c 文件,将跟 void OS_CPU_SysTickInit(void)相关的代码(包括一些宏定 义)注释掉:

代码块

相关宏定义 (3)修改 Startup_stm32f10x_hd.s(根据 mcu 的不同会有相应的变化,该例选择的是大容量 的芯片)只读属性为可读,打开该文件将该文件中的所有出现 PendSV_Handler 的地方替换 为 OS_CPU_PendSVHandler, 所有出现 SysTick_Handler 的地方替换为 OS_CPU_SysTickHandler。 之所以要修改这两个地方主要是因为我们一般的中断向量是 CMSIS 给的,而 uCOS-II 使用的 是自己写的,我们修改 CMSIS 的向量表来统一这两个向量可以避免修改更多与 uCOS-II 有关 的内容,从而降低出错几率(当然也可以修改 uCOS-II 中的中断向量来统一这两个向量,注 意要同时修改与这两个函数相关的一些函数声明及其函数代码) 。 这样, 中断服务函数 PendSV_Handler 在 os_cpu.h 中声明, os_cpu_a.asm 中有中断服务代 在 码,在 Startup_stm32f10x_hd.s 中有中断入口,匹配完成。 中断服务函数 SysTick_Handler 在 os_cpu.h 中声明,在 os_cpu_c.c 中有中断服务代码,在 Startup_stm32f10x_hd.s 中有中断入口地址,初始化函数在 Bsp 中编写(即上文说到的 void OS_CPU_SysTickInit(void) 函数)匹配也完成。由此两个中断函数就能正确的响应并执行。 (4)为 了 避 免 固 件 库 中 原 有 的 PendSV_Handler 和 SysTick_Handler 函 数 对 OS_CPU_PendSVHandler 和 OS_CPU_SysTickHandler 函数的影响,我们将 stm32f10x_it.h 和 stm32f10x_it.c 中与这两个中断有关的函数声明及代码注释掉,如下图:

(5)还要修改 os_cfg.h 中的 #define OS_APP_HOOKS_EN 0 /* Application-defined hooks are called from the uC/OS-II hooks*/ #define OS_ARG_CHK_EN 0 /*Enable (1) or Disable (0) argument checking */ #define OS_TMR_EN 0 /* Enable (1) or Disable (0) code generation for TIMERS */ 三个地方,这些功能我们暂时不用(所以不使能) ,要用的话要定义一些东西,这里不做介 绍,参见邵老师的书吧。 至 此 移 植 部 分 完 成 , 编 译 后 没 有 错 误 ( 记 得 写 心 跳 时 钟 的 初 始 化 函 数 void OS_SysTickInit(void)),如果有错误再仔细查阅一下相关的移植资料予以修正。

总结:移植的最主要的部分就是与两个中断服务函数相关的中断向量地址、中断服务函
数声明及代码、中断服务函数的初始化以及相关同文件的包含。搞清楚这些后,想怎么移植 就可以怎么移植啦!


赞助商链接

Keil移植Ucosii到STM32F103

二、 STM32F10x 标准库移植 1. 建立工程文件夹 STM32F10x_Ucosii_Keil 2. 建立子文件夹:CMSIS、STM32F10x_StdPeriph_Driver、Ucosii、Project。如下: 3. ...

STM32f4_uCOS移植_图文

STM32f4_uCOS移植 - STM32F4VGT6的uc/os ii移植... 标签: 移植| STM32f4_uCOS移植_电子/电路_工程科技_专业资料。STM32F4VGT6的uc/os ii移植 ...

使用IAR移植ucos到stm32的步骤

官网上下载移植 stm32 移植版的 ucosii 代码,这个需要注册一下,不多说直接上接 上地址 http://micrium.com/download/uCOSII-ST-STM32F103ZE-SK.exe 下载安装...

STM32F407移植uCOS-II笔记

STM32F407移植uCOS-II笔记_计算机软件及应用_IT/计算机_专业资料。自己辛辛苦苦写的 STM32F407 在 IAR 环境下移植 Ucos-II 第一步:安装 IAR for ARM。 第...

UCOSII在STM32处理器上的移植

μCOSII 在 STM32 处理器上的移植目前,嵌入式技术已被广泛应用到汽车电子、无线通信、数码产品等各个领域。嵌入式操作系统及嵌入式处理器 技术发展迅猛,嵌入式...

移植uCOS-II到STM32开发平台(基于uCOS-II2.86和ST官方V...

移植uCOS-II到STM32开发平台(基于uCOS-II2.86和ST官方V3.5固件库)_信息与通信_工程科技_专业资料。之前有使用 ST 官方 V3.5 固件库新建工程,并且编写了 GPIO...

STM32和STR71X移植uCos-II操作系统比较分析

STM32和STR71X移植uCos-II操作系统比较分析_信息与通信_工程科技_专业资料。比较STM32系列和STM71X系列控制器,在移植uCos-II操作系统时的异同,进而理解Cortex-M3内...

STM32F10x UCOS-II之愚见

STM32F10x Uc/OS-II 之愚见 需要先看: 《步步清晰之 uCOSII 在 STM32 上的移植-图文并茂版》 来源:百度文库 贡献者:pengpotter 作者:weishao 链接: http:...

UCOS III STM32上下文切换过程

UCOS III stm32 上下文切换详细过程 UCOS III 中上下文切换是通过调用 OSCtxSw()函数实现, OSCtxSw()用汇编语言编写: OSCtxSw LDR R0, =NVIC_INT_CTRL 获取中断...

基于uCOS_II的以太网移植实例

基于uCOS_II的以太网移植实例_计算机硬件及网络_IT/计算机_专业资料。基于uCOS_...2.2 以太网文件移植首先,将以太网文件夹中的 efsl、lwip-1.3.1、STM32_...