您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > stm32ucos详细教程
利用STM32固件库V3.5与ucossiiV2.86实现STM32上ucossii的移植TIME:2014/10/21AUTHOR:Mr.Lian第一步基于固件库V3.5建立STM32工程一.需要准备的材料:1.STM32F10x_StdPeriph_Lib_V3.5.0(这是ST官网下载的固件库完整版)我的网盘下载地址:链接:密码:dus82.电脑已安装有Keil4(我的版本是V4.10)二.新建工程1.打开keil4,选择Project-CloseProject,关闭掉原来的工程。2.在建立工程之前,建议用户在电脑的某个目录下面建立一个文件夹,后面所建立的工程都可以放在这个文件夹下面,这里我在桌面建立一个文件夹为:ucosii_test。3.在ucosii文件下建立六个文件夹:○1hardware(用来存放你以后建立的外围硬件源文件还有头文件);○2output(用来存放工程编译后的文件);○3stm32lib(用来存放stm32V3.5库的文件);○4ucosii(用来存放ucosii移植的文件);○5user(用来存放你的工程还有main文件)。4.点击keil4的菜单:Project–NewUvisionProject,然后将目录定位到ucosii_test下的user文件夹下,文件名我这里取myproject,点击保存:5.点击保存后弹出选择芯片的窗口,因为我用的是STM32F103RB,所以选择ST公司的(STMicroelectronics),然后选择STM32F103RB,点击OK。6.弹出是否要加入启动文件的窗口,因为我们是基于库来建立工程的,后面我们增加库文件的时候会加入,因此这里就不需要自动加入了,故选择否。可以看到user文件下有了工程文件:7.下面我们要将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。打开官方固件库包,定位到我们之前准备好的固件库包的目录:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下面,将目录下面的src,inc文件夹copy到我们刚才建立的stm32lib文件夹下面。src存放的是固件库的.c文件,inc存放的是对应的.h文件,您不妨打开这两个文件目录过目一下里面的文件,每个外设对应一个.c文件和一个.h头文件。8.在我们建立的stm32lib文件下建立cmsis文件夹,我们将固件库包里面的相关启动文件复制到cmsis文件夹下,打开固件库包,定位到目录:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下面,将文件core_cm3.c和文件core_cm3.h文件复制到cmsis下面去。然后定位到目录:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm将里面的文件全部复制到我们刚刚建立的cmsis文件夹下,这里解释一下,其实我们只用到arm目录下面的startup_stm32f10x_md.s文件,这个文件是针对中等容量芯片的启动文件(这就是为什么我们一开始不自动加启动文件的原因)。其他两个主要的为startup_stm32f10x_ld.s为小容量,startup_stm32f10x_hd.s为大容量芯片的启动文件。这里copy进来是方便其他开发者使用小容量或者大容量芯片的用户:定位到目录:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x将该文件下的stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h三个文件复制到我们的cmsis文件下。然后定位到目录:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template将该文件下的stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h,同样复制到cmsis文件夹下。main.c文件复制到user文件下:9.前面的步骤,我们将需要的固件库相关的文件复制到了我们的工程目录下面,下面的步骤就是将这些文件加入到我们的工程中去。点击图中:红色圈的那个按钮。10.弹出窗口(这里就是将我们的文件加到工程的窗口):双击最左边的Target1,将名字改为ucossii。然后双击中间的SourceGroup1将名字改为user按回车,然后点击:箭头所示建立,hardware,stm32lib.图1然后点击AddFiles,往图1中的user中添加自己建立的user文件下的main.c文件,往图1中的stm32lib中添加自己建立的stm32lib文件夹下的src目录下的所有文件:然后再往图1中的stm32lib中添加自己建立的stm32lib文件夹下的cmsis目录下的所有.c文件和startup_stm32f10x_md.s文件(注意在下方的文件类型选择AllFiles)。添加完成后点击OK。则工程成这个样子。11.接下来就是将一堆头文件(.h)加到路径下去,是keil知道在哪里去找这些文件。点击,找到c/c++这个选项,在下方的点击最右边的红色框进行文件的添加,同样点击红色的方框下的按钮:点击右边的进行文件的添加。将stm32lib下的cmsis,inc都加进去。12.然后在红色框内输入:STM32F10X_MD,USE_STDPERIPH_DRIVER这里解释一下,如果你用的是大容量那么STM32F10X_MD修改为STM32F10X_HD,小容量修改为STM32F10X_LD.然后点击OK。13.打开工程下的main.c文件,将下面的代码复制过去取代掉原来的代码:#includestm32f10x.hGPIO_InitTypeDefGPIO_InitStructure;intmain(void){SystemInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOD,&GPIO_InitStructure);while(1){/*SetPD0andPD2*/GPIOD-BSRR=0x00000005;/*ResetPD0andPD2*/GPIOD-BRR=0x00000005;}}#ifdefUSE_FULL_ASSERTvoidassert_failed(uint8_t*file,uint32_tline){while(1){}}#endif14.点击,选择output选项,在1上勾上,然后点击2选择文件为自己建立的那个output文件夹,然后点击OK;15.点击进行编译,编译成功,如下:16.到了这一步表示你的stm32的工程模板就建立好了,接下来就可以利用我们的这个模板去移植我们的嵌入式操作系统,比如ucossii操作系统了。第二步:基于ucossiiV2.86进行stm32的系统移植一、准备的材料ucosii源代码,可以下载官网的源代码也可以从我的网盘下载:链接:密码:z7mg二、移植过程1.我使用的是uCOS的2.86版本,下载后可以看到Micrium文件夹,里面含有三个文件夹:文件名说明AppNotes包含ucosii的说明文件,其中Micrium\AppNotes\AN1xxx-RTOS\AN1018-uCOS-II-Cortex-M3\AN-1018.pdf是很重要的。这个文件对uc/os在M3内核移植过程中的代码做了详细的说明。Licensing包含了ucosii的使用许可证SoftwareucosIIDocUc/os官方自带的说明文档Ports官方移植到M3的移植文件(IAR工程)cpu.h定义数据类型、处理器相关代码、声明函数类型cpu_c.c定义用户的钩子函数,提供扩充软件功能的入口点。(所谓钩子函数,就是指那些插入到某函数扩展这些函数功能的函数)cpu_a.asm与处理器相关汇编函数,主要是任务切换函数os_dbg.c内核调试数据和函数SourceUC/OS的源代码文件ucos_ii.h内部函数参数设置os_core.c内核结构管理,uc/os的核心,包含了内核初始化,任务切换,事件块管理、事件标志组管理等功能。2.我们在ucosii_test文件夹下的hardware文件夹下建立一个led的文件夹。然后在keil4中新建led.c还有led.h的文件保存到led文件夹下:led.h的源代码如下:#ifndef_LED_H_#define_LED_H_#includestdint.h#defineLED_00#defineLED_11voidled_init(void);voidled_on(uint32_tn);voidled_off(uint32_tn);#endifled.c的源代码如下:#includestm32f10x.hos_time.c时间管理,主要是延时os_tmr.c定时器管理,设置定时时间,时间到了就进行一次回调函数处理。os_task.c任务管理os_mem.c内存管理os_sem.c信号量管理os_mutex.c互斥信号量管理os_mbox.c消息邮箱os_q.c队列os_flag.c事件标志组CPUSTM32标准外设库EvaBoardsmicrium官方评估板的代码OS-Probe-LCDOs_cfg.h内核配置uc-cpu基于micrium官方评估板的CPU移植代码uc-LIBmicrium官方的一个库代码uc-ProbeUc-Probe有关的代码,是一个通用工具,能让嵌入式开发人员在实时环境中检测嵌入式系统#includeled.hvoidled_init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PA端口时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//LED0--PA.8端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_8);//PA.8输出高RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//使能PD端口时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//LED1--PD.2端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOD,&GPIO_InitStructure);GPIO_SetBits(GPIO
本文标题:stm32ucos详细教程
链接地址:https://www.777doc.com/doc-5154757 .html