STM32平台移植uCOS-II详细说明-2012.11.13

上传人:小** 文档编号:26375095 上传时间:2021-08-09 格式:DOC 页数:18 大小:613.50KB
收藏 版权申诉 举报 下载
STM32平台移植uCOS-II详细说明-2012.11.13_第1页
第1页 / 共18页
STM32平台移植uCOS-II详细说明-2012.11.13_第2页
第2页 / 共18页
STM32平台移植uCOS-II详细说明-2012.11.13_第3页
第3页 / 共18页
资源描述:

《STM32平台移植uCOS-II详细说明-2012.11.13》由会员分享,可在线阅读,更多相关《STM32平台移植uCOS-II详细说明-2012.11.13(18页珍藏版)》请在装配图网上搜索。

1、EMBEDDEOSTM32平台移植uCOS-D详细说明STM32平台移植uCOS-II详细说明Vi.o硬件平台:盘古UE-STM32F103开发板软件平台:RVMDK_v4. 20 + uC0S-II_v2. 86 + StmLib_v3. 5 联系方式:WWW.UE-TECH.NET淘宝店铺:UETECH. TAOBAO. COM文档作者:介嵌电子科技冇限公可移植准备1. 建立工程所需的文件夹:工程根目录:存放用户应用程序相关:存放开发板初始化驱动文件:存放启动文件及内核支掠文件:放标准外设换数库文件:存放uCOS-II源代码,无需修改:存放移植相关文件,需修改:存放工程相关文件建工文件夹u

2、COS-11-Port 建工文件夹 uCOS-11-Port/App 建立文件夹 uCOS-11-Port/Bsp建立文件夹 uCOS-11-Port/Library 建立文件夹 uC0S-II-Port/Library/CM3 建立文件夹 uC0S-IIPort/Library/CM3/steirtup 建立文件夹 uCOS-11 -Por t /L i br ar y/STM3 2_L i b 建立文件夹 uC0S-II-Port/0S-uC0SII建立文件夹 uCOS-II-Port/OS-uCOSII/core建工文件夹 uCOS-II-Port/OS-uCOSII/port建立文件夹

3、 uCOS-II-Port/Project建立文件夹 uCOS-11-Port/Pro ject/List 建立文件夹 uCOS-II-Port/Project/ObjuCOS-11-Port此步骤完成以后,H求结构如卜所示:- _j Library 巴 CIA31耳 STM32_LibOS-uCOSII 口 core 口 port Project 口 List 二 Obj2. 移植源码包(光盘屮附带): STM32标准外设驱动库v3. 5 此源代码的文件结构不再说明 uCOS-II系统源代码v2. 86解压后文件结构如下:1/13EMBEDOEOSTM32平台移植UCOS-D详细说明口口Ap

4、pNotesLi censingSoftwareII 分别将 CoreSupport 卜的 core_cm3. c 和 core_cm3. h和 DeviceSupportSTSTM32F10x 卜的 stm32f 10x. h、system_stm32f lOx. c 和 system_stm32fl0x. h 拷贝至 uC0S_II_PortLibraryCM3 并公掉只读屈十I: 再将 DeviceSupportSTSTM32F10xstartuparm 卜的 startup_stm32f 10x_hd. s 拷貝至 uCOS-II-PortL让raryCM3startup注:盘古UE-

5、STM32F103的主芯片的内部flash为512K 打开 STM32F10x_StdPeriph_Lib_V3. 5. 0ProjectSTM32F10x_StdPeriph_Template将氏卜的 stm32fl0x_conf. h、stm32f 10x_it. c 和 stm32fl0x_it. h 拷贝至 uC0SIIPortApp 至此用函数的源代码搬移匸作己经完成,现在进fr uCOS-II的源代码搬移工作:d 打开 MicriumSoftwareuCOS-IISource将其下的所有文件拷贝至uCOS-II-PortOS-uCOSIIcore 打开 MicriumSoftwar

