基于STM32和uC_OS-II的多任务设计-嵌入式系统课程设计报告_第1页
基于STM32和uC_OS-II的多任务设计-嵌入式系统课程设计报告_第2页
基于STM32和uC_OS-II的多任务设计-嵌入式系统课程设计报告_第3页
基于STM32和uC_OS-II的多任务设计-嵌入式系统课程设计报告_第4页
基于STM32和uC_OS-II的多任务设计-嵌入式系统课程设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于STM32和uC_OS-II的多任务设计-嵌入式系统课程设计报告NORTHCHINAUNIVERSITYOFSCIENCEANDTECHNOLOGY嵌入式系统课程设计报告学生姓名:学号:学院:专业班级:指导教师:同组成员:2021年12月26日嵌入式系统课程设计报告一、课程设计目的本课程设计是在?嵌入式系统原理与应用?课程的根底上,通过软件编程及仿真调试的实践,进一步掌握嵌入式系统的原理和应用方法,是毕业设计前的次重要实践,为今后从事嵌入式系统相关工作岗位打下良好的根底.二、设计题目及要求2.1 设计题目:基于STM32f口uC/OS-II的多任务设计2.2 功能实现:使用uC/OS-II

2、的任务治理函数和STM32¥函数限制相应的存放器,完成一个多任务设计.整个设计共有4个任务,驱动一个LED指示灯闪烁、由3个LED指示灯组成的流水灯、驱动蜂鸣器和利用swd方式进行printf输出.2.3 设计要求:理解和熟练使用KEIL软件、STM32U存器、STM32$函数和uC/OS-II任务管理函数,用KEIL软件完成编程和调试,下载到开发板中实现4个设定的任务,并完成课程设计报告.四个任务分别为:(1)驱动1个LED指示灯闪烁、(2)由3个LED指示灯组成流水灯(3)驱动蜂鸣器发出响声.(4)利用swd方式进行printf输出.三、设计原理说明3.1 硬件说明本次课程设计主

3、要使用的是STM32神舟IV号开发板为根底进行课程设计的,本节将详细介绍神舟IV号开发板的各局部硬件原理与实现.(1)开发板资源图-1-嵌入式系统课程设计报告(2)MCU开发板的处理器是STM32F107VCT6该处理器基于ARMV7架构的Cortex-M3内核,主频72Mhz内部含有256K字节的FLASH和64K字节的SRAMLQFP100封(3)蜂鸣器开发板板载一个无源蜂鸣器,用于产品告警或声音提醒.蜂鸣器连接到了处理器的PA3管脚,当处理器的PA3管脚输出低电平时蜂鸣器开始鸣响,反之处理器的PA3管脚输出高电平时蜂鸣器停止鸣响.(4)指示灯开发板提供了1个电源指示灯和4路通用LED指示

4、灯.电源指示灯指示3.3V电源是否正常.4路通用LED旨示灯可以用于指示STM32FF发板的状态.用户LED指示灯由GPIO管脚限制LED灯的亮灭,当GPIO管脚输出低电平时,LED指示灯亮.反之,当GPIO管脚输出高电平时,LED指示灯灭.这四个LED指示灯分别由PD2PD3PD4和PD7限制.(5)JTAG仿真调试开发板提供标准的20针JTAG接口,可以直接和JLINKV8仿真器连接,下载程序,调试仿真;嵌入式系统课程设计报告(6)晶振电路STM32F10内部已经包含了8MHz®速内部RC1荡电路,但是其精准度不是很高;为此在外部增加了25MHz勺晶振电路,为系统的可靠工作提供时

5、序基准.(7)设计中用到的管脚芯片引脚开发板模块PD2LED1PD3LED2PD4LED3PD7LED4PA3蜂鸣器3.2 STM32存放器使用说明设计中,只用到时钟和GPIO相关的存放器.STM32F107Vg共有80个GPIO分成A、B、C、DE五个组,每组有13-16个可用的I/O端口,每个GPIO可以自由编程.通过各个存放器来限制GPIO俞出高电平或者是低电平.每个GPIO有7个存放器来限制,其中CRL和CRFffl来确定I/O管脚的方向和速率以及何种驱动方式,BSRRT直接修改某一个CPIO引脚的上下电平,BRRT将GPIO置零.(2)在使用配置GPIO存放器之前,都要先配置GPIO

6、的时钟.通过RCCJ存器当中的CRCFG序口CIR来设置系统时钟.GPICS在APB2总线上,可对APB2ENR存放器设置来确定所用到的GPIO时钟.(3)nC/OSII用Cortex-M3的SysTick定时器产生操作系统需要的滴答时钟,作为整个系统的根基.SysTick定时器的四个存放器SysTick_CTRLSysTick_LOADSysTick_VAL、SysTick_CAL旧限制每隔一定时间产生一个中断使艮C/OSII系统能进行多任务限制.(3)用到的存放器:CRL、CRHBRRBSRRCRCFGRCIR、APB2ENRSysTICK_CTRLSysTICK_LOADSysTICK_

