嵌入式实验报告(共25页).doc
精选优质文档-倾情为你奉上嵌入式实验报告学 院:信息工程学院 专 业:计算机科学与技术 班 级: 计算机班 姓 名: 学 号: 指导老师: 专心-专注-专业实验目录2693实验一 嵌入式系统开发环境实验【实验目的】1. 熟悉RealView MDK集成开发环境以及使用方法。2. 熟悉嵌入式系统软件设计方法和流程。【实验内容】1.通过例程熟悉、掌握嵌入式系统的编辑、编译、调试、下载及运行过程。2.建立自己的工程文件,在开发板板上调试程序。【实验步骤】(一)程序安装1.建议在安装之前关闭所有的应用程序,双击安装文件,弹出如图对话框,Next2.默认选择C盘文件下安装。3.这样就在c盘底下出现keil文件夹。4.单击选择菜单“File”->"License Management" 将弹出下面一张图的界面:复制其中CID号,以便在粘贴到下一步中的破解软件。5. 复制CID6. 运行破解软件,将出现下面一张图的界面,把上步复制的CID号粘贴到相应位置,其他选项如图,然后点击“Generate”按钮,然后复制产生的序列号,粘贴到上一步的下面一张图的LIC输入框中,然后点击右侧的Add LIC,即可完成破解。7. 安装文件夹中的jlink驱动。(二) 工程创建、编译使用Realview MDK创建、完成一个新的工程只需要以下几个环节:创建工程并选择处理器选择工具集创建源文件配置硬件选项配置对应启动代码编译链接下载调试。1.创建工程并选择处理器选择ProjectNew Project,输入创建的新工程的文件名,即可创建一个新的工程。2.创建一个新工程时,需要为工程选择一款对应处理器,在NXP 列表下选择LPC1768 芯片。然后点击OK。接下来出现的对话框选择“是或者也可以通过单击ProjectSelect Device for Target在本次课程中,我们选择3.点击上图的ok,在弹出的对话框中确定是否需要复制启动文件选择否,如果选择是,将使用keil自带的启动文件4. 在工程区域单击鼠标右键,选择manage components5.在“Project Components”标签下根据需要建立目录,第一栏是工程的根目录,在这里可以修改目录名;第二栏是添加Groups,可以根据个人习惯建立不同的组来分别放置不同类型的文件;第三栏是为建立的组添加代码文件用的,点击“Add Files”添加。6.在startup文件夹里添加文件夹中的在CMSIS-CORE文件夹里添加 件夹中的7.新项目建完后,Keil Vision环境中项目窗口显示见图下面开始创建源文件。8.新建一个文件,点击File 菜单下的New。输入代码,点击保存9. 接下来右键点击左侧source下拉菜单的Add File to Group将我们刚刚新建的文件添加到工程。出现添加对话框后选择已有的C 程序源文件,然后点击Add,就可以点击Add 下面的Close 了下面开始对工程进行配置。10.选择“project”下的“options for Target joy”选项11.单击菜单项ProjectOptions for Target,在弹出的Target页面中可指定目标硬件和所选择设备片内组件的相关参数,处理器配置对话框如下12. Output(输出选项)设置,选择创建扩展名为HEX,选择HEX文件保存位置,建议保存在项目所在的文件夹下。13.Debug(调试选项)设置,硬件仿真“Use:14. 点击上图硬件仿真处的settings按钮,则会弹出下图中的仿真硬件设置界面,如果连接成功,则会弹出硬件相关信息。注意到此处:板载一个USB仿真器,支持仿真调试、下载等功能。使用方法跟JLINK一样(JLINK全兼容),开发板断开后内带的仿真器可以作为通用调试仿真开发工具使用。JP4 是仿真器选择控制脚,当JP4开路时选择板载仿真器连接LPC1768的JTAG口,当JP4短路时选择外部仿真器连接JTAG口外部仿真,切换功能必须要断电后再上电才生效。所以请确认JP4开路。15.Utilities(工具选项)设置【实验现象】 建一个工程后,以系统节拍定时器实验,进行测试,将程序下载到开发板上之后,关闭开发板开关,然后打开,可以听见蜂鸣器每一秒钟会响一次。说明嵌入式开发环境建立的正确。【实验心得和体会】 通过这次实验我们大致掌握RealView MDK集成开发环境以及使用方法。通过例程大致熟悉、掌握嵌入式系统的编辑、编译、调试、下载及运行过程。实验二 系统节拍定时器实验 【实验目的】 (1)掌握LPC1768芯片的使用(2)在开发平台上开发第一个程序(3)熟悉lpc1768的GPIO控制【实验内容】控制开发平台的蜂鸣器周期性(1秒)交替鸣叫。【实验原理】【原理图】【实验步骤】 1使用Realview MDK创建一个新的工程,经过一系列配置后 2新建一个文件,点击File 菜单下的New。输入代码,点击保存 3 对工程进行配置完成以后,编译、链接、下载到开发板上程序代码#include "LPC17xx.h"/* 宏定义*/#define BEEP (1ul <<26)uint32_t GulSystick = 0;uint32_t GucDelay1S = 0;/* Function name: myDelay* Descriptions: 软件延时* input parameters: 无* output parameters: 无* Returned value: 无*/void myDelay (uint32_t ulTime)/ / uint32_t i; /while (ulTime-) / for (i = 0; i < 5000; i+); /* Function name: GPIOInit* Descriptions: GPIO初始化* input parameters: 无* output parameters: 无* Returned value: 无*/void GPIOInit( void ) LPC_PINCON->PINSEL1 &= (0x3 << 20); /* 将P0.26初始化为GPIO功能 */ LPC_GPIO0->FIODIR |= BEEP; /* 将P0.26方向设置为输出 */ LPC_GPIO0->FIOSET |= BEEP; /* 将P0.26初始化输出高电平 */* Function name: SysTick_Handler* Descriptions: 系统节拍定时器中断服务函数* input parameters: 无* output parameters: 无* Returned value: 无*/void SysTick_Handler(void) if (GulSystick+ >= 99) /* 配置一秒的延时 */ GulSystick = 0; GucDelay1S = 1; /* Function name: main* Descriptions: 系统节拍定时器例程。短接P0.26与BEEP,启动程序,蜂鸣器隔1秒交替鸣叫* input parameters: 无* output parameters: 无* Returned value: 无*/int main (void) SystemInit(); /* 系统初始化,切勿删除 */ GPIOInit(); SysTick_Config(/100); while (1) while(GucDelay1S = 0); GucDelay1S = 0; LPC_GPIO0->FIOSET |= BEEP; while(GucDelay1S = 0); GucDelay1S = 0; LPC_GPIO0->FIOCLR |= BEEP; 引脚功能选择寄存器1(PINSEL1 - 0x4002 C004) PINSEL1寄存器控制端口0高半部分的位功能。仅当引脚选择使用GPIO功能时,FIO0DIR寄存器中的方向控制位才有效。对于其它功能来说,方向是自动控制的。对于100引脚封装,引脚功能选择寄存器1的位功能描述如表所述。 【实验现象】 将程序下载到开发板上之后,关闭开发板开关,然后打开,可以听见蜂鸣器每一秒钟会响一次。【实验心得和体会】 通过这次实验我们大致掌握LPC1768芯片的使用,熟悉了lpc1768的GPIO的控制。学会配置引脚功能寄存器PINSEL,当引脚配置为GPIO功能时,GPIO的方向位有效。实验三 GPIO控制实验【实验目的】1、 学习LPC系列处理器GPIO口的使用方法;2、 学习用Keil软件开发ARM程序方法和步骤。3、 理解基于ARM内核的LPC1768实验开发平台的管脚链接及原理。【实验要求】1、 了解LPC系列处理器GPIO口的功能原理;2、 在Keil中设计ARM程序,实现对流水灯的控制;3、 下载到实验平台,并成功运行。4、 附加要求:实现LED的各种不同移动、闪烁效果【实验内容操作步骤】1、启动keil新建工程。2、新建C源文件,添加到工程,编写C文件。3、配置生成目标。4、编译连接工程。5、JTAG调试。【实验原理】1、 LPC系列处理器GPIO口的原理PINSEL(x) 管脚功能选择寄存器IOPIN() GPIO引脚值寄存器IOSET() GPIO输出置位寄存器IODIR() GPIO方向控制寄存器 IOCLR() GPIO输出清零寄存器2、实验电路原理图实验电路的连接如下图,4个LED是利用LPC1368的GPIO口的P1.14到P1.17来控制的。引脚输出高电平则LED点亮,输出低电平则LED熄灭(因为LED的另一端接地)。对管脚的操作实际上就是对控制管脚寄存器的操作,所以可以通过对管脚寄存器的操作,实现管脚的不同输出(即高低电平),从而控制LED的状态(亮、灭)。程序代码#include "LPC17xx.h"volatile uint32_t msTicks; /* counts 1ms timeTicks */void SysTick_Handler(void) msTicks+; /* increment counter necessary in Delay() */_INLINE static void Delay (uint32_t dlyTicks) uint32_t curTicks; curTicks = msTicks; while (msTicks - curTicks) < dlyTicks);_INLINE static void LED_Config(void) LPC_GPIO2->FIODIR = 0xff; /* LEDs PORT2 are Output */ / LPC_GPIO0->FIODIR = 0x; / LPC_GPIO0->FIOPIN |= 0x; /*- Switch on LEDs *-*/_INLINE static void LED_On (uint32_t led) LPC_GPIO2->FIOPIN |= (led); /* Turn On LED */*- Switch off LEDs *-*/_INLINE static void LED_Off (uint32_t led) LPC_GPIO2->FIOPIN &= (led); /* Turn Off LED */*- MAIN function *-*/int main (void) uint8_t location; if (SysTick_Config(SystemCoreClock / 1000) /* Setup SysTick Timer for 1 msec interrupts */SystemCoreClock while (1); /* Capture error */ LED_Config(); while(1) LED_On (0xff);Delay (500);LED_Off(0xff); for(location=0;location<8;location+) LED_On (1<<location); /* Turn on the LED. */ Delay (100); /* delay 100 Msec */ LED_Off (1<<location); /* Turn off the LED. */ Delay (100); /* delay 100 Msec */ 【实验现象】将这个程序下载到开发板上调试之后,可以看到led灯从第一个开始到第八个依次点亮,就像是流水一般。【实验心得和体会】通过此次试验,学习了LPC系列处理器GPIO口的使用方法,了解LPC系列处理器GPIO口的功能原理;实验成功看到流水灯现象,对原理做出了验证;通过实验理解了基于ARM内核的LPC1768实验开发平台的管脚链接及原理。实验四 外部中断实验【实验目的】1、 掌握NVIC的设置。2、 掌握外部中断引脚功能设置级外部中断工作模式设置。3、了解中断服务函数的编写。【实验要求】4、了解LPC系列处理器外部中断的功能原理;5、 在Keil中设计ARM程序,实现外部中断;6、 按压INT0键(SW2)每按一次LED灯将左移一位【操作步骤】1、启动keil新建工程。2、新建C源文件,添加到工程,编写C文件。3、配置生成目标。4、编译连接工程。5、JTAG调试。【实验原理】程序代码#include "lpc17xx.h"volatile uint32_t eint0_counter = 0;uint32_t count = 0;uint32_t i = 0;/* * 函数名称 :void EINT0_IRQHandler (void) * 函数功能 : 外部中断0函数入口 * 入口参数 : 无 * 出口参数 : 无 * 备 注 :无 */void EINT0_IRQHandler (void) LPC_SC -> EXTINT = 1; /* 清中断 */ count = eint0_counter%8 ; i = 1 << count; LPC_GPIO2->FIOSET = i; /*点亮灯第i个灯*/ LPC_GPIO2->FIOCLR = i; /*熄灭第i个灯之外的灯*/ eint0_counter+; /* 计数值加1 */* * 函数名称 :uint32_t EINTInit( void ) * 函数功能 : 外部中断0初始化函数 * 入口参数 : 无 * 出口参数 : 返回TURE或FALSE * 备 注 :如果是返回false则说明中断入口函数没有在中断向量表中建立 */uint32_t EINTInit( void ) LPC_PINCON -> PINSEL4 = 0x; /*将P2.10脚设置为EINT0即第二功能 */ LPC_GPIOINT -> IO2IntEnF = 0x200; /* 设置为下降沿触发 */ LPC_SC -> EXTMODE = 1; /* 外部中断模式选择为边沿触发 */ LPC_SC -> EXTPOLAR = 0; /* 外部中断1极性设置,此处选默认的低电平或下降沿 */ NVIC_EnableIRQ(EINT0_IRQn); /* 使能外部中断0 */ return( 1 );/* * 函数名称 :void PortInit(void) * 函数功能 : 端口初始化 * 入口参数 : 无 * 出口参数 : 无 * 备 注 :无 */void PortInit(void) LPC_PINCON->PINSEL4 &= 0xCCCC; /*将P2.0P2.7初始化为GPIO功能 */ LPC_GPIO2->FIODIR |= 0xFF; /* 将P2.0P2.7方向设置为输出 */ LPC_GPIO2->FIOCLR |= 0xFF; /* 关闭所有的灯 */* * 函数名称 :int main(void) * 函数功能 : 主函数 * 入口参数 : 无 * 出口参数 : 无 * 备 注 :无 */int main(void) SystemInit(); /* 系统初始化,函数在system_LPC17xx.c文件夹中定义 */ /* 在core_cm3.h中定义*/ PortInit(); /* 端口初始化 */ EINTInit(); while(1);【实验现象】 将程序下载到开发板上之后,按压INT0按键,每按一次led灯就往左移动,即按第一下的时候第一个led灯亮,按第二个第二个的时候,第二个亮,当第八个灯亮的时候,再按一下第一灯就会点亮。【实验心得和体会】通过本次实验进行了NVIC的设置并理解掌握;掌握了外部中断引脚功能设置及外部中断工作模式设置。本次实验的核心是中断服务函数的编写,所以会得到实验操作现象实验五 串口通讯实验【实验目的】1、学习LPC1768处理器UART的使用方法;2、学习用Keil软件开发ARM程序方法和步骤。3、了解PC机上超级终端在串口通讯中的使用。【实验要求】1、了解LPC系列处理器UART的功能原理;2、在Keil中设计ARM程序,实现串口通讯;3、串口接收与发送字符。 串口发送字符串【操作步骤】1、启动keil新建工程。2、新建C源文件,添加到工程,编写C文件。3、配置生成目标。4、编译连接工程。5、JTAG调试。【实验原理】1、LPC系列处理器UART的寄存器 RBR 接收缓冲 THR 发送缓冲 IER 中断使能 IIR 中断ID FCR FIFO控制 LCR 线控制 LSR 线状态 SCR 高速缓存 DLL 除数LSB DLM 除数MSB2、实验电路原理图实验电路的连接如下图。程序代码#include<LPC17XX.h> #define FOSC / 振荡器频率 #define FCCLK (FOSC * 8) / 主时钟频率<=100Mhz FOSC的整数倍 #define FPCLK (FCCLK / 4) / 外设时钟频率,FCCLK的1/2、1/4 或与FCCLK相同 int m; /接收到的数据void Uart2Init(uint32_t bps) LPC_SC->PCONP |= (1<<24); /打开UART2电源控制位 LPC_PINCON->PINSEL0 = 0X; /P0.10 P0.11设置为串口 LPC_UART2->LCR = 0x83; /设置串口数据格式,8位字符长度,1个停止位,无校验,使能访问除数锁存器 ,设定波特率 LPC_UART2->DLM = (FPCLK/16)/bps) / 256; /除数高八位 , 没有小数情况 LPC_UART2->DLL = (FPCLK/16)/bps) % 256; /除数第八位 LPC_UART2->LCR = 0x03; /禁止访问除数锁存器,锁定波特率 LPC_UART2->IER = 0x01; /使能接收中断 NVIC_EnableIRQ(UART2_IRQn); / 使能UART2中断通道 int Uart2RecvByte(void) while(!(LPC_UART2->LSR) & 0x01); /等待判断LSR0是否是1,1时表示RBR中接收到数据 return(LPC_UART2->RBR); /读取接收数据 int Uart2SendByte(int buf) while(!(LPC_UART2->LSR) & 0x20); /等待判断LSR5(即THRE)是否是1,1时表示THR中为空 LPC_UART2->THR = buf; /发送数据 return 0; void UART2_IRQHandler(void) m =Uart2RecvByte(); /读取接收数据 Uart2SendByte(m); /发送接收到的数据 int main(void) SystemInit(); Uart2Init(); while(1); 【实验现象】 将程序下载到开发板上以后,打开电脑桌面的串口调试助手,在下面的编辑栏里敲上几个字符,点击发送,就可以看到串口调试助手上面的方框里出现了你在下方敲的字符。【实验心得和体会】 通过本次实验我们学习LPC1768处理器UART的使用方法;学习用Keil软件开发ARM程序方法和步骤。了解PC机上超级终端在串口通讯中的使用。关于串口的配置主要涉及到引脚的配置,波特率的配置,帧格式的设置及FIFO设置。此次实验进行了串口的接收与发送字符,及发送字符串,均能在串口调试助手上成功实现。