6、euCOSIIPorts ARM_Cortex_M3GenericRealView将其下的所有文件拷贝至ucosuCOS-11-Port OSuCOS11 port打开 MicriumSoftwareEvalBoardsSTSTM3210B-EVALRVMDK0S-Probe将其卜的 os_cfg. h 拷贝至 ucosuCOS-II-PortApp至此,所有的可利用的文件已经搬移结束,不过仍然需蛭建立一些文件,这个丁程的文件结构才算完 整,具体如下:/ 打开 ucosuC0S-I IPort App新It app. c、app_cfg. h 和 includes, h 三个空文件打开 uco

7、suCOS_II_PortBsp新建bsp.c和bsp.h两个空文件到口前为止,我们所仃的文件准备工作已经完成,我们可以了解一下uCOS-II的体系结构,如卜所示:4. 建立Keil工程 打开 Keil_v4. 20,新建 1】程 UE-uCOS-II-Port 匸程,并将其保存至 uCOS-11 -Port Pr o j ec t 在随后跳出的窗口中,选择芯片型号,盘古UE-STM32F103开发板的芯片为:STM32F103VET6 点击0K,跳出对话框,是否自动添加启动文件,注意此处选择否,因为我们会自己添加。 右击项目窗【1中Target 1,选择Manage Components,在

8、窗L1中创建文件组,并在相应的组添加 文件,具体如下: 将 Project Targets 中的 Targetl 巫命名为 UEuCOS-IIPort 新建组 STM32F1 Ox_StdPeriph_Driver 并将 uCOS-II-PortLibrarySTM32_L让src 卜的所 有文件添亦到此组下 新建组STM32F10x_CM3,并将uCOS-II-PortL让raryCM3卜所仃文件潦加到此组屮(包括C文件、H文件和startup卜的文件) 新建组APP,并将uCOS-II-PortApp下所有文件添加到此组中 新建组BSP,并将uCOS-II-PortBsp卜所育文件添加到此

9、组中 新建细uC0SII_core,并将uC0SIIPortOS-uCOSIIcore下所有C丄件添加到此纽中 新建组uC0SIIj)ort,并将uCOS-II-PortOSuCOSIIport下所有文件添加到此组中H体操作结果.及各文件说明如卜图所示:VE-uCOS-II-Port* Q 3STM3 2F1 Chc_S tdFeri phjr 1 ver STM32F10x_CN3cor_cm3. h corw_cm3 c sy s t em_s tm32 f1Ox.h sys t em_s tni32 f 1 Ox c st Ai*tup_stm32 f 10)e_hd. s3;-3J s