7、VALSysTICK_CALIB3.3 STM32库函数使用说明设计中只用到时钟和GPIO相关的库函数.(1)直接配置存放器开发,如果代码比拟庞大,可读性差.ST针对STM32封装好一个软件封装库,开发者可调用函数接口(API,ApplicationProgramInterface)来完成相应的开发工作,配置存放器的工作由接口函-3-嵌入式系统课程设计报告数完成,使开发人员脱离最底层的存放器操作,易于阅读,维护本钱低.库是架设在存放器与用户驱动层之间的代码,向下处理与寄存器直接相关的配置,向上为用户提供配置存放器的接口.库开发方式与直接配置存放器的方式的区别:(2)库目录和文件简介Librar

8、ies文件夹下是驱动库的源代码及启动文件在使用库开发时,需要把libraries目录下的相关库函数文件添加到工程中进入Libraries文件夹看到,关于内核与外设的库文件分别存放在CMSISffiSTM32F10x_StdPeriph_Driver文件夹中.CMSIS(CortexMicrocontrollerSoftwareInterfaceStandard):ARM将所有Cortex芯片厂商的产品的软件接口标准化,制定了CMSIS标准.CMSIS层起着承上启下的作用,一方面该层对硬件存放器层进行了统一的实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设存放器的不同定义,另一方面又向

9、上层的操作系统和应用层提供接口,简化了应用程序开发的难度.LibrariesCMSISCM3文件夹下又分为CoreSupport和DeviceSupport文件夹.在CoreSupport中的是M3R通用的源文件core_cm3.c和头文件core_cm3.h,作用是为采用Cortex-M3核设计SOC勺芯片商设计的芯片外设提供一个进入M3内核的接口.这两个文件在其它公司的Cortex-M3系列芯片也是相同的.我们只需把这个文件加进我们的工程文件即可.在DeviceSupport文件夹下的是启动文件、外设存放器定义&中断向量定-4-嵌入式系统课程设计报告义层的一些文件,由ST公司提供.

10、system_stm32f10x.c文件的功能是设置系统时钟和总线时钟,该文件中包含了stm32f10x.h这个头文件.启动文件要选择startup_stm32f10x_cl.s.系统启动文件由汇编编写,不同的文件对应不同的芯片型号.启动文件是任何处理器在上电复位之后最先运行的一段汇编程序.在我们编写的c语言代码运行之前,需要由汇编为c语言的运行建立一个适宜的环境,接下来才能运行我们的程序.所以我们也要把启动文件添加进我们的的工程中去,其作用相当于bootloader.STM32F10x_StdPeriph_Driver:该文件夹下有inc和src两个文件夹,都属于CMSIS勺设备外设函数局部

11、.src里面是每个设备外设的驱动程序.src和inc文件夹里的就是ST公司针对每个STM3沙卜设而编写的库函数文件,每个外设对应一个.c和.h后缀的文件.我们把这类外设文件统称为:stm32f10x_ppp.c或stm32f10x_ppp.h文件,ppp表示外设名称.如针对GPIO外设,在src文件夹下有一个stm32f10x_gpio.c源文件,在inc文件夹下有一个stm32f10x_gpio.h头文件,设计中用到了STM32勺GPIQ那么至少要把这两个文件包含到工程里.这两个文件夹中,还有一个很特别的misc.c文件,这个文件提供了外设对内核中的NVIC(中断向量限制器)的访问函数,在配

12、置中断时,我们必须把这个文件添加到工程中.在用库建立一个完整的工程时,还需要添加user目录下的stm32f10x_it.c、stm32f10x_it.h、stm32f10x_conf.h这三个文件.stm32f10x_it.c用来编写中断效劳函数;stm32f10x_conf.h用来配置使用了什么外设的头文件,用这个头文件我们可以很方便地增加或删除外设驱动函数库.库文件直接包含进工程即可,丝毫不用修改,而有的文件就要我们在使用的时候根据具体的需要进行配置.(3)用到的库函数:SystemInit、RCC_APB2PeriphClockCmdSysTick_Config、GPIO_Init、G

13、PIO_SetBits、GPIO_ResetBits.3.4 uC/OS-II任务治理函数使用说明设计中用到的任务治理函数包括任务堆栈的建立、任务的创立和uC/OS-II的初始化和任务的启动.(1)UCOSII的前身是UCOS最早出自于1992年美国嵌入式系统专家JeanJ.Labrosse把UCOS勺源码发布在BBS上.目前最新的版本是UCOSIII,但是现在使用最为广泛的还是UCOSILUCOSII是一个可裁减的、抢占式、实时多任务内核,具有高度可移嵌入式系统课程设计报告植性,特别适合于微处理器和限制器,已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPUBS5DSP>U

