您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 嵌入式技术及应用实验报告(中南民族大学)
1院系:计算机科学学院专业:年级:学号:姓名:指导教师:年月日2年级班级学号专业姓名题目名称实验一、GPIO实验实验设计要求1、首先双击工程文件,编译下载程序,观察实验现象,分析原因2、修改源代码,使得四个灯依次循环点亮,或两个一组循环点亮(使用两种方式控制LED灯,一种通过对寄存器赋值方式,另一种通过固件函数调用方式)3、解释主函数中TimingDelay_Decrement的作用,delay()函数是一个死循环,程序通过什么方式从这个死循环中跳出来。4、在自己的U盘上新建工程添加各类文件,使得自己新建的工程文件能够正常编译(若不能正常编译找出原因),下载后验证实验现象与原始工程是否相同。实验设计思路(1)硬件电路设计在EduKit-M3实验平台上,LED1、LED2、LED3、LED4分别与PC6、PC7、PC8、PC9相连,按键Key与PB9相连。(2)软件程序设计方法一:直接通过寄存器控制管脚的高低电平1.通过设置GPIOB-ODR中第八位和第九位来控制PC8和PC9。2.通过设置GPIOF-ODR中第七位和第六位来控制PC6和PC7。3.用delay()来设置灯亮的长短。方法二:通过C函数控制管脚的高低电平1.直接用GPIO_SetBits()和GPIO_ResetBits()两个函数来直接设置四个位为0或1,从而控制四个灯的亮和灭。2.通过设置delay()中的值来控制灯亮的长短。3实验步骤与结果分析1.在编译下载成功之后可以看到LED和LED2两个灯依次闪烁,LED3和LED4两个依次闪烁。2.通过修改左边的代码,结果为右边的代码或者为之后编译、下载都能观察到四个灯依次循环点亮。3.TimingDelay_Decrement是为了作为延时用的函数,通过中断可以退出。4.在自己U盘上重新建立工程时,编译等方面会出现很多的错误,最后发现是由于在建立工程时没有配置好,才导致后面的错误。{GPIOB-ODR=0xfffffef;Delay(80);GPIOB-ODR=0xfffffdff;Delay(80);GGPPIIOOBB--OODDRR==00xxffffffffffccffff;;GPIOF-ODR=0xffffffbf;Delay(80);GPIOF-ODR=0xffffff7f;Delay(80);GPIOF-ODR=0xffffff3f;}{GPIOB-ODR=0xfffffeff;Delay(80);GPIOB-ODR=0xfffffdff;Delay(80);GPIOF-ODR=0xffffffbf;Delay(80);GPIOF-ODR=0xffffff7f;Delay(80);}temp=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8);if(temp==1){//GPIO_SetBits(GPIOB,GPIO_Pin_8);//Delay(80);//GPIO_ResetBits(GPIOB,GPIO_Pin_9);//Delay(80);}else{//GPIO_ResetBits(GPIOB,GPIO_Pin_8);//Delay(80);//GPIO_SetBits(GPIOB,GPIO_Pin_9);//Delay(80);}{GPIO_SetBits(GPIOB,GPIO_Pin_9);Delay(80);GPIO_ResetBits(GPIOB,GPIO_Pin_9);GPIO_SetBits(GPIOB,GPIO_Pin_8);Delay(80);GPIO_ResetBits(GPIOB,GPIO_Pin_8);GPIO_ResetBits(GPIOB,GPIO_Pin_9);GPIO_SetBits(GPIOB,GPIO_Pin_7);Delay(80);GPIO_ResetBits(GPIOB,GPIO_Pin_7);GPIO_SetBits(GPIOB,GPIO_Pin_6);Delay(80);GPIO_ResetBits(GPIOB,GPIO_Pin_6);GPIO_ResetBits(GPIOB,GPIO_Pin_7);}4实验结果分析:通过本次实验达到了我们熟悉MDK开发平台的使用方法,学会新建、编译、调试和下载工程。理解GPIO通用IO端口的配置和编程方法。理解IO端口高低电平与LED灯亮灭之间的关系的实验目的。5主要程序代码分析1.初始化函数GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOF,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化四灯为全亮GPIO_SetBits(GPIOB,GPIO_Pin_8);GPIO_SetBits(GPIOB,GPIO_Pin_9);GPIO_SetBits(GPIOF,GPIO_Pin_6);GPIO_SetBits(GPIOF,GPIO_Pin_7);2.Delay延时函数voidDelay(uint32_tnTime){TimingDelay=nTime;while(TimingDelay!=0);通过中断来实现延时}voidTimingDelay_Decrement(void){if(TimingDelay!=0x00){TimingDelay--;}}3.设置PC6~PC9函数6方法一:{GPIOB-ODR=0xfffffeff;/Delay(80);GPIOB-ODR=0xfffffdff;Delay(80);GPIOB-ODR=0xfffffcff;GPIOF-ODR=0xffffffbf;Delay(80);GPIOF-ODR=0xffffff7f;Delay(80);GPIOF-ODR=0xffffff3f;}方法二:{GPIO_SetBits(GPIOB,GPIO_Pin_9);Delay(80);GPIO_ResetBits(GPIOB,GPIO_Pin_9);GPIO_SetBits(GPIOB,GPIO_Pin_8);Delay(80);GPIO_ResetBits(GPIOB,GPIO_Pin_8);GPIO_ResetBits(GPIOB,GPIO_Pin_9);GPIO_SetBits(GPIOB,GPIO_Pin_7);Delay(80);GPIO_ResetBits(GPIOB,GPIO_Pin_7);GPIO_SetBits(GPIOB,GPIO_Pin_6);Delay(80);GPIO_ResetBits(GPIOB,GPIO_Pin_6);GPIO_ResetBits(GPIOB,GPIO_Pin_7);}7心得体会成绩评定教师签名:年月日8年级班级学号专业姓名题目名称实验二、TIMERx定时器实验实验设计要求了解TIMER定时器的配置方法,理解预分频系数Prescaler与计数时钟频率之间的关系,能分析出计数初值与计数时钟频率以及更新频率之间的关系。实验设计思路仿真软件程序设计1.通过配置TIMER定时器来实现刷新的频率,并且通过公式:T看门狗=1/(MCLK/(预分频值+1)/分频除法系数)来实现想要的刷新频率。2.因为的到的是刷新频率,所以最后的公式应用上有一点变化,如果想要的到一个1K的频率,那么刷新频率必须设置为2K。3.那么左后只要通过设置分频除法系数就能得到我们想要的频率。9实验步骤与结果分析1.通过编译、下载、仿真可以看到我们想要的结果图2-12.得到一个1K的仿真频率2.1因为得到的是更新频率,所以根据公式:计数初值CCRx_Val=TIM2计数时钟频率/更新频率所以有CCRx_Val=0X17002.2在工程中将对应的CCRx_Val值改为0X1770,然后编译、仿真、测频率,如图所示:图2-2实验结果分析:通过本次实验达到了开始的实验目的和要求,加强对TIMERx定时器的理解和使用,以及在仿真过程中学会了怎样应对出现的问题。10主要程序代码分析1.CCRx_Val的设置TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_OCInitTypeDefTIM_OCInitStructure;vu16CCR1_Val=0x1770;//CCRx_Val=TIM2计数时钟频率/更新频率vu16CCR2_Val=0x4000;vu16CCR3_Val=0x2000;vu16CCR4_Val=0x1000;ErrorStatusHSEStartUpStatus;2.计数时钟基础设置/*---------------------------------------------------------------TIM2Configuration:OutputCompareToggleMode:TIM2CLK=36MHz,Prescaler=0x2,TIM2counterclock=12MHzCC1updaterate=TIM2counterclock/CCR1_Val=2KHzCC2updaterate=TIM2counterclock/CCR2_Val=732.4HzCC3updaterate=TIM2counterclock/CCR3_Val=1464.8HzCC4updaterate=TIM2counterclock/CCR4_Val=2929.6Hz---------------------------------------------------------------*//*Timebaseconfiguration*/TIM_TimeBaseStructure.TIM_Period=0xFFFF;TIM_TimeBaseStructure.TIM_Prescaler=0x02;TIM_TimeBaseStructure.TIM_ClockDivision=0x0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);3.仿真管脚设置#defineTIM_IT_Update((u16)0x0001)#defineTIM_IT_CC1((u16)0x0002)#defineTIM_IT_CC2((u16)0x0004)#d
本文标题:嵌入式技术及应用实验报告(中南民族大学)
链接地址:https://www.777doc.com/doc-7104029 .html