10、tB32fi0x.hAFPb3a-Ft3j宙a-(a-.3-:a-!由! a-:由i 3-i a-匕&/ stn32fiOx_conf. h 却 sta32fl Oxit. c / stm32fl Ox_i t. lii nclude s h加 app. c:&PPjg.h:J os.cfg hBSP劃 Bsp. c:Bsp. huCOSII coreososososcore.cflag, c mbox cmem. cmutex, ctask, ctime, ctmr. cuCOSIIpoir t cpu. hascm CDU_C. C dbg. CSTM32F1Ox_St dPeriph_D

11、r1ver:STM32W件库函数v35.包介了*个外设驱动代码:STM32F1OX.CM3:core_cm3. h和core_cm3. c文件为内核支撑文件,其他CM3核 的芯片也能使用:stm32f 10x. h为标准函数阵的入口文件.包會了 些寄存器 的定义:system_stm32f lox. h、system_stm32f 10x. c提供 f 初始化 stm32芯片的库换数.以及配克PlL 系统时钟和内代flash的接 口函数:startup_stm32fl0x_hd. s为stm32的Vi 动文件 hd农示人容 虽的芯片。APP:stm32fl0x.conf. h为外设配遥文件.此

12、文件町以使能/禁用 外设驱动:Stm32fl0x_it. c|IIstm32fl0x_it. h为屮断腺务ft!序文件, includes, h为全部头文件的头文件,对头文件进行统一骨 理:app. c为应用程序文件.包會Main隨数:app.cfg. h用来配置应用软fl 上要是任务的优先级和堆栈 人小及中断优先级:os_cfgh为内孩配置头文件,移植时需耍修改:BSP:Bsp. c存放了开发板初始化启动怖数.包禽设龙系统时钟. 初始化硬件:Bsp.h包介仃与开发板初始化柑关函数的头文件: uCOSII_core:此女件组包含了uCOS-II的源代码文件.在移植的过程中. 不需要條改.uCO

13、SIImport:此文件组包含了移植的相关文件os.cpu. h进行数据类熨定义,处理器相关代码和儿个函数 型:os_cpu_cc定义一些用户hook函数:os.cpua. asm为移植盂要用汇编代码完成的函数主要就是 任务切换函数:os dbg. c为内核调试相关数据和函数.可以不改。5.设 Option选项 Device选项卡此步骤前而已经操作,即选择主芯片:stm32fl03vet6 Output选项卡设置匸程输出文件至:uCOS-II-PortProjectObj Listing选项卡设賈工程 Listing 路径值 uCOS-II-PortProjectList C/C+选项卡设置H

14、文件的路於 Debug选项卡在此选项R中选择你所连接的JLINK,并作相应配迓 Utilities 选项卡作出如下选择操作至此为止,匸程C经建工完毕.接卜來需耍对相关文件进行修改移杭。6.移植修改以卜移植步骤來鬥 MicriumAppNotesANlxxx-RT0SAN1018-uC0S-II-Cortex-M3AN-1018. pdf os_cpu. h7/13EMBEDOEOSTM32平台移植uCOS-H详细说明此文件定义数据类熨、处理器相关代码、声明函数原型,卜面为部分代码的解释说明。/*全局变屋*/#ifdef OS_CPU_GLOBALS#define 0S_CPU_EXT#else

15、片define OS_CPU_EXT extern#endif/*数据类型*/typedef unsigned char BOOLEAN; typedef unsigned char INT8U; typedef signed char INT8S; typedef unsigned short INT16U; typedef signed short INT16S: typedef unsigned int INT32U; typedef signed int INT32S; typedef float FP32;typedef double FP64;typedef unsigned in

16、t OS_STK; typedef unsigned int OS_CPU_SR;/*临界段*/片define OS_CRITICAL_METHOD 3 define OS.ENTER.CRITICAL0进入临界段的土种模式,一般选择第3种 cpu.sr = OS_CPU_SR_Save();define OS_EXIT_CRITICAL () OS_CPl;_SR_Restore (cpu.sr) ; 为了实现资源共亨,-个操作系统必须提供临界段擦作的功能。uCOS-II为了处理临界段代码需耍关中断.处理完毕厉再开中断。这使得uCOS-II能够避免同时有其它任务或中断服务进入临界段代码。微处

17、理器一般都有关屮断7开中断指令,用户使用的C语言编译器必須有某种机制能够在C中直 接实现关中断/开屮断地操作。某些C编译器允许在用户的C源代码中插入汇编语言的语句。这使得 插入微处理器指令來关中断/开中断很容易实现。而有的编译器把从C语言中关中断/开中断放在语言 的扩展部分。uCOS-II定义两个宏(macros) 关中断和开中断,以便避开不同C编译器厂商选择不同 的方法来处理关中断和开中断。uCOS-II中的这两个宏调用分别是:OS_ENTER_CRITICAL0和 OS_EXIT_CRITICAL()。/*栈方向*/片define OS_STK_GROWTH1Cotex-M3的栈生长方向是

18、山高地址向低地址増K的,因此OS_STK_GROWTH定义为1片 define OS_TASK_SW()OSCtxSwO/*任务切换宏*/9/13EMBEDOEOSTM32平台移植uCOS-H详细说明#/13EMBEDOEOSTM32平台移植uCOS-H详细说明/*开中断关中断*/#if OS.CRITICAL.METHOD = 3#/13EMBEDDEOSTM32平台移植uCOS-D详细说明OS.CPU.SR voidOS.CPU_SR.Save(void);OS_CPl;_SR_Restore(OS_CPU_SR cpu.sr);#endif其 中 OS_CPU_SR_Save ()和 O

19、S_CPU_SR_Restore 0 是用汇编代码写的,代码在 os_cpu_a. asm/*任务切换的函数*/void OSCtxSw(void) :/用户任务切换void OSIntCtxSw(void) ;/中断任务切换两数void OSStartHighRdy (void) ;/在操作系统第一次启动的时候调用的任务切换void OS_CPU_PendSVHandler (void); 用户中断处理函数void OS_CPU_SysTickHandler(void) ;/系统定时中断处理函数,时钟节拍歯数void OS_CPU_SysTickInit (void) ;/系统 SysTic

20、k 定时器初始化INT32U OS_CPU_SysTickClkFreq(void);返回 SysTick 定时器的时钟频率关丁任务切换,矣涉及到异常处理,n体为SVC (系统服务调用,亦简称系统调用)和PendSV (可悬起系统调用),它们常用丁在操作系统之上的软件开发中。SVC用产牛系统两数的调用请求。例如,操作系统不让用户程序肖接访问硬件,而是通过提供 一些系统服务两数,用八程序使用SVC发出对系统服务两数的呼叫请求,以这种方法调用它们來间接 访问硕件。因此,当用户程序想要控制特定的哽件时,它就会产生个SVC异常,然后操作系统提供 的SVC异常服务例程得到执行,它再调用相关的操作系统换数

21、,后齐完成用户程序请求的服务。SVC 异常通过执行” SVC”指令来产生,该指令需要7个工即数,充当系统调用代号。SVC异常服务例程 稍后会提取出此代号,从而解释本次调用的八体耍求,再调用相应的服务函数。另一个相关的异常是PendSV (可悬起的系统调用),它和SVC协同使用。一方而,SVC异常是必 须工即得到响应的(川人I优先级不比当前正处理的高,或是其它原因使之无法立即响应,将上访成硬 fault),应用程序执行SVC时都是希塑所需的请求立即得到响应。另一方面,PendSV则不同它是可 以像普通的中断一样彼悬起的(不像SVC那样会上访)。CS可以利用它“缓期执行” 一个异常,直到 其它重耍

22、的任务完成厉才执行动作。悬起PendSV的方法是:手工往NVIC的PendSV悬起寄器中写 1。悬起厉,如果优先级不够高,则将缓期等待执行。H体异常处理相关知识,若想知其原理,请详细阅读CotexF3权威指南。在此处,我们需要对此文件进行修改:1) void OS_CPU_PendSVHandler (void)需粋换成 void PendSV_Handler (void)一般我们自己开发基J stm32芯片的软件,都会使用标准外设库CMSIS中提供的启动文件,比如startup_stm32f 10x_hd. s, ifrj Micrium官方没有用ST的标准启动文件,iftj It分开写成