14、COSII(V2.91版本)体系结构如下列图所示YourApplication即::TFT;.Asection>p(OSJIDS-lt加5pCOSdlSeetionSCortexM3Port03CHe也0BSP甘,:£-ifs«o(wNARMCortexJV13/TargetBoard(2)uC/OS-II操作系统内核的主要工作就是对任务进行治理和调度,任务的执行代码通常是一个无限循环结构.从程序设计的角度来看,一个uC/OS-II任务的代码就是一个C语言函数,任务的参数是一个void类型的指针,但是这些函数是由主函数main()来负责创立和启动,然后由操作系统负责调

15、度和运行,而不是调用的关系.OSTaskCreate()为创立任务的函数,OSStart()为启动任务的函数.使用OSStart()之后,任务就交由操作系统来治理和调度.每个任务都必须具有一个唯一的优先级别,每一个级别都用一个数字来表示,比方数字为0,255.在存储器中按数据“后进先出的原那么组织的连续存储空间称为堆栈,为了满足任务切换和响应中断时保存CPLW存器中的内容及存储任务私有数据的需要,每个任务都应该配有自己的堆栈.任务堆栈是任务的重要组成局部.使用数据类型OS_ST踩定义任务堆栈,即定义一个OS_ST嘤型的数组.-6-嵌入式系统课程设计报告在使用uC/OS-II的所有效劳之前,必须

16、调用uC/OS-II的初始化函数OSInit(),对uC/OS-II自身的运行环境进行初始化.为了能使用习惯的方法来使任务延时,uC/OS-II提供了一个可以用时、分、秒为参数的任务延时函数OSTimeDlyHMSM()比方延时1秒可用OSTimeDlyHMSM(00,0,1000).(3)需要用到的任务治理函数:OSInit、OSTaskCreateOSStart、OSTimeDlyHMSM四、软件设计(含流程图、带注释的程序清单)系统上电开始运行初始化创立任务创立任务创立任务创立任务TASK_3TASK_2TASK_1TASK_4执行OSSTART(p数后执行OSSTART的数后执行OSS

17、TART(p数后执行OSSTART的数后开始执行相应任务开始STM3纵行相应开始执行相应任务开始STM3欧行相任务任务/*main.c*/#include"includes.h#include"stm32f10x.h#include"stm32f10xrcc.h-7-嵌入式系统课程设计报告#include"stdio.h"constuint32_tSystemFrequency=72000000;#defineRCC_GPIO_LEDRCC_APB2Periph_GPIOD#defineGPIO_LEDGPIOD#defineDS1_PINGP

18、IO_Pin_4#defineITM_Port8(n)(volatileunsignedchar*)(0xE0000000+4*n)#defineITM_Port16(n)(volatileunsignedshort*)(0xE0000000+4*n)#defineITM_Port32(n)(volatileunsignedlong*)(0xE0000000+4*n)#defineDEMCR(volatileunsignedlong*)(0xE000EDFC)#defineTRCENA0x01000000GPIO_InitTypeDefGPIO_InitStructure;#defineTAS

19、K_1_PRIO5#defineTASK_2_PRIO6#defineTASK3PRIO7#defineTASK_4_PRIO8#defineTASK_1_STK_SIZE100#defineTASK_2_STK_SIZE100#defineTASK_3_STK_SIZE100#defineTASK_4_STK_SIZE100OS_STKtask_1_stkTASK_1_STK_SIZE;/定义堆栈OS_STKtask_2_stkTASK_2_STK_SIZE;/定义堆栈OS_STKtask_3_stkTASK_3_STK_SIZE;/定义堆栈OS_STKtask_4_stkTASK_4_ST

20、K_SIZE;/定义堆栈- 8-嵌入式系统课程设计报告struct_FILEinthandle;FILE_stdout;FILE_stdin;/*- 重写fputc函数intfputc(intch,FILE*f)if(DEMCR&TRCENA)while(ITM_Port32(0)=0);ITM_Port8(0)=ch;return(ch);)voidTask_1(void*arg)(while(1)(GPIO_ResetBits(GPIO_LED,DS1_PIN);点亮LED3OSTimeDlyHMSM(0,0,0,1000);GPIO_SetBits(GPIO_LED,DS1_PI

21、N);熄灭LED3OSTimeDlyHMSM(0,0,0,1000);)voidTask_2(void*arg)(while(1)(GPIO_ResetBits(GPIO_LED,GPIO_Pin_2);/点亮LED1OSTimeDlyHMSM(0,0,0,1500);- 9-嵌入式系统课程设计报告GPIO_SetBits(GPIO_LED,GPIO_Pin_2);熄灭LED1GPIO_ResetBits(GPIO_LED,GPIO_Pin_3);/点亮LED2OSTimeDlyHMSM(0,0,0,1500);GPIO_SetBits(GPIO_LED,GPIO_Pin_3);熄灭LED2G

22、PIO_ResetBits(GPIO_LED,GPIO_Pin_7);/点亮LED4OSTimeDlyHMSM(0,0,0,1500);GPIO_SetBits(GPIO_LED,GPIO_Pin_7);熄灭LED4voidTask_3(void*arg)while(1)GPIO_ResetBits(GPIOA,GPIO_Pin_3);/无源蜂鸣器响OSTimeDlyHMSM(0,0,0,1000);GPIO_SetBits(GPIOA,GPIO_Pin_3);/无源蜂鸣器不响OSTimeDlyHMSM(0,0,0,1500);voidTask_4(void*arg)while(1)print

23、f("hello,world!n");intmain(void)SystemInit();/配置系统时钟为72M-10-嵌入式系统课程设计报告SysTick_Config(SystemFrequency/OS_TICKS_PER_SEC);/使能SysTick定时器RCC_APB2PeriphClockCmd(RCC_GPIO_LED|RCC_APB2Periph_GPIOA,ENABLE);/使能GPIOAF口GPIOD勺时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;GPIO_InitStructure.GPIO_Mode=GPIO

24、_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIO_LED,&GPIO_InitStructure);/LED灯相关的GPIO初始化GPIO_Init(GPIOA,&GPIO_InitStructure);/无源蜂鸣器相关的GPIO初始化GPIO_SetBits(GPIO_LED,GPIO_Pin_All);/熄灭所有LED指示灯GPIO_SetBits(GPIOA,GPIO_Pin_3);/让无源蜂鸣器不响OSInit();/操作系统初始化OSTaskCreate(Task_1,

25、(void*)0,&task_1_stkTASK_1_STK_SIZE-1,TASK_1_PRIO);/创立任务Task_1OSTaskCreate(Task_2,(void*)0,&task_2_stkTASK_2_STK_SIZE-1,TASK_2_PRIO);/创立任务Task_2OSTaskCreate(Task_3,(void*)0,&task_3_stkTASK_3_STK_SIZE-1,TASK_3_PRIO);/创立任务Task_3OSTaskCreate(Task_4,(void*)0,&task_4_stkTASK_4_STK_SIZE-1,

26、TASK_4_PRIO);/创立任务Task_4OSStart();/启动操作系统I*/*STM32DBG.INI:STM32DebuggerInitializationFile*/-11-嵌入式系统课程设计报告/*/<<<UseConfigurationWizardinContextMenu>>>/*/*ThisfileispartoftheuVision/ARMdevelopmenttools.*/*Copyright(c)2005-2007KeilSoftware.Allrightsreserved.*/*Thissoftwaremayonlybeus

27、edunderthetermsofavalid,current,*/*enduserlicencefromKEILforacompatibleversionofKEILsoftware*/*developmenttools.Nothingelsegivesyoutherighttousethissoftware.*/I*/FUNCvoidDebugSetup(void)/<h>DebugMCUConfiguration/<o1.0>DBG_SLEEP<i>DebugSleepMode/<o1.1>DBG_STOP<i>DebugSto

28、pMode/<o1.2>DBG_STANDBY<i>DebugStandbyMode/<o1.5>TRACE_IOEN<i>TraceI/OEnable/<o1.6.7>TRACE_MODE<i>TraceMode/<0=>Asynchronous/<1=>Synchronous:TRACEDATASize1/<2=>Synchronous:TRACEDATASize2/<3=>Synchronous:TRACEDATASize4/<o1.8>DBG_IWDG_S

29、TOP<i>IndependantWatchdogStoppedwhenCoreishalted/<o1.9>DBG_WWDG_STOP<i>WindowWatchdogStoppedwhenCore-12-嵌入式系统课程设计报告ishalted/<o1.10>DBG_TIM1_STOP<i>Timer1StoppedwhenCoreishalted/<o1.11>DBG_TIM2_STOP<i>Timer2StoppedwhenCoreishalted/<o1.12>DBG_TIM3_STOP<i>Timer3StoppedwhenCoreishalted/<o1.13>DBG_TIM4_STOP<i>Timer4StoppedwhenCoreishalted/<o1.14>DBG_CAN_STOP<i>CANStoppedwhenCoreishalted/</h>_WDWORD(0xE0042004,0x

温馨提示

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

评论

0/150

提交评论