查看: 12840|回复: 7

STM32F4_uC/OS系统移植教程

  [复制链接]
  • TA的每日心情
    奋斗
    2020-10-19 14:43
  • 签到天数: 681 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-4-24 21:44:05 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 guiyizhiyun 于 2014-4-25 09:13 编辑

    以前做过STM32F4的移植,但是没有形成文档,这次抽出一定的时间,做了这次移植,并将整个过程写成文档,给大家分享,由于文档太大,图片太多,我只把文档目录和文字部分列出,具体文档以附件形式给出。文档只是主要步骤,有些琐碎细节并没有在文档中体现,希望能给大家帮助。



    STM32F4uC/OS系统移植教程


    一、准备工作
    1、  uC/OS系统下载
    官网地址:http://micrium.com/wp-login.php
    进入下载中心找到如下界面。

    点击 ,进入如下界面。

    找到相应的内核的参考工程,如下图,点击 下载。

    下载后的参考工程如下。

    2、  STM32F4固件库下载
    官网地址:http://www.stmicroelectronics.com.cn
    下载流程:由于步骤太多,我专门写成下载流程文件,并发帖,链接地址为https://www.cirmall.com/bbs/thread-30435-1-1.html,请参考里面记载内容,下载相应的固件库。
    下载后的固件库如下。

    二、文件介绍
    1、  内核参考工程介绍
    uC/OS参考工程解压后Software文件夹下的目录结构如下。

    1) EvalBoards文件夹是评估板相关的文件,以后移植需要用到此文件夹里部分文件。
    2) uC-CPU文件夹是关于CPU信息相关的文件,移植要用到里面的文件。
    3) uC-LIB文件夹是uC/OS相关的库文件,移植要用到里面的文件。
    4) uCOS-II文件夹是uC/OS内核的核心文件,移植要用到里面的所有文件。
    5)  uC-Serial文件夹是关于串行通信协议的文件,移植时根据需要添加文件。
    2、  STM32F4固件库介绍
    STM32F4固件库解压后的目录结构如下。

    1 )_htmresc文件夹主要是2个图标文件,对移植使用上没什么作用完全可以删掉。
    2)Libraries文件夹是固件库里库文件的位置所在,包括CMSIS和STM32F4xx_StdPeriph_Driver两个文件夹。具体使用在后面介绍。

    3)Project文件夹是固件库里的参考例程和模板位置所在,包括STM32F4xx_StdPeriph_Examples(例程)和STM32F4xx_StdPeriph_Templates(模板)两个文件夹。在移植过程中可能用到里面的部分文件,具体使用在后面介绍。

    4)Utilities文件夹是给ST原厂的开发板准备的,如果不是使用原厂的开发板,此文件夹无用。
    5)stm32f4xx_dsp_stdperiph_lib_um.chm这个文件是固件库的应用参考手册,在使用过程中遇到问题,可以再这里查阅、解决。
    三、移植步骤
    1、  STM32F4固件库移植
    1.1 创建文件目录
    创建文件夹STM32F4_uCOS_SystemMigration(名字随便,随个人喜好),在下级目录中创建Libraries和Project两个文件夹。

    在Libraries文件夹中创建CMSIS文件夹,在Project文件夹中创建ARM-MDK和User两个文件夹,至此固件库移植过程中的文件夹创建完毕。
    1.2 添加文件

    将固件库STM32F4xx_DSP_StdPeriph_Lib_V1.3.0中Libraries文件夹下STM32F4xx_StdPeriph_Driver整个文件夹复制到STM32F4_uCOS_SystemMigration文件夹下Libraries中。此处是STM32固件库的核心库文件。


    将STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm文件夹下startup_stm32f40xx.s文件加入STM32F4_uCOS_System Migration\Libraries\CMSIS文件夹中。
    将STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include文件夹下stm32f4xx.h和system_stm32f4xx.h2个文件加入STM32F4_uCOS_SystemMigration\Libraries\CMSIS文件夹中。
    将STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\Libraries\CMSIS\Include文件夹下core_cm4.h、core_cm4_simd.h、core_cmFunc.h、core_cmInstr.h4个文件加入STM32F4_uCOS_SystemMigration\Libraries\CMSIS文件夹中。
    将STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\Libraries\CMSIS\RTOS文件夹下cmsis_os.h文件加入STM32F4_uCOS_System Migration\Libraries\CMSIS文件夹中。

    将STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\Project\STM32F4xx_StdPeriph_Templates文件夹下main.c、main.h、stm32f4xx_conf.h、stm32f4xx_it.c、stm32f4xx_it.h、system_stm32f4xx.c6个文件加入STM32F4_uCOS_SystemMigration\Project\User文件夹中。

    1.3 创建MDK工程
    创建工程,保存在ARM-MDK文件夹中。

    点击 ,选择相应的STM32F4芯片型号。

    点击 ,出现如下界面。

    选择 ,进入工程中。
    在工程中添加如下的组。

    将STM32F4_uCOS_System Migration\Project\User下的文件加到User组中去。
    将STM32F4_uCOS_System Migration\Libraries\CMSIS下的文件加到CMSIS组中去。
    将STM32F4_uCOS_System Migration\Libraries\STM32F4xx_StdPeriph_Driver\src下的所有文件加到STM32_Lib中去。
    添加完成情况如下。

    1.4   编译改错
    错误1:此时编译会出错,需要宏定义2个量STM32F40_41xxx,USE_STDPERIPH_DRIVER。

    解决办法1:在options配置C/C++选项卡里添加。

    解决办法2:在stm32f4xx.h(通常此文件属性为只读,需要把此属性去掉)修改。

    按照你自己的芯片型号把相应的注释去掉,我的芯片是STM32F407IG,所以我选择的是#define STM32F40_41xxx。

    把此处#define USE_STDPERIPH_DRIVER的注释去掉。
    错误2:此时编译,还会出错,出现一串FMC相关的错误。

    解决办法:将stm32f4xx_fmc.c这个文件从库里移除,原因是这个文件是给STM32F427_437xx和STM32F429_439xx这两个宏对应的芯片准备的,我们这个工程不需要,所以移除就可以了。

    1.5   移植后测试
    完成以上步骤后编译,将不会出现错误,可以调用固件库中的函数,写一个小的测试程序,检测固件库是否正常运转。此处我就不做测试了。
    2、 uCOS-Ⅱ系统移植
    2.1 添加文件到工程目录
    Micrium\Software文件夹下的uC-CPU、uC-LIB、uCOS-Ⅱ、uC-Serial这4个文件夹复制到STM32F4_uCOS_SystemMigration\Project文件夹下,在Project文件夹下创建BSP文件夹,结果如下图。

    将Micrium\Software\EvalBoards\ST\STM3240G-EVAL\BSP文件夹下bsp.c、bsp.h、bsp_int.c、bsp_periph.c加入到BSP文件夹中。
    将Micrium\Software\EvalBoards\ST\STM3240G-EVAL\BSP\OS\uCOS-II文件夹下bsp_os.c、bsp_os.h加入到BSP文件夹中。

    将Micrium\Software\EvalBoards\ST\STM3240G-EVAL\uCOS-II文件夹下app_hook.c、app_serial.c、app_serial.h、cpu_cfg.h、includes.h、os_cfg.h加入到User文件夹中。
    将Micrium\Software\EvalBoards\ST\STM3240G-EVAL\uCOS-II\KeilMDK文件夹下app_cfg.h、lib_cfg.h加入到User文件夹中。

    2.2 MDK工程中添加组
    在MDK工程中添加组uC-CPU、uC-LIB、uCOS-Ⅱ_Ports、uCOS-Ⅱ_Source、uC-Serial和BSP六个组。

    2.3 MDK工程中添加文件
    将STM32F4_uCOS_SystemMigration\Project\uCOS-II\Ports\ARM-Cortex-M4\Generic\RealView下所有文件加入到uCOS-Ⅱ_Ports组。

    将STM32F4_uCOS_SystemMigration\Project\uCOS-II\Source下所有文件加入到uCOS-Ⅱ_Source组(uCOS_II.C这个文件不要加,加入会出错)。

    将STM32F4_uCOS_SystemMigration\Project\uC-LIB下所有文件加入到uC-LIB组。
    将STM32F4_uCOS_SystemMigration\Project\uC-LIB\Ports\ARM-Cortex-M4\RealView下文件加入到uC-LIB组。

    将STM32F4_uCOS_SystemMigration\Project\uC-CPU下所有文件加入到uC-CPU组。
    将STM32F4_uCOS_SystemMigration\Project\uC-CPU\ARM-Cortex-M4\RealView下所有文件加入到uC-CPU组。

    将STM32F4_uCOS_System Migration\Project\uC-Serial\Driver\ST下文件加入到uC-Serial组。
    将STM32F4_uCOS_System Migration\Project\uC-Serial\Driver\ST\STM3240x下文件加入到uC-Serial组。
    将STM32F4_uCOS_System Migration\Project\uC-Serial\Line下文件加入到uC-Serial组。
    将STM32F4_uCOS_SystemMigration\Project\uC-Serial\OS\uCOS-II下文件加入到uC-Serial组。
    将STM32F4_uCOS_System Migration\Project\uC-Serial\Source下文件加入到uC-Serial组。

    将STM32F4_uCOS_System Migration\Project\BSP文件下所有文件加入到BSP组中。

    将Micrium\Software\EvalBoards\ST\STM3240G-EVAL\uCOS-II文件夹下app.c中内容全选复制到User组中的main.c,替换main.c全部内容,此时STM32F4_uCOS_SystemMigration\Project\User文件夹下应该还有一个main.h的文件,此文件可以删掉,也可以留着添加其他内容。我选择删掉,如果不删掉main.h,则需要将void TimingDelay_Decrement(void);(第40行)这一行删掉。
    此外还需要将User组中stm32f4xx_it.c文件中SysTick_Handler函数里内容删掉(即144行),还有若已删除main.h,则删除头文件包含#include“main.h”(即第32行);若未删除,则不用操作。

    此时User组中所有的文件如下图所示。

    至此uCOS的文件添加完毕,需要添加一些相应的头文件路径,如下图所示。

    此时编译整个工程,没有错误,没有警告,但是这里面没有加测试代码,需要加入代码进行验证。

    2.4 移植后测试
    此时虽然编译没有错误和警告,但是将程序灌入开发板,程序不能正常运行,卡死在
    B      OSStartHang这条语句上,查找了一下原因,是因为startup_stm32f40xx.s这个文件出错了,需要做相应的修改。

    解决办法:
    1、  修改startup_stm32f40xx.s这个文件,但是因为此次移植,是将整个uCOS-II系统的代码都加入工程,未做裁剪,所以startup_stm32f40xx.s这个文件已不能满足系统需求。
    2、  startup_stm32f40xx.s这个文件不能满足需求,所以从参考工程中招解决办法。
    将资料\移植\1\Micrium\Software\EvalBoards\ST\STM3240G-EVAL\BSP\KeilMDK文件夹下cstartup.s这个文件复制到STM32F4_uCOS_SystemMigration\Libraries\CMSIS文件夹下,然后将MDK工程中CMSIS组中的startup_stm32f40xx.s移除,将cstartup.s加入到CMSIS组中。

    2.5 错误和技巧
    以上的所有步骤都做完了,理论上,不会出现异常,但是由于操作失误,我出现了一个问题,就是工程仍然不能执行,找了一天,终于发现问题所在。

    文中蓝色位置就是导致,我出现工程不能执行的错误。若是选中此项,需要修改启动代码(网上找的解答),有这个需求,请看客自己去找答案。此处修改成如下图所示,问题就解决了。

    至此所有的问题都已解决,uCOS系统移植是可以裁减的,各位看客可以根据自己的需求进行移植。



    STM32_uCOS移植.doc (1.63 MB, 下载次数: 398)
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-10-19 14:43
  • 签到天数: 681 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-4-25 08:52:27 | 显示全部楼层
    leo121 发表于 2014-4-24 23:40
    谢谢分享,辛苦

    客气了 如果发现有问题的话 给我留言
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-13 19:58
  • 签到天数: 1818 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2014-4-25 09:33:55 | 显示全部楼层
    好贴要支持 ~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-10-19 14:43
  • 签到天数: 681 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-4-25 09:53:23 | 显示全部楼层
    sacq 发表于 2014-4-25 09:33
    好贴要支持 ~~

    谢谢 有问题的话要反馈啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-8-29 20:35:28 | 显示全部楼层
    楼主 威武 必须帮顶
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-5-9 17:12:32 | 显示全部楼层
    感谢楼主的分享!真是太好了 刚开始学习!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-6-14 15:28:38 | 显示全部楼层
    无私奉献,非常感谢!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2019-5-17 16:01:24 | 显示全部楼层
    好久没有登录,本着漏个面看看,以上来就看见这文章了,没办法,必须支持
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-3-29 13:23 , Processed in 0.196037 second(s), 29 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.