23、了两个.s文件,即init. s 和 vectors, s(MicriumSoftwareEvalBoardsSTSTM321.0B-EVALRVMDK) init. s负责进入mainO vectors, s设置中断向鼠由J* OS_CPU_PendSVHand 1 er这个中断向量就是在vectors, s中被设置的,L我们便用的是 startup_stm32f 10x_hd. s 作为启动文件的,而在 startup_stm32f 10x_hd. s 文件中,PendSV 的中 断向杲名为PendSV_Handler,所以只需用PendSV_Handler桥换掉相应文件的 OS_CPU_

24、PendSVHandler, K中函数声明在OS_CPU_C. h中,貝体的中断服务函数原型在 OS_CPU_A. ASM中,后面也将对其进行修改。这样子,替换后的PendSV_Handler函数在OS_CPU_C.h屮冇川明,在OS_CPU_A. ASM体的中断服务函数代码,与startup_stm32f 10x_hd. s中的向凤地址就对应上了。2)注释掉故后三个关J-SysTick服务函数void OS_CPU_SysTickHandler (void);void OS_CPf_SysTickInit(void);INT32U OS_CPU_SysTickClkFreq(void);其中

25、,OS_CPU_SysTickHandler函数在ST标准库stm32fl0x_it. c中己定义,此处不需要; 其屮,OS_CPU_SysTickInit 定义在 os_cpu_c. c 中,依赖 J* OS_CPU_SysTickClkFreq,用 /初始 化SysTick定时器,需注释掉:其中,OS_CPU_SysTickClkFreq定义在官方EvalBoards的BSP. c 中,需解除依赖,若需耍,我们可以在bsp.c中实现。修改后如下所示:109/voidOSCPUPendSVHand1er(void);110void PendSVHandler(void);111112/voi

26、dos.CPU.SysTickH&ndler(void);113V/voidos:cpuSysTicklnit(void);114/INT32UoscpuSysTickClkFreq(void);115#endif/* See OS CPU CC/* See BSP.C13/13EMBEDDEOSTM32平台移植uCOS-D详细说明SysTick作为OS的“心跳可称为滴答时钟.本质上來说就显一个定时器.和PendSV中 断 1样,在 startup_stm32fl0x_hd. s 中 SysTick 的中断向就名为 SysTick_Handler 丨】.因为 ST 标准库已经有相关库西数,所以

27、我们只需作如下修改: 打开 os_cpu_c c 文件.找到 void OS_CPU_SysTickHandler (void)的内容代码0S_CPU_SR cpu_sr;OS_ENTER_CRITICAL();、OSIntNest ing+;/OS_EXIT_CRITICAL 0 ;OSTimeTickO ;/、OSIntExitO;.“复制到 stm32f 10x_it. c 文件中的 SysTick_Handler (void)函数内:void SysTick_Handler(void)OS_CPU_SR cpu_sr;、OS_ENTER_CRITICAL();OSIntNesting+

28、;OS_EXIT_CRITICAL();OSTimeTickO;/OSIntExit 0;并且在文件头部添加:#includeucos_ii. h025 include Pfstm32f 10x_it.hM026#include os_cup_a. asm根冠前乔的描述,OS_CPU_PendSVHandler屮断服务函数的原型在此文件中,我们需要用 PendSV_Handler将其替换,以实现在startup_stm32f 10x_hd. s中的中断向吊的匹配.1)注释掉 EXPORT OS.CPU.PendSVHandler,并修改成 EXPORT PendSV.Handler,如卜.所示

29、:|041| ; EXPORT OS_CPU_P&ildSVHand 1 er042 EXPORT PendSVHaadlet2)找到 OS.CPU.PendSVHandler 程序原型,并亜命乳为 PendSV_Handler204;OS CPU PendSVHandler205PendSV Handler206CPSIDI207MRSRO,PSP208CBZRO,OS CPU PendSVHandler nosave209210SUBSRO,RO尸 #0x20211STMRO,R4-R11212213LDRRl,=OSTCBCur214LDRRl,Rl215STRRO,Rl这样PendSV

30、_Handler中断服务函数就成功建立了,同时,我们需耍注释掉stm32fl0x.it.h和 stm32f 10x_it. c中的相关PendSV_Handler的声明和定义,以防止冲突,如下所示:40 void MemManage_Hand 1 er (void);41 void BusFault_Handler (void);42 void TJsageFaultHandler (void ;43 void SVCHandler (void);44 void DebugMon_Handler(void);45 /void PendSVHandler(void);46 void SysTic

31、k_Handler(void);127128 /*void PendSVHandler(voidl129 130131130 131 V134 os_cpu_c c此左件訴耍由我们來写10个相当简单的C函数OSInitHookBeginOOSInitHookEndO” 弋OST a skCreat eHook()OSTaskDelHook()OSTaskI dl eHook1OSTaskStatHook()OSTaskStklnit 0OSTaskSwHook0OSTCBInitHookOOSTimeTickHookO主耍包括9个钩子函数和1个负贲建立任务堆栈的换数OSTaskStklnit

32、()o所谓钩子函数,指那些插入到某些函数屮为扩展这些函数功能而存在的函数。-般來说,钩 子函数是进行软件功能扩充的入口点。不仅如此,uCOS-II |还提供有大吊的钩子函数,用户不 需要修改uCOS-II的内核代码程序,而只需耍向钩子换数添加代码即可拓展uCOS-II的功能,如 果耍用到这些钩子函数,需耍在OS_CFG.H 屮使能 OS_CPC_HOOKS_EN 为 1,即:define OS_CPU_HOOKS_EN 1同时关 J OSTaskStklnit. OSTaskCreate 和 OSTaskCreateExt 通过调用 OSTaskStklnt 來初 始化任务的堆栈结构,因此,堆

33、栈看起来就像刚发生过中断并将所有的寄存器保存到堆栈中的情 形 样。一 U用户初始化了堆栈,OSTaskStklnit就需耍返凹堆栈指针所指的地址,OSTaskCreate和OSTaskCreateExt会获得该地址并将它保存到任务控制块(OS.TCB)中,处理器的文档会告诉 用户堆栈指针会指向卜一个堆栈空闲位坠 还是会指向虽后存入数据的堆栈单元位置。下而进行文件的移植说明1) 把最厉 OS_CPU_SysTickHandler 0, OS_CPU_SysTickInit ()这两个两数的内容代码注 释掉:2) 禁用以卜宏定义,因为他们涉及到上步注释的Systick服务函数#define #de

34、fine#define #defineOS_CPC_CM3_NVIC_ST_CTRLOS CPU CM3 NVIC ST RELOADMMOS_CPl;_CM3_NVIC_ST_Cl;RRETOS_CPU_CM3_NVIC_ST_CAL(volatile(volatile(volatile(volatileINT32U *)0xE000E010)INT32U *)0xE000E014)INT32U *)0xE000E018)INT32U *)0xE000E01C)define OS_CPl:_CM3_NVIC_ST_CTRL_COl;NT 0x00010000define 0S_CPIJ_CM

35、3_NVIC_ST_CTRL_CLK_SRC0x00000004define OS_CPU_CM3_NVrIC_ST_CTRL_INTEN0x00000002/片define OS_CPU_CM3_NVIC_ST_CTRL_ENABLE 0x00000001 ky / os_cfg. h此文件另配置内孩的头文件,在这个文件,我们可以禁用信号磺、互斥信号最、邮箱、队列、信号磺 集、定时器、内存管理,调试模式:JT 片defineOS_FLAG_EN0禁用信号昴集defineOS_MBOX_EX0/禁用邮箱#defineOS_MEM_EN0/禁用内存管理hdefineOS_MUTEX_EN0禁用互

36、斥倍号届ftdefineOS_Q_EN0禁用队列defineOS_SEM_EN0 禁用信号彊defineOS_TMR_EN0 禁用定时器hdefineOS_DEBUG_EN0禁用调试也可以禁用应用软件的钩子丙数和多匝事件控制defineOS.APP_HOOKS.EN0PdefineOS_EVET_MULTI_EN0这些所做的修改主要是把-举功能给左掉,减少内核人小,也利r编译调试。等用到的时候再开川 相应的功能。7应用实例至此,所有的移植已经完成,如盂更洋细的说明整个移杭过程,请参考AN-1018, pdf,接下來我 们将编写应用相关的代码,具中有一些入门知识需耍说明,uCOS-II可以管理多

37、达64个任务,但保 附了优先级为 0. 1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2, OS_LOWEST_PRIOT 以及 OS_LOWEST_PRIO这8个任务以彼将來使用,用八可以仃多达56个应丿II任务,必须给每个任务赋以不 同的优先级,优先级号越低,任务的优先级越高。uCOS-II的初始化流程为:在调用uCOS-II的任何其它任务之前,uCOS-II耍求用户首先调用系 统初始化函数OSInitO,且多任务的启动是用戸通过调用OSStart ()实现的。然而,启动uCOS-II Z 前,用户至少耍建立-个应用任务,用户可以通过传递任务地址和其它参数到以

38、下两个函数Z 來建 立任务:OSTaskCreate()或OSTaskCreateExt 0 如以卜所示:main 0OSInit 0 ;/* 初始化 uC/OS-II*/OSTaskCreate 0 或 OSTaskCreateExt 0 :OSStart 0 :/*开始多任务调度!永不返回*/在UE-SIM32F1O3开发板上有3个LED,我们将创建两个任务,分别控制这3个LED,具体代码如F所 示: app. c片include static OS.STK ledl_task_stkLEDl_TASK_STK_SIZE;/开辟任务堆栈static OS.STK led2_task_stk

39、LEDl_TASK_STK_SIZE ; 开辟任务堆栈static void systick_init (void) :/函数丿K明static void systick_init(void)RCC_ClocksTypeDef rcc_clocks;RCC_GetClocksFreq(&rcc_clocks);调用标准库函数,获取系统时钟。SysTick_Conf ig (rcc.clocks. HCLK_Frequency / OS_TICKS_PER_SEC) ;/初始化并使能SysTick/static void ledl_task(void *para)para = para;wh订e

40、 (1)GPIO_SetBits(GPIOD, GPI0_Pin_7);OSTimeDlyHMSM(O, 0, 1, 0);/Is 延时,释放 CPU 控制权GPIO_ResetBits(GPIOD, GPI0_Pin_7);OSTimeDlvHMSM(O, 0, 1, 0);/Is 延时,释放 CPU 控制权 尸 、static void led2_task(void *para) para = para:while(1)GPIO_SetBits(GPIOD, GPI0_Pin_5);GPIO_SetBits(GPIOD, GPI0_Pin_6);OSTimeDlyHMSMCO, 0, 0,

41、 500) ;/500ms 延时,释放 CPU 控制权GPIO_ResetBits(GPIOD, GPI0_Pin_5);GPIO_ResetBits(GPIOD, GPI0_Pin_6);OSTimeDlyHMSMCO, 0, 0, 500);/500ms 延时,释放 CPU 控制权int main(void)BSP.InitO ;OSInitO;systick_init 0;0, &ledl_task_stkLEDl_TASK_STK_SIZE - 1,0, &led2_task_stkLED2_TASK_STK_SIZE - 1,OSTaskCreate(ledl_task. LED1_

42、TASK_PRIO);OSTaskCreate(led2_task, LED2_TASK_PRIO);OSStart 0;return 0;app_cfg.h/* task priority /片define LED1_TASK_PRIO4廿define LED2_TASK_PRI06/ task stack size /片define LED1_TASK_STK_SIZE80define LED2_TASK_STK_SIZE80Bsp. c件include static void BSP_LED_Init(void);void BSP_Init (void)Systemlnit 0:BSP_

43、LED_Init();/* Initialize the LED /static void BSP_LED_Init(void)GPIO_InitTypeDef GPIOInitStructure: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE) ;/使能时钟/LED_pinGPIO InitStructure. GPIO Pin = GPIO Pin 5|GPI0 Pin 6 GPIO Pin 7; GPI0_InitStructure. GPI0_Mode = GPIO_Modr_Out_PP; GPI0_InitStructure

44、. GPIO_Speed = GPI0_Speed_2MHz;GPIO.Init(GPIOD, &GPIO.InitStructure); Bsp. hftifndef _BSP_H#define void_BSP_H BSP_Init(void);#endif说明本开发板可以以下几个模块配套使用,模块详情请登录官网査询,或直接进入店铺购买 女路RS485/422转RS232模块 GPS模块 GPRS模块 Zigbee 模块 WIFI模块 陀螺仪模块(支持MPU6050加速度+陀螺仪、HMC5883磁力讣、BMP085气压计) 7寸液晶屏模块合嵌电子提供良好电磁兼容性的嵌入式开发板,陆续将推出的嵌入式开发板如下: STM32F103 开发板、 STM32F407 开发板、 AT91SAM9260 开发板(ARM9 系列)、 LPC1768开发板、 LPC1788开发板敬请关注,同时诚招各地加盟代理商,欢迎联系洽谈联系方式电话:0550-3789700店铺:UErECH. TA0BA0. COM邮箱:l;E_TECH126 COM网站:m. UE-TECH. NET m. UETECH. NET地址:安徽省滁州市南谯区花园西路82号(科技创业中心1幢302室)17/13

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!