欢迎来到东东文档网!

GPIO实验报告19篇

文章来源:网友投稿 时间:2022-11-15 15:40:03

GPIO实验报告19篇GPIO实验报告  院专年学姓  系:计算机科学学院业:级:号:名:自动化11级11064029杨胜提刘科  指导教师:  2013年  5月  8日 下面是小编为大家整理的GPIO实验报告19篇,供大家参考。

GPIO实验报告19篇

篇一:GPIO实验报告

  院专年学姓

  系:计算机科学学院业:级:号:名:自动化11级11064029杨胜提刘科

  指导教师:

  2013年

  5月

  8日

  1

  年级专业题目名称实验设计要求

  11级自动化

  班级

  11级自动化一班

  学号姓名

  11064029杨胜提

  实验一、GPIO实验

  控制EduKit-M3实验平台的发光二极管LED1、LED2、LED3、LED4,使它们有规律的点亮,具体顺序如下:LED1亮->LED2亮->LED3亮->LED4亮,如此反复,当按下EduKit-M3实验平台上的Key按钮时,灯全部熄灭,2秒钟后发光二极管全部点亮,再过一秒钟后返回被中断前的状态,有规律的依次点亮。

  1、硬件电路设计

  在EduKit-M3实验平台上,LED1、LED2、LED3、LED4分别与PC6、PC7、PC8、PC9相连,按键Key与PB9相连。

  2、软件程序设计

  (1)配置PB口第9个引脚作为外部中断,下降延触发;(2)读取端口数据输出寄存器GPIOC_ODR[15:0]的值,因为C口[9:6]位和四个LED灯连通。(3)初始化时,LED依次点亮,当按下Key键时产生中断;(4)中断服务子程序内容:灯全部熄灭,2秒钟后发光二极管全部点亮,再过1秒钟后中断返回。整个工程包含3个源文件:STM32F10x.s、stm32f10x_it.c和main.c,其中STM32F10x.s为启动代码,所有中断服务子程序均在stm32f10x_it.c中,其它函数则在main.c中。

  实验设计思路

  2

  实验步骤与结果分析

  运行过程(1)使用KeiluVision3通过ULINK2仿真器连接EduKit-M3实验平台,打开实验例程目录GPIO_TEST子目录下的GPIO.Uv2例程,编译链接工程;(2)选择软件调试模式,点击MDK的Debug菜单,选择Start/StopDebugSession项或Ctrl+F5键,在逻辑分析仪中添加GPIOC_ODR.6、GPIOC_ODR.7、GPIOC_ODR.8、GPIOC_ODR.9,点击Run按钮即可在逻辑分析仪中看到如图7-11;(3)选择硬件调试模式,选择Start/StopDebugSession项或Ctrl+F5键,下载程序并运行,观察LED灯的变化情况;当程序运行在while循环体内时,按Key键,程序进入中断服务子程序EXTI9_5_IRQHandler(),单步运行,观察LED的变化情况。(4)退出Debug模式,打开Flash菜单>Download,将程序下载到EduKit-M3实验平台的Flash中,按RESET键复位,观察LED灯的情况,正常情况应如下。LED灯状态1LED1LED2亮灭灭亮灭灭灭灭灭灭亮亮LED灯状态2LED1LED2亮灭亮亮亮亮亮亮灭灭亮亮说LED3灭灭亮灭灭亮LED4灭灭灭亮灭亮明

  程序正常运行,发光二极管依次点亮

  外部信号输入,发生中断,执行中断处理程序

  说LED3灭灭亮亮灭亮LED4灭灭灭亮灭亮

  明

  程序正常运行,发光二极管依次点亮

  外部信号输入,发生中断,执行中断处理程序

  3

  软件程序设计

  1、配置PB口第9个引脚作为外部中断,下降延触发;/*ConfigurePB9asinputfloating(EXTILine9)*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//引脚选择GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//输入模式选择GPIO_Init(GPIOB,&GPIO_InitStructure);2、读取端口数据输出寄存器GPIOC_ODR[15:0]的值,因为C口[9:6]位和四个LED灯连通。方法一:/*ConfigurePC.asOutputpush-pull*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;//与LED灯连通的引脚选择GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置输出引脚的速度GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置输出引脚的模式为推挽输出模式GPIO_Init(GPIOC,&GPIO_InitStructure);方法二:利用端口配置低寄存器(GPIOx-CRL)(x=A..E)和端口配置高寄存器(GPIOx-CRH)(x=A..E)GPIOC_CRL=0xcc444444;GPIOC_CRH=0x444444cc;

  主要程序代码分析

  3、初始化时,LED依次点亮,当按下Key键时产生中断;/*ConfigureEXTILine9togenerateaninterruptonfallingedge*/EXTI_InitStructure.EXTI_Line=EXTI_Line9;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

  4

  EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);4、LED依次点亮的子程序for(;;){GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);GPIO_SetBits(GPIOC,GPIO_Pin_6);算法1

  GPIOC->ODR&=0xfffffc4f;置底

  //1

  高16位保留,全为F,底16位相应置高或

  /*Delay(800);GPIOC->ODR&=0xfffffc0f;GPIOC->ODR|=0x00000cc0;//2Delay(800);GPIOC->ODR&=0xfffffc0f;GPIOC->ODR|=0x00000dc0;//3Delay(800);GPIOC->ODR&=0xfffffc0f;GPIOC->ODR|=0x00000fc0;//4Delay(800);算法2GPIO_ResetBits(GPIOC,GPIO_Pin_6);//使Pin_6置低Delay(800);GPIO_SetBits(GPIOC,GPIO_Pin_6);//使Pin_6置高Delay(100);GPIO_ResetBits(GPIOC,GPIO_Pin_7);Delay(800);GPIO_SetBits(GPIOC,GPIO_Pin_7);Delay(100);GPIO_ResetBits(GPIOC,GPIO_Pin_8);Delay(800);GPIO_SetBits(GPIOC,GPIO_Pin_8);Delay(100);GPIO_ResetBits(GPIOC,GPIO_Pin_9);Delay(800);

  5

  GPIO_SetBits(GPIOC,GPIO_Pin_9);Delay(100);}//

  使用这两个函数对引脚进行配置。

  (写不完时,可调整表结构。)

  6

  (这部分内容要手写)心得体会

  成绩评定

  教师签名:年月日

  7

  

篇二:GPIO实验报告

  美创作

  实验四GPIO输入实验之迟辟智

  一、实验目的

  1、能够使用GPIO的输入模式读取开关信号.

  2、掌握GPIO相关寄存器的用法和设置.

  3、掌握用C语言编写法式控制GPIO.二、实验环境PC机一台

  ADS1.2集成开发环境一套

  EasyARM2131教学实验平台一套

  三、实验内容

  1.实验通过跳线JP8连接,法式检测按键KEY1的状态,控

  制蜂鸣器BEEP的鸣叫.按下KEY1,蜂鸣器鸣叫,松开后

  停止蜂鸣.(调通实验后,改为KEY3键进行输入).

  2.当检测到KEY1有按键输入时点亮发光二极管LED4并控

  制蜂鸣器响,软件延时后关失落发光管并停止蜂鸣,然后

  循环这一过程直到检测按键没有输入.(键输入改为键

  KEY4,发光管改为LED6).

  3.结合实验三,当按下按键Key1时,启动跑马灯法式并控制蜂鸣器响,软件延时后关失落发光管并停止蜂鸣,然后循环这一过程直到检测按键再次按下.

  四、实验原理当P0口用于GPIO输入时(如按键输入),内部无上

  拉电阻,需要加上拉电阻,电路图拜会图4.2.进行GPIO输入实验时,先要设置IODIR使接口线成为

  输入方式,然后读取IOPIN的值即可.图4.2按键电路原理图

  实验通过跳线JP8连接,法式检测按键KEY1的状态,控制蜂鸣器BEEP的鸣叫.按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣.在这个实验中,需要将按键KEY1输入口P0.16设为输入口而蜂鸣器控制口P0.7设置为输出口.蜂鸣器电路如图4.3所示,当跳线JP6连接蜂鸣器时,P0.7控制蜂鸣器,低电平时蜂鸣器鸣叫.LED灯电路如图4.4所示,低电平时灯亮.

  图4.3蜂鸣器控制电路图4.4LED控制电路法式首先设置管脚连接寄存器PINSEL0和PINSEL1,设置P0.16为输入,设置为输出.然后检测端口P0.16的电平,对

  进行相应的控制,流程图如图4.5所示,实现法式见法式清单

  4.1.图4.5按键输入实验流程图

  五、实验步伐、源代码及调试结果内容1

  实验步伐①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_key.②在user组里编写主法式代码main.c.③选用DebugInFLASH生成目标,然后编译链接工程.④将EasyARM教学实验开发平台上的相应管脚跳线短接.⑤选择Project->Debug,启动AXD进行JLINK仿真调试.⑥全速运行法式,法式将会在main.c的主函数中停止.如

  下图所示:⑦单击ContextVariable图标按钮(或者选择ProcessorViews->Variables)翻开变量观察窗口,通过此窗口可以观察局部变量和全局变量.选择SystemViews>DebuggerInternals即可翻开LPC2000系列ARM7微控制器的片内外寄存器窗口.

  通过变量窗口可以观察变量BEEP、KEY1等的值和ARM7

  微控制器的片内外寄存器窗口.如下图所示:

  ⑧可以单步运行法式,先按下Key1,观察IO0PIN寄存器

  的值,然后断开Key1,观察IO0PIN寄存器的值.可以设

  置/取消断点;或者全速运行法

  式,停止法式运行,观察变量

  的值,判断蜂鸣器控制是否正

  确.如下图所示:

  图4.6未按下Key1时IO0PIN

  的值

  图4.7按下Key1时IO0PIN的值

  由上两图可知,当按下Key1时,IO0PIN寄存器的第16位由

  1酿成0(F酿成E),key1与P,按下Key1时,1酿成0,

  寄存器值变动,蜂鸣器响,说明控制是正确的.

  现象描述:按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣.

  源代码:

  #include"config.h"constuint32BEEP=1<<7;//P0.7控制蜂鸣器constuint32KEY1=1<<16;//P0.16连接KEY1(改为KEY3时,只需“constuint32KEY1=1<<16”改为“constuint32KEY3=1<<18”,其余不变.)

  /*********************************************************************************************函数名称:main()**函数功能:GPIO输入实验测试.**检测按键KEY1.KEY1按下,蜂鸣器蜂鸣,松开后停止蜂鸣.**跳线说明:把JP8的KEY1跳线短接,JP11连接蜂鸣器.*******************************************************************************************/intmain(void){PINSEL0=0x00000000;//所有管脚连接GPIOPINSEL1=0x00000000;IO0DIR=BEEP;//蜂鸣器控制口输出,其余输入while(1){if((IO0PIN&KEY1)==0)IO0CLR=BEEP;//如果KEY1按下,蜂鸣器鸣叫elseIO0SET=BEEP;//松开则停止蜂鸣}return0;}内容二

  实验步伐①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_key.②在user组里编写主法式代码main.c.③选用DebugInFLASH生成目标,然后编译链接工程.④将EasyARM教学实验开发平台上的相应管脚跳线短接.⑤选择Project->Debug,启动AXD进行JLINK仿真调试.

  ⑥全速运行法式,法式将会在main.c的主函数中停止.如下图所示:⑦单击ContextVariable图标按钮(或者选择ProcessorViews>Variables)翻开变量观察窗口,通过此窗口可以观察局部变

  量和全局变量.选择SystemViews->DebuggerInternals即可翻

  开LPC2000系列ARM7微控制器的片内外寄存器窗口.

  通过变量窗口可以观察变量BEEP、KEY1等全局变量、i

  等本地变量和ARM7微控制器的片内外寄存器窗口.如下图

  所示:

  左图所示为ARM7微控制器的片内寄存器窗口.

  图4.9本地变量图4.8全局变量

  ⑧可以单步运行法式,先

  按下Key1,观察IO0PIN寄存器的值,然后断开Key1,观察IO0PIN寄存器的值.可以设置/取消断点;或者全速运行法式,停止法式运行,观察变量的值,判断蜂鸣器控制是否正确.如下图所示:

  .图未按下KEY1时

  IO0PIN的值图4.11按下KEY1后IO0PIN的值

  比较图4.10和4.11,发现按下KEY1后,IO0PIN寄存器的第16位由1酿成0;而KEY,当按下时输入低电平,这说明KEY1的控制是正确的.

  上图所示为运行“IO0CLR=BEEP”后IO0PIN寄存器的值,与图4.10比较,发现第8位由1酿成0,BEEP对应P,这说明BEEP的控制是对的.现象描述:当按下KEY1时,蜂鸣器鸣响,LED4亮;当松开

  KEY1后,蜂鸣器静音,LED4灭.源代码如下:

  #include"config.h"constuint32BEEP=1<<7;//P0.7控制蜂鸣器constuint32KEY1=1<<16;//P0.16连接KEY1(改为KEY4按键时,只需把上句代码改为“constuint32KEY4=1<<19”,其余不变)constuint32LEDS4=1<<21;//P1[21]控制LED4,低电平点亮(改为LED6时,只需把上句代码改为“constuint32LED6=1<<23”,其余不变.)

  /*****************************************************************************函数名称:main()**函数功能:GPIO输入实验测试.**检测按键KEY1.KEY1按下,蜂鸣器蜂鸣,松开后停止蜂鸣.**跳线说明:把JP8的KEY1跳线短接,JP11连接蜂鸣器.

  *******************************************************************************************/intmain(void){Uint32i;PINSEL0=0x00000000;//所有管脚连接GPIOPINSEL1=0x00000000;IO0DIR=BEEP;//蜂鸣器控制口输出0IO1DIR=LEDS4;//设置LED4灯亮while(1){if((IO0PIN&KEY1)==0)for(i=0;i<1000;i++);//软件延时

  {IO0CLR=BEEP;//如果KEY1按下,蜂鸣器鸣叫IO1DCLR=LEDS4;//设置LED4灯亮}else{IO0SET=BEEP;//松开则停止蜂鸣IO1SET=LEDS4;//设置LED4灯灭

  }for(i=0;i<1000;i++);//软件延时

  }return0;}内容三实验步伐

  ①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_key.

  ②在user组里编写主法式代码main.c.③选用DebugInFLASH生成目标,然后编译链接工程.④将EasyARM教学实验开发平台上的相应管脚跳线短接.⑤选择Project->Debug,启动AXD进行JLINK仿真调试.⑥全速运行法式,法式将会在main.c的主函数中停止.如下图所示:⑦单击ContextVariable图标按钮(或者选择Processor

  Views->Variables)翻开变量观察窗口,通过此窗口可以观察局部变量和全局变量.选择SystemViews>DebuggerInternals即可翻开LPC2000系列ARM7微控制器的片内外寄存器窗口.

  通过变量窗口可以观察变量BEEP、KEY1等的值和ARM7微控制器的片内外寄存器窗口.如下图所示:

  ⑧可以单步运行法式,先按下Key1,观察IO0PIN寄存器的值,然后断开Key1,观察IO0PIN寄存器的值.可以设置/取消断点;或者全速运行法式,停止法式运行,观察变量的值,判断蜂鸣器控制是否正确.如下图所示:1时IO0PIN的值1时IO0PIN

  的值由上两图可知,当按下Key1时,IO0PIN寄存器的第16位由1酿成0(F酿成E),key1与P,按下Key1时,1酿成0,寄存器值变动,蜂鸣器响,流水灯亮,说明控制是正确的.现象描述:当按下按键KEY1时,蜂鸣器鸣响,流水灯亮;松开后,蜂鸣器静音,流水灯灭.源代码如下:#include"config.h"constuint32BEEP=1<<7;//P0.7控制蜂鸣器constuint32KEY=1<<16;//P0.16连接KEY1constuint32LEDS8=0xFF<<18;//P1[25:18]控制LED8~LED1,低电平点亮voidDelayNS(uint32dly){uint32i;

  for(;dly>0;dly--){

  for(i=0;i<50000;i++);}}/*********************************************************************************************函数名称:liushuideng()**函数功能:流水灯显示实验.**调试说明:连接跳线JP12至LED8~LED1.

  *******************************************************************************************//*流水灯花样,低电平点亮,注意调用时候用了取反把持*/

  constuint32LED_TBL[]={0x00,0xFF,//全部熄灭后,再全部点亮0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,//依次逐个点亮0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,//依次逐个叠加0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,//依次逐个递加0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,//两个靠拢后分开0x81,0xC3,0xE7,0xFF,0xFF,0xE7,0xC3,0x81//从两边叠加后递加

  };intliushuideng(void){uint8i;PINSEL1=0x00000000;//设置管脚连接GPIOIO1DIR=LEDS8;//设置LED控制口为输出

  while(1){for(i=0;i<42;i++){/*流水灯花样显示*/

  IO1SET=~((LED_TBL[i])<<18);DelayNS(20);IO1CLR=((LED_TBL[i])<<18);DelayNS(20);}}return0;}//主函数

  intmain(void){uint32i;PINSEL0=0x00000000;//所有管脚连接GPIO

  PINSEL1=0x00000000;IO0DIR=BEEP;//蜂鸣器控制口输出0

  while(1){if((IO0PIN&KEY)==0){for(i=0;i<1000;i++);//软件延时

  {IO0CLR=BEEP;//如果KEY按下,蜂鸣器鸣叫

  liushuideng();}}else{

  IO0SET=BEEP;//松开则停止蜂鸣

  IO1SET=LEDS8;}for(i=0;i<100;i++);//软件延时

  }return0;}六、思考题1、如果将P0.30设置为GPIO输入模式,且管脚悬空,那么

  读取P0.30获得的值是0还是1?或者是不确定?当管脚悬空时,该管脚有可能是高电平也有可能是低电平.读

  取IO0PIN的值其实不能确定管教的值.有时管脚是高电平,读取到的纷歧定是高电平.2、如果需要读取以后P0.7的输出值(不是管脚上的电平),如何实现?

  将该管脚与一个LED连接,若LED亮,则输出值为0,否则

  为1.

  

篇三:GPIO实验报告

  gpio口被用作第二功能时的配置情况即并非作为通用io口使用比如像片上外设的的iic模块对应的数据线和时钟线使用时候要外接上拉电阻

  GPIO实验报告

  齐鲁理工学院实验报告课程名称:微型计算机控制技术时间:20XX年.10.22地点:D203班级:20XX年级机制3班姓名:杨帆学号:*****4实验项目名称:GPIO端口实验实验指导教师:赵保华实验成绩评定:一、实验目的ü通过实验掌握ARM芯片使用GPIO端口。ü掌握GPIO端口控制LED显示。ü掌握系统时钟的配置。ü掌握库开发原理及方法。二、实验设备ü通过实验掌握ARM芯片使用GPIO端口。ü掌握GPIO端口控制LED显示。ü掌握系统时钟的配置。ü掌握库开发原理及方法。三、实验内容控制信盈达Cotex-M3实验平台的发光二极

  1/6

  管LED1、LED2、LED3、LED4,使它们有规律的点亮,具体顺序如下:LED1亮-LED2亮-LED3亮-LED4亮,如此反复。

  四、实验原理如图所示,LED1-4分别与PB5PE5PA5PA6相连,通过PB5PE5PA5PA6引脚的高低电平来控制发光二极管的亮与灭。当这几个管脚输出高电平的时候发光二极管熄灭,反之,发光二极管点亮。

  GPIO管脚的每个位可以由软件配置成如下几种模式:1.输入浮空:浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。做按键,是要读取电平状态,这种配置抗干扰性差,但是是处理信号方面一般是配置这个功能。如测试一个波形,这时候可以配置这个功能。2.输入上拉:经过电阻连接到VCC,能让IO口在没有连接信号时候有一个确定的高电平,并且也能从VCC处获得比较大的驱动电流。3.输入下拉:经过电阻连接到GND,能让IO口在没有连接信号时候有一个确定的低电平。4.模拟输入:芯片内部外设专用功能(ADC,DAC对应的IO口功能)5.开漏输出:IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。6.推挽式输出:IO输出0接GND,IO输出1接VCC,

  2/6

  拥有比较强的驱动能力,如接led,或三极管。7.推挽式复用功能:GPIO口被用作第二功能时的配置情况

  (即并非作为通用IO口使用),比如像片上外设的的UART,SPI模块对应的输出数据线。UART发送线就是复用功能,并且是输出方向。

  8.开漏复用功能:GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用),比如像片上外设的的IIC模块对应的数据线和时钟线,使用时候要外接上拉电阻。如IIC总线的数据线和时钟线就要配置这种模式。

  我们使用IO口输出一个电压值来控制LED灯亮灭,因此选择推挽输出工作模式。

  五、软件程序设计1)配置系统时钟RCC,打开PB、PE、PA端时钟。

  2)配置GPIO口PB5、PE5、PA5、PA6为推挽输出工作模式。3)IO口输出低电平控制灯亮,输出高电平控制灯灭。参考程序:main.c参考程序:#include“stm32f10x.h“//芯片寄存器映射头文件#include“led.h“//自己写的led头文件staticvoidDelay(u32i);//延时函数的声明/*主函数*/intmain(void){GPIO_LED_Init();//LED灯初

  3/6

  始化while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_5);//PB5管脚置

  0,LED1亮Delay(*****);//延时GPIO_SetBits(GPIOB,GPIO_Pin_5);

  //PB5管脚置1,LED1灭Delay(*****);//延时

  GPIO_ResetBits(GPIOE,GPIO_Pin_5);//PE5管脚置0,LED2亮

  Delay(*****);//延时GPIO_SetBits(GPIOE,GPIO_Pin_5);//PE5管脚

  置1,LED2灭Delay(*****);GPIO_ResetBits(GPIOA,GPIO_Pin_5);

  Delay(*****);GPIO_SetBits(GPIOA,GPIO_Pin_5);Delay(*****);

  GPIO_ResetBits(GPIOA,GPIO_Pin_6);

  Delay(*****);

  GPIO_SetBits(GPIOA,GPIO_Pin_6);Delay(*****);}}/*延时函数*/

  staticvoidDelay(u32i){for(;ii--);}led.c参考程序:

  /****************************************************函数名:

  GPIO_LED_Init形参:无返回值:无函数功能:对4个LED灯

  进行初始化,并且关闭所有的led灯

  ****************************************************/#include

  “stm32f10x_gpio.h“voidGPIO_LED_Init(void){GPIO_InitTypeDef

  GPIO_InitStructure;//对GPIOB口的时钟打开

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2P

  eriph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//把IO口配置为

  输出模式,输出速度50MhzGPIO_InitStructure.GPIO_Mode=

  GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=

  4/6

  GPIO_Speed_50MHz;//设置管脚GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_Init(GPIOB,GPIO_InitStructure);//根据以上配置初始化PB5GPIO_Init(GPIOE,GPIO_InitStructure);//根据以上配置初始化PE5GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6;GPIO_Init(GPIOA,GPIO_InitStructure);//根据以上配置初始化PA5和PA6//关闭四个led灯GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5管脚置1,LED1灭GPIO_SetBits(GPIOE,GPIO_Pin_5);//PE5管脚置1,LED2灭GPIO_SetBits(GPIOA,GPIO_Pin_5);GPIO_SetBits(GPIOA,GPIO_Pin_6);}led.h参考程序:

  #ifndef_LED_H_#define_LED_H_voidGPIO_LED_Init(void);//声明LED灯初始化函数#endif六、实验操作步骤1.准备实验环境使用STlink仿真器连接信盈达STM32实验平台的主板JTAG接口;

  使用实验平台附带的USB数据线,连接实验平台主板和PC。2.打开开发环境,新建工程1)新建工程,步骤参照附录1。2)新建两个文件led.c(写函数的定义)和led.h(写函数的声明),保存到工程目录user/API,并且把led.c添加到工程3)完成程序编写,编译链接工程。打开Flash菜单Download,将程序下载到开发板的Flash

  5/6

  中,按RESET键复位,观察LED的情况。七、实验结果:八、心得体会通过本次实验,我学到了很多知识,通过实

  验掌握ARM芯片使用GPIO端口。掌握GPIO端口控制LED显示,掌握系统时钟的配置,掌握库开发原理及方法,感谢老师的指导和同学的帮助

  6/6

  

篇四:GPIO实验报告

  3.实验环境WindouwslOKeiluVision5

  课程实验报告

  学院:___________________专业:______________2018年10月18日

  姓名

  学号

  班级

  指导老师

  课程名称嵌入式系统原理与应用实验

  成

  实验名称GPIO输出-流水灯

  绩

  1.实验目的

  通过一个经典的跑马灯程序,了解STM32F1的10口作为输出使用的方法。

  通过代码控制开发板上的4个LED灯交替闪烁,实现类似跑马灯的效果。

  2.实验内容

  工程文件建立、程序的调试,编译、jlink驱动的安装与配置、程序下载、实验结果验证。

  4.实验方法和步骤(含设计)

  上。

  (1)实验硬件连接图

  四个led灯如图连接到GPIO的6~9引脚

  (2)软件分析

  使用到的GPIO端口需配置为输出模式,推挽(PP)模式输出,I0口速度为50MHz(3)实验步骤

  ①建立工程文件:导入程序运行需要的库,加入主程序,调试运行环境,使程序可以成功被编译和运行且没有错误和警告。②安装JLINK驱动程序,点击下载按钮将程序烧写进开发板中。③检查led灯是否逐一顺序点亮,能够通过调整程序使点亮顺序改变。

  (4)原函数

  1itinclude"led.h"

  2B/*

  3

  (1)紺始牝GFIOC的

  口

  4(2)定义延时蓟数

  s—

  6voidLEDInit(void)

  70(

  8

  GPIOInitTypeDefGPIOInitStructurp;

  9

  RCC_APB2PeriphC1ockCmd(RCC_APB2Periph_GPIOC,EWWLEJi使隘P匚正时禅

  IS

  GPI0_ln1tStrutturt.GFI0_Pin-GPI0_Pin_&\GPI0_Pin_7^GPI0_Pin_fl[GP10_Pin_9;"PC飞濟口配匡

  11

  GPIOIni

  稚冃辎出

  12

  GPZ0Initstrueture.GPIC^Speed-GPIO_Speed_56*Xz;//IO□谨复为50rKz

  13

  GPIOInittGPIOCj&GFIO_InitStructure),/7*訂始比GPIOC.6

  14

  5PIO_SetBits(6PIOC,6PIO_Pin_5|6PIO_Pir_7|5PIO_Pin_a[GPIO_Pin_9)J//PC,6騒岀高

  15|}

  16=

  17voidDelay(u32count)

  18El{

  19

  u32i-0;

  29^or(;i<count;!++);

  21?22|

  6.实验分析与体会

  如果4个LED灯是与A口的PA1、PA2、PA3、PA4相连,将led.c文件中的GPIOC”

  2intnain(void){LED_Init()j

  (GPIO_ReietBiti(GPIOCJGPIO_Pirt„&)>GPlOSeteitstQPtOC^GPlOPin7|GPIOFin8|GF10_Pin9)^

  GPZ0_Fle5etBit5(GPLCC,GPIO_Pin_7),

  GPIOSetBitstGPlOC^GPICPin_6|GPlGPinS|GPIOPin

  (5PIO_ResetBits(GPIOC,6PIO_Pin_a};

  GPIOSetBitsfGPIOC,GPIO_Pin_5|GPI0_Pin_7|GPI0_Pin_9),Delay(IDCtW);&PIO_Ft«etBlts(GPIOC,GPIQ_Pir_9);

  GPIO_SetBits(5PItX,GPIO_Pir_51GPXC_Pin_7|GPIOPin_8),Delay{

  改为GPIOA:并将Pin_X改为对应的1~4脚。

  5.程序及测试结果

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO」nitStructure.GPIO_Pin二GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9

  BuildOutput

  ProgramSize:Code-156^RO-date™336RW*deta-^2Zl-data-lSSSFroirELF:creating

  hexfile,,.

  "*AOBJ\LED*axfH-0Error(a)f0Warning(s).

  3uildTir,eElapsed:

  00:00:04

  J

  GPIO」nit(GPIOC,&GPIO_InitStructure);GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);改为RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO」nitStructure.GPIO_Pin二GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4

  J

  GPIO_lnit(GPIOA,&GPIO_InitStructure);

  GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);

  成绩评定

  实验日期:2018年10月18日

  教师签名:

  WelcomeToDownload!!!

  欢迎您的下载,资料仅供参考!

  

篇五:GPIO实验报告

  《嵌入式系统原理与应用》实验报告

  实验序号:01学号XXX姓实验项目名称:GPIO输入输出控制实验1名XXXXX专业、班实验时间

  11计算机科学与技术2013-3-22

  实验地点

  实验楼1#416指导教师

  一、实验目的1.掌握LPC2200专用工程模板的使用;2.掌握Proteus仿真软件的安装和使用;3.熟悉LPC2000系列ARM7微控制器的GPIO控制。二、实验设备(环境)及要求硬件:PC机;软件:PC机操作系统windowsXP,ADS1.2集成开发环境,Proteus软件。三、实验内容与步骤实验内容:编写程序配置LPC2138的P0.2,P0.5为GPIO功能,并P0.2驱动LED灯,P0.5外接按键,实现按下按键,使LED灯闪烁的效果。四、实验结果与数据处理1.实验效果图

  1

  2.关键代码展示

  #include"config.h"intmain(void){//addusersourcecodeuint32i;PINSEL0&=0xFFFFFFCF;//setpin0.2tobeGPIOPINSEL0&=0xFFFFF3FF;//setpin0.5tobeGPIOIO0DIR|=0x00000004;while(1){if((IO0PIN&0x00000020)==0)IO0SET=0x00000004;elseIO0CLR=0x00000004;for(i=0;i<10000;i++);}return0;}

  3.关键代码的说明

  程序开始

  2

  设置P0.2和P0.5为GPIO功能

  将P0.2设置为输出

  判断按钮(P0.5)是否按下

  否

  是

  led灯亮led灯不亮

  程序结束

  五、分析与讨论第一次接触这个画图,一不小心老师出现连线问题,只好重头来做,细心是很重要的。还有重要的一点就是要‘与’或者‘或’的时候没搞好。六、教师评语

  成绩

  签名:日期:

  3

  

篇六:GPIO实验报告

  ARM嵌入式GPIO接口实验

  《嵌入式系统原理与应用B》课程实验报告ARMGPIO实验要求完成的主要实验GPIO实验(输入扫描按键、输出控制灯、定时器综合)说明:标注完成的实验,未完成的给予说明专业名称:通信工程班级:1510班学生姓名:石龙飞学号(8位):03151307指导教师:刘钊远一、实验目的1、熟悉了解单片机,以EayARM2131为例,观察其板子的设计、模块、芯片、以及有哪些接口。2、熟练掌握如何连接单片机和电脑,使其能够对单片机进行烧录程序。3、熟练掌握Keil4的使用,学会用Keil4为单片机烧录程序。4、掌握Keil4的编程方法、调试、以及各项参数的设置,如何选择与硬件相匹配的仿真环境。5、用C语言编程,学习如何控制单片机的各个部件工作,比如控制蜂鸣器鸣叫,控制LED闪烁,控制定时器计数,控制按键的输入等等。6、深刻理解中断以及定时器的工作方法和原理,以及如何在程序中他们进行编程设置。二、实验内容

  1、编程实现对单片机上6个LED灯的控制,要求实现不同的花型变化,以及不同的变换间隔。

  2、编程实现输入,通过对单片机上的按键进行扫描来获得输入,用这个输入来进行不同的操作。

  3、通过定时器中断来进行计时,模拟操作系统的时钟周期,来以特定的时间间隔执行不同的任务。三、实验主要步骤

  3、使用C语言设计、编写程序,并进行编译调试,找到代码中的语法以及一些逻辑错误。

  4、将写好的、经过编译没有语法和逻辑错误的程序通过keil烧录到单片机中,再对单片机进行操作,验证结果。四、实验代码

  

篇七:GPIO实验报告

  课程实验报告

  学院:姓名班级

  专业:学号指导老师

  2018年10月18日

  课程名称嵌入式系统原理与应用实验

  成

  实验名称GPIO输出-流水灯

  绩

  1.实验目的

  通过一个经典的跑马灯程序,了解STM32F1的IO口作为输出使用的方

  法。通过代码控制开发板上的4个LED灯交替闪烁,实现类似跑马灯的效果。

  2.实验内容

  工程文件建立、程序的调试,编译、jlink驱动的安装与配置、程序下载、实验结果验证。

  4.实验方法和步骤(含设计)(1)实验硬件连接图

  四个led灯如图连接到GPIO的6~9引脚上。

  (2)软件分析使用到的GPIO端口需配置为输出模式,使用推挽(PP)模式输出,IO口

  速度为50MHz。(3)实验步骤

  ①建立工程文件:导入程序运行需要的库,加入主程序,调试运行环境,使程序可以成功被编译和运行且没有错误和警告。

  ②安装JLINK驱动程序,点击下载按钮将程序烧写进开发板中。③检查led灯是否逐一顺序点亮,能够通过调整程序使点亮顺序改变。(4)原函数

  3.实验环境Windouws10KeiluVision5

  5.程序及测试结果

  6.实验分析与体会

  如果4个LED灯是与A口的PA1、PA2、PA3、PA4相连,将led.c文件中的“GPIOC”改为“GPIOA”,并将Pin_X改为对应的1~4脚。

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);改为RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);

  成绩评定

  实验日期:2018年10月18日

  教师签名:年月日

  

篇八:GPIO实验报告

  通过自行编写库文件和了解液晶显示字库能在液晶上显示北京航空航天大学机械工程及自动化学院by1807120关键源代码北航研究生单片机实验报告实验一

  北航研究生单片机实验报告

  北京航空航天大学研究生课程考核记录

  2018-2019学年第一学期

  学号姓名成绩

  课程名称:《单片机系统实验》

  题目:单片机实验报告

  一、实验目的1.了解32位单片机(STM32系列)原理及其应用,熟悉单片机的资源,掌握单片机的最小系统设计及扩展技术,掌握单片机的编程语言。2.通过本实验了解LCD液晶工作原理,能通过编程操作液晶的显示。二、实验设备STM32实验系统一套,PC机一台。三、实验原理(1)I/O口及定时器实验:STM32的GPIO口控制4个发光二极管,了解其硬件连接方式,学会使用STM32的一个定时器,掌握对定时器计时方式的编程。编写程序循环点亮4个发光二极管,控制点亮时间为1秒钟闪烁。(2)外部中断实验:掌握STM32单片机外部中断的用法,学会设置中断优先级,在实验(1)的基础上完成,如果有外部中断发生改变发光二极管的发光规律。(如,仅其中2个灯亮,再次触发外部中断后,发光二极管重新变成4个灯循环点亮。)(3)串行口通信实验:掌握STM32单片机与计算机之间的硬件连接方式,了解二者之间的传输协议,进行数据传输。(4)LCD实验:掌握STM32单片机与液晶之间的硬件连接方式,单片机如何驱动液晶进行显示。四、内容与步骤1.学会使用IAR的编译链接调试环境,熟悉IAR中有关STM32使用到的库,并能顺利建立包含各种库文件的工程。2.I/O口实验:在建立工程的基础上能点亮发光二极管。3.定时器实验:循环定时(用定时器做)点亮4个灯,即每1秒闪烁点亮一个灯,循环往复(或叫跑马灯实验)。4.外部中断实验:按键作为触发外部中断的条件,中断发生时,改变发光二极管的点亮规律。5.串行口通信实验:编写串行口通信实验程序,能在计算机与STM32系统间进行ASCII码的传输。6.LCD实验:通过自行编写库文件和了解液晶显示字库,能在液晶上显示“北京航空航天大学机械工程及自动化学院,BY1807120刘哲BY1807121路旭阳”字样。五、关键源代码

  北航研究生单片机实验报告

  实验一:I/O口实验--在建立工程的基础上能点亮发光二极管。

  intmain(){BSP_init();//初始化管脚,中断while(1)//点亮led灯{GPIO_SetBits(GPIOD,GPIO_Pin_8);}return0;}

  实验二:跑马灯实验

  voidmain(){RCC_Configuration();//配置系统时钟GPIOinit();//GPIOD初始化time_init();//初始化定时器while(1)//死循环等待定时器中断{**************LED控制程序!switch(i){case0:GPIO_Write(GPIOD,0x0100);break;//PD8置“1”,点亮第一个灯case1:GPIO_Write(GPIOD,0x0200);break;//PD9置“1”,点亮第二个灯case2:GPIO_Write(GPIOD,0x0400);break;//PD10置“1”,点亮第三个灯case3:GPIO_Write(GPIOD,0x0800);break;//PD11置“1”,点亮第四个灯}}}中断服务函数:voidTIM2_IRQHandler(void){if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET){TIM_ClearITPendingBit(TIM2,TIM_IT_Update);i++;if(4==i)i=0;

  北航研究生单片机实验报告

  }}

  实验三:外部中断实验(按键作为触发外部中断的条件,中断发生时,改变发光二极管的点亮规律。

  Main.C省略。***************************************while(1)*****************{if(time==1000)/*1s时间到*/{time=0;/*灯亮。*/if(i==1)//1灯亮,其余灯灭。{GPIO_SetBits(GPIOD,GPIO_Pin_8);GPIO_ResetBits(GPIOD,GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);}if(i==2)//2灯亮,其余灭{GPIO_SetBits(GPIOD,GPIO_Pin_9);GPIO_ResetBits(GPIOD,GPIO_Pin_8|GPIO_Pin_10|GPIO_Pin_11);}if(i==3)//3灯亮,其余灭{GPIO_SetBits(GPIOD,GPIO_Pin_10);GPIO_ResetBits(GPIOD,GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_11);}if(i==0)//4灯亮,其余灭{GPIO_SetBits(GPIOD,GPIO_Pin_11);GPIO_ResetBits(GPIOD,GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_8);}i=(i+1)%4;//i1=1,i2=2,i3=3,i4=0}}}

  实验四:串行口通信实验

  voidUSART1_Putchar(unsignedcharch){//向上位机发送数ASCII码

  北航研究生单片机实验报告

  USART_SendData(USART1,ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);}voidUSART1_PutString(unsignedcharstr[],intn){inti;for(i=0;i<n;i++)//循环发送数据{Delay();USART1_Putchar(str[i]);//调用串口1数据发送函数}}intmain(void){unsignedcharstr[]="BUAA-MEMS-IRC404!";usart_config();//串口配置RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);LED_GPIO_Config();USART1_PutString(str,19);while(1){Delay();USART1_PutString(str,19);//调用串口1发送数据}}实验五:LCD实验

  导入了汉字、数字和英文字母的数据库,然后使用GUI函数进行调用显示intmain(void){delay_init();LCD_Initializtion();LCD_Clear(White);//дLCDGUI_Chinese(60,20,"北京航空航天大学",Blue,White);GUI_Chinese(40,40,"机械工程及自动化学院",Red,White);GUI_Chinese(80,60,"路旭阳",Red,White);GUI_Text(70,80,"BY1807121",Red,White);GUI_Chinese(90,100,"刘哲",Red,White);

  北航研究生单片机实验报告

  GUI_Text(70,120,"BY1807120",Red,White);while(1);}

  LCD.c中部分代码:voidGUI_Text(uint16_tXpos,uint16_tYpos,uint8_t*str,uint16_tColor,uint16_tbkColor){uint8_tTempChar;do{TempChar=*str++;PutChar(Xpos,Ypos,TempChar,Color,bkColor);if(Xpos<MAX_X-8){Xpos+=8;}elseif(Ypos<MAX_Y-16){Xpos=0;Ypos+=16;}else{Xpos=0;Ypos=0;}}while(*str!=0);}voidGUI_Chinese(uint16_tXpos,uint16_tYpos,uint8_t*str,uint16_tColor,uint16_tbkColor){do{PutChinese(Xpos,Ypos,str++,Color,bkColor);str++;if(Xpos<MAX_X-16){Xpos+=16;}elseif(Ypos<MAX_Y-16)

  北航研究生单片机实验报告

  {Xpos=0;Ypos+=16;}else{Xpos=0;Ypos=0;}}while(*str!=0);}

  液晶屏显示图片:

  实验课感想:对多种外设的使用有了直观的感受和理解,改掉了以前写代码都扔在一个main函数里的陋习,学习使用.h与.c文件,大大提高了代码的可读性,也方便了工程的debug,加快了开发速度。

  北航研究生单片机实验报告任课教师评语:

  任课教师签字:

  考核日期:

  年

  月

  日

  

篇九:GPIO实验报告

  一.试验目标

  试验四【1】GPIO输入试验

  1.可以或许应用GPIO的输入模式读取开关旌旗灯号.

  2.控制GPIO相干存放器的用法和设置.

  3.控制用C说话编写程序控制GPIO.

  二.试验情况

  PC机一台

  ADS1.2集成开辟情况

  一套

  EasyARM2131教授教养试验平台一套

  三.试验内容

  1.试验经由过程跳线JP8衔接,程序检测按键KEY1的状况,控制蜂鸣器BEEP的鸣叫.按下KEY1,蜂鸣器鸣叫,松开后停滞蜂鸣.(调通试验后,改为KEY3键进行输入).

  2.当检测到KEY1有按键输入时点亮发光二极管LED4并控制蜂鸣器响,软件延时后关失落发光管并停滞蜂鸣,然后轮回这一进程直到检测按键没有输入.(键输入改为键KEY4,发光管改为LED6).

  3.联合试验三,当按下按键Key1时,启动赛马灯程序并控制蜂鸣器响,软件延时后关失落发光管并停滞蜂鸣,然后轮回这一进程直到检测按键再次按下.

  四.试验道理

  第1页,共19页

  当P0口用于GPIO输入时(如按键输入),内部无上拉电阻,须要加上拉电阻,电路图拜见图4.2.

  进行GPIO输入试验时,先要设置IODIR使接口线成为输入方法,然后读取IOPIN的值即可.

  图4.2按键电路道理图试验经由过程跳线JP8衔接,程序检测按键KEY1的状况,控制蜂鸣器BEEP的鸣叫.按下KEY1,蜂鸣器鸣叫,松开后停滞蜂鸣.在这个试验中,须要将按键KEY1输进口P0.16设为输进口而蜂鸣器控制口P0.7设置为输出口.蜂鸣器电路如图4.3所示,当跳线JP6衔接蜂鸣器时,P0.7控制蜂鸣器,低电日常平凡蜂鸣器鸣叫.LED灯电路如图4.4所示,低电日常平凡灯亮.

  第2页,共19页

  图4.3蜂鸣器控制电路

  图4.4LED控制电路程序起首设置管脚衔接存放器PINSEL0和PINSEL1,设置P0.16为输入,设置为输出.然后检测端口P0.16的电平,对进行响应的控制,流程图如图4.5所示,实现程序见程序清单4.1.

  第3页,共19页

  图4.5按键输入试验流程图

  五、试验步调.源代码及调试成果内容1

  试验步调①启动ADS1.2IDE集成开辟情况,选择ARMExecutableImageforlpc2131工程模板树立一个工程BEEP_key.②在user组里编写主程序代码main.c.③选用DebugInFLASH生成目标,然后编译链接工程.④将EasyARM教授教养试验开辟平台上的响应管脚跳线短接.⑤选择Project->Debug,启动AXD进行JLINK仿真调试.

  第4页,共19页

  ⑥全速运行程序,程序将会在main.c的主函数中停滞.如下图所示:

  ⑦单击ContextVariable图标按钮(或者选择ProcessorViews->Variables)打开变量不雅察窗口,经由过程此窗口可以不雅察局部变量和全局变量.选择SystemViews->DebuggerInternals即可打开LPC2000系列ARM7微控制器的片表里存放器窗口.

  经由过程变量窗口可以不雅察变量BEEP.KEY1等的值和ARM7微控制器的片表里存放器窗口.如下图所示:

  第5页,共19页

  ⑧可以单步运行程序,先按下Key1,不雅察IO0PIN存放器的值,然后断开Key1,不雅察IO0PIN存放器的值.可以设置/撤消断点;或者全速运行程序,停滞程序运行,不雅察变量的值,断定蜂鸣器控制是否准确.如下图所示:

  图

  4.6

  未按下Key1时IO0PIN的值

  图

  4.7按下Key1时IO0PIN的值

  第6页,共19页

  由上两图可知,当按下Key1时,IO0PIN存放器的第16位由1变成0(F变成E),key1与P,按下Key1时,1变成0,存放器值变更,蜂鸣器响,解释控制是准确的.

  现象描写:按下KEY1,蜂鸣器鸣叫,松开后停滞蜂鸣.

  源代码:

  #include"config.h"constuint32BEEP=1<<7;//P0.7控制蜂鸣器constuint32KEY1=1<<16;//P0.16衔接KEY1(改为KEY3时,只需“constuint32KEY1=1<<16”改为“constuint32KEY3=1<<18”,其余不变.)/*********************************************************************************************函数名称:main()**函数功效:GPIO输入试验测试.**检测按键KEY1.KEY1按下,蜂鸣器蜂鸣,松开后停滞蜂鸣.**跳线解释:把JP8的KEY1跳线短接,JP11衔接蜂鸣器.*******************************************************************************************/intmain(void){PINSEL0=0x00000000;//所有管脚衔接GPIOPINSEL1=0x00000000;IO0DIR=BEEP;//蜂鸣器控制口输出,其余输入while(1){if((IO0PIN&KEY1)==0)IO0CLR=BEEP;//假如KEY1按下,蜂鸣器鸣叫elseIO0SET=BEEP;//松开则停滞蜂鸣

  第7页,共19页

  }return0;}

  内容二

  试验步调①启动ADS1.2IDE集成开辟情况,选择ARMExecutableImageforlpc2131工程模板树立一个工程BEEP_key.②在user组里编写主程序代码main.c.③选用DebugInFLASH生成目标,然后编译链接工程.④将EasyARM教授教养试验开辟平台上的响应管脚跳线短接.⑤选择Project->Debug,启动AXD进行JLINK仿真调试.

  

篇十:GPIO实验报告

  GPIO实验

  ------10903070313_某某

  一、实验目的:

  ⑴:熟悉ARM开发板基本组成电路,并通过配套教材熟悉ARM芯片特性。了解ADS1.2软件使用,并会用该软件编译调试开发板。⑵:了解H—JTAG软件原理,利用教材中提供的LED测试程序,完成实验。⑶:进一步掌握ADS1.2集成开发环境的使用方法。⑷:掌握LPC2000专用工程模板的添加和使用。⑸:能够在EasyARM2100教学实验开发平台上运行第一个程序(无操作系统)。⑹:熟悉LPC2000系列ARM7微控制器的GPIO控制。⑺:了解应用程序的固化方法。

  二、实验内容及原理:

  ⑴:单LED闪烁使用P0.25的输出功能,控制一个LED闪动。采用灌电流方式驱动LED,即输出地电平时LED点亮。程序首先设置PINSEL0,PINSEL1进行管教连线,然后由IO0DIR设置P0.25口为输出模式,即可通过对IO0SET和IO0CLR寄存器进行口线设置1或置0输出控制。

  ⑵:单键输入GPIO是一个双向的I/O口,内部无上拉电阻,所以作于键盘输入时,要上拉电阻。进行GPIO输入时,先要设置IODIR使口线为输入方式,然后读取IOPIN的值即可。使用P0016口作按键的输入,每一次有效按键即对LED4进行取反控制。

  ⑶:多键多LED(选作)KEY1按下LED1取反,......,KEY4按下LED4取反,KEY5按下LED全灭,KEY6按下LED全亮。⑷:模拟SPI数码显示EasyARM2100开发实验板提供了一位静态数码管,由74HC595直接驱动。74HC595是一个串入并出的一位寄存器,三态输出口,可以通过SQH进行级连,支持100MHz时钟频率。通过3个GPIO口模拟对74HC595进行控制,驱动数字数码管显示数字0~F。⑸:LED及数码编码显示

  程序驱动数码管循环显示16进制数0~F,并使用LED1~LED4指示当前数值,LED4表示高位(d3),LED1指示低位(d0),点亮为1,熄灭为0。⑹多键及显示组合(选作)KEY1按下数码显示“1”,......,KEY6按下数码显示“6”,同时LED显示数据BCD编码。

  三、实验器材

  PC机一台,周立功开发板一块(EasyARM2100)

  四、实验预习与要求:

  (1)认真复习LPC2000系列ARM7微控制器的GPIO控制机制以及LPC2100管脚连接模块等内容。

  (2)了解EasyARM2100教学实验开发平台的硬件结构,注意蜂鸣器的相关控制电路。(3)了解EasyARM2100教学实验开发平台上的跳线。(4)仔细阅读附带文档《ADS集成开发环境及仿真器应用》或其它相关资料,了解GPIO

  的设置、74HC595时序、逻辑控制方法、LPC2000专用工程模板。

  五、程序流程图

  ⑴:单LED闪烁

  ⑵:单键输入

  ⑶:模拟SPI数码显示⑷:LED及数码编码显示

  六、实验源程序为(C语言):

  ⑴:单LED闪烁#include"config.h"#defineLEDCON0x00400000

  voidDelayNS(uint32dly){

  uint32i;for(;dly>0;dly--)

  for(i=0;i<50000;i++);

  }intmain(void){

  PINSEL0=0x00000000;PINSEL1=0x00000000;

  IO0DIR=LEDCON;while(1){

  IO0SET=LEDCON;DelayNS(30);IO0CLR=LEDCON;DelayNS(30);}return(0);}⑵:单键输入#include"config.h"#defineLEDCON0x00400000#defineKEY0x00010000

  voidWaitKey(void){

  uint32i;

  while(1){

  while((IO0PIN&KEY)!=0);

  for(i=0;i<50000;i++);if((IO0PIN&KEY)==0)break;

  }while((IO0PIN&KEY)==0)

  ;}

  intmain(void){

  PINSEL0=0x00000000;PINSEL1=0x00000000;

  IO0DIR=LEDCON;while(1){

  IO0SET=LEDCON;WaitKey();IO0CLR=LEDCON;WaitKey();}return(0);}⑶:模拟SPI数码显示#include"config.h"#defineSPI_CS0X20000100

  #defineSPI_DATA0x00000040#defineSPI_CLK0x00000010#defineSPI_IOCON(SPI_CS|SPI_DATA|SPI_CLK)

  voidDelayNS(uint32dly){

  uint32i;for(;dly>0;dly--)

  for(i=0;i<50000;i++);}voidHC595_SendDat(uint8dat){

  uint8i;IO0CLR=SPI_CS;for(i=0;i<8;i++){

  IO0CLR=SPI_CLK;if((dat&0x80)!=0)

  IO0SET=SPI_DATA;else

  IO0CLR=SPI_DATA;dat<<=1;IO0SET=SPI_CLK;}IO0SET=SPI_CS;}

  intmain(void){

  Constuint8DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0X99,0x82,0xF8,0x80,0x90,0x88,0x83,0x83,0xC6,0xA1,0x86,0x8E};

  uint8i;PINSEL0=0x00000000;PINSEL1=0x00000000;IO0DIR=SPI_IOCON;while(1){

  for(i=0;i<16;i++){

  HC595_SendDat(DISP_TAB[i]);DelayNS(50);}}return(0);}⑷:LED及数码编码显示#include"config.h"

  #defineSPI_CS(1<<29)#defineSPI_DATA(1<<6)#defineSPI_CLK(1<<4)#defineBEEP(1<<7)#defineSPI_IOCON(SPI_CS|SPI_DATA|SPI_CLK)#defineLED_IOCON(0x0F<<22)

  voidDelayNS(uint32dly){

  uint32i;for(;dly>0;dly--)for(i=0;i<50000;i++);}

  voidHC595_SendDat(uint8dat){

  uint8i;IO0CLR=SPI_CS;for(i=0;i<8;i++){

  IO0CLR=SPI_CLK;if((dat&0x80)!=0)IO0SET=SPI_DATA;elseIO0CLR=SPI_DATA;dat<<=1;IO0SET=SPI_CLK;}IO0SET=SPI_CS;}

  constuint8DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

  intmain(void){

  uint8i;PINSEL0=0x00000000;PINSEL0=0x00000000;

  IO0DIR=SPI_IOCON|LED_IOCON|BEEP;while(1){

  for(i=0;i<16;i++){

  HC595_SendDat(DISP_TAB[i]);IO0SET=0x0F<<22;IO0CLR=i<<22;

  IO0CLR=BEEP;DelayNS(50);IO0SET=BEEP;DelayNS(50);}}return(0);}

  七、实验步骤:

  ㈠、找到开发板的芯片及flash

  1.计算机并口与开发板JTAG口相连接打开JTAG软件H-JTAGServer在Flasher里面选择autodownload。2.然后点击左上角的放大镜看是否可以找到开发板CPU。3.如果找到CPU,软件界面会出现ARM7字样以及芯片ID号。

  4.如果找到CPU,在flashselection里选择LPC2114

  5.configuration里设置晶振的频率为11.0592

  打开H-Flasher点击check,会出现ARM7相关字样,证明可以找到flash

  ㈡、编写程序代码仿真并验证结果

  打开CodeWarriorforARMDevelopersuite编写相应的代码,测试没有语法错误后仿真并查看运行结果,对比是否与预期的是否相同。如果与结果存在出入,检查源程序是否存在逻辑上的错误,修改并知道实验结果正确。

  八、实验结果:

  单LED闪烁实验结果:实验电路板上的LED按一定周期快速闪烁。单键输入实验结果:当按下EasyARM2100实验板的第一个按钮时对应的LED灯熄灭,再次按下时又点亮,实现按键取反的效果。模拟SPI数码显示实验结果:程序驱动数字数码管显示数字0~F。LED及数码编码显示实验结果:除了数字数码管显示数字0~F,四个LED灯显示对应的以点亮/熄灭分别代表1/0二进制数,并伴随蜂鸣。经过实验,实验结果与预期结果基本吻合,表示实验成功。

  九、实验结论:

  通过本次试验在一定程度上,了解H—JTAG软件原理,熟悉了ARM开发板基本组成电路,并通过配套教材熟悉ARM芯片特性以及ADS1.2软件使用,并会用该软件编译调试开发板掌握了LPC2000专用工程模板的添加和使用。在老师的讲解下以及帮助下,能够在EasyARM2100教学实验开发平台上运行第一个程序。并熟悉了LPC2000系列ARM7微控制器的GPIO控制。了解了简单的应用程序的固化方法,并能根据教材提示完成实验。掌握了LPC2000系列ARM7微控制器的GPIO控制机制以及LPC2100管脚连接和模块等内容,了解了EasyARM2100教学实验开发平台的硬件结构,以及教学实验开发平台上的跳线。老师的教学态度很认真,对于实验的的改进方面的建议是,教学时可以照顾下水平低的同学,适当的降慢课程的讲解速度。实验课程,必要时使用一下软件视频教学。

  

篇十一:GPIO实验报告

 实验四GPIO输入实验

  一、实验目的

  1、能够使用GPIO的输入模式读取开关信号。2、掌握GPIO相关寄存器的用法和设置。3、掌握用C语言编写程序控制GPIO。

  二、实验环境

  PC机

  一台

  ADS1.2集成开发环境

  一套

  EasyARM2131教学实验平台

  一套

  三、实验内容

  1.实验通过跳线JP8连接KEY1与P0.16,程序检测按键KEY1的状态,控制蜂鸣器BEEP的鸣叫。按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣。(调通实验后,改为KEY3键进行输入)。

  2.当检测到KEY1有按键输入时点亮发光二极管LED4并控制蜂鸣器响,软件延时后关掉发光管并停止蜂鸣,然后循环这一过程直到检测按键没有输入。(键输入改为键KEY4,发光管改为LED6)。

  3.结合实验三,当按下按键Key1时,启动跑马灯程序并控制蜂鸣器响,软件延时后关掉发光管并停止蜂鸣,然后循环这一过程直到检测按键再次按下。

  四、实验原理

  当P0口用于GPIO输入时(如按键输入),内部无上拉电阻,需要加上拉电阻,电路图参见图4.2。

  进行GPIO输入实验时,先要设置IODIR使接口线成为输入方式,然后读取IOPIN的值即可。

  图4.2按键电路原理图实验通过跳线JP8连接KEY1_P0.16,程序检测按键KEY1的状态,控制蜂鸣器BEEP的鸣叫。按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣。在这个实验中,需要将按键KEY1输入口P0.16设为输入口而蜂鸣器控制口P0.7设置为输出口。蜂鸣器电路如图4.3所示,当跳线JP6连接蜂鸣器时,P0.7控制蜂鸣器,低电平时蜂鸣器鸣叫。LED灯电路如图4.4所示,低电平时灯亮。

  图4.3蜂鸣器控制电路

  图4.4LED控制电路程序首先设置管脚连接寄存器PINSEL0和PINSEL1,设置P0.16为输入,设置P0.7,P1.21为输出。然后检测端口P0.16的电平,对P0.7,P1.21进行相应的控制,流程图如图4.5所示,实现程序见程序清单4.1。

  图4.5按键输入实验流程图

  五、实验步骤、源代码及调试结果内容1

  实验步骤①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_key。②在user组里编写主程序代码main.c。③选用DebugInFLASH生成目标,然后编译链接工程。④将EasyARM教学实验开发平台上的相应管脚跳线短接。⑤选择Project->Debug,启动AXD进行JLINK仿真调试。⑥全速运行程序,程序将会在main.c的主函数中停止。如下图所示:

  ⑦单击ContextVariable图标按钮(或者选择ProcessorViews->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择SystemViews->DebuggerInternals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。

  通过变量窗口可以观察变量BEEP、KEY1等的值和ARM7微控制器的片内外寄存器窗口。如下图所示:

  ⑧可以单步运行程序,先按下Key1,观察IO0PIN寄存器的值,然后断开Key1,观察IO0PIN寄存器的值。可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。如下图所示:

  图4.6未按下Key1时IO0PIN的值

  图4.7按下Key1时IO0PIN的值

  由上两图可知,当按下Key1时,IO0PIN寄存器的第16位由1变为0(F变为E),key1与P0.16相连,按下Key1时,P0.16管脚输出电平由1变为0,寄存器值变化,蜂鸣器响,说明控制是正确的。

  现象描述:按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣。

  源代码:

  #include"config.h"constuint32BEEP=1<<7;//P0.7控制蜂鸣器constuint32KEY1=1<<16;//P0.16连接KEY1

  (改为KEY3时,只需“constuint32KEY1=1<<16”改为“constuint32KEY3=1<<18”,其余不变。)/*********************************************************************************************函数名称:main()**函数功能:GPIO输入实验测试。**检测按键KEY1。KEY1按下,蜂鸣器蜂鸣,松开后停止蜂鸣。**跳线说明:把JP8的KEY1跳线短接,JP11连接蜂鸣器。*******************************************************************************************/intmain(void){PINSEL0=0x00000000;//所有管脚连接GPIO

  PINSEL1=0x00000000;IO0DIR=BEEP;//蜂鸣器控制口输出,其余输入while(1){if((IO0PIN&KEY1)==0)IO0CLR=BEEP;//如果KEY1按下,蜂鸣器鸣叫elseIO0SET=BEEP;//松开则停止蜂鸣}return0;}

  内容二

  实验步骤①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_key。②在user组里编写主程序代码main.c。③选用DebugInFLASH生成目标,然后编译链接工程。④将EasyARM教学实验开发平台上的相应管脚跳线短接。⑤选择Project->Debug,启动AXD进行JLINK仿真调试。

  ⑥全速运行程序,程序将会在main.c的主函数中停止。如下图所示:

  ⑦单击ContextVariable图标按钮(或者选择ProcessorViews->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择SystemViews->DebuggerInternals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。

  通过变量窗口可以观察变量BEEP、KEY1等全局变量、i等本地变量和ARM7微控制器的片内外寄存器窗口。如下图所示:

  左图所示为ARM7微控制器的片内寄存器窗口。

  图4.9本地变量

  图4.8全局变量⑧可以单步运行程序,先按下Key1,观察IO0PIN寄存器的值,然后断开Key1,观察IO0PIN寄存器的值。可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。如下图所示:

  .

  图4.10未按下KEY1时IO0PIN的值

  图4.11按下KEY1后IO0PIN的值

  对比图4.10和4.11,发现按下KEY1后,IO0PIN寄存器的第16位由1变为0;而KEY1对应管脚P0.16,当按下时输入低电平,这说明KEY1的控制是正确的。

  上图所示为运行“IO0CLR=BEEP”后IO0PIN寄存器的值,与图4.10对比,发现第8位由1变为0,BEEP对应P0.7管脚,这说明BEEP的控制是对的。

  现象描述:当按下KEY1时,蜂鸣器鸣响,LED4亮;当松开KEY1后,蜂鸣器静音,LED4灭。

  源代码如下:

  #include"config.h"constuint32BEEP=1<<7;//P0.7控制蜂鸣器constuint32KEY1=1<<16;//P0.16连接KEY1(改为KEY4按键时,只需把上句代码改为“constuint32KEY4=1<<19”,其余不变)constuint32LEDS4=1<<21;//P1[21]控制LED4,低电平点亮(改为LED6时,只需把上句代码改为“constuint32LED6=1<<23”,其余不变。)/*****************************************************************************函数名称:main()**函数功能:GPIO输入实验测试。**检测按键KEY1。KEY1按下,蜂鸣器蜂鸣,松开后停止蜂鸣。**跳线说明:把JP8的KEY1跳线短接,JP11连接蜂鸣器。

  **********************************************************************************

  *********/

  intmain(void)

  {

  Uint32i;PINSEL0=0x00000000;//所有管脚连接GPIOPINSEL1=0x00000000;IO0DIR=BEEP;//蜂鸣器控制口输出0IO1DIR=LEDS4;//设置LED4灯亮while(1)

  {if((IO0PIN&KEY1)==0)

  for(i=0;i<1000;i++);

  //软件延时

  {

  IO0CLR=BEEP;//如果KEY1按下,蜂鸣器鸣叫

  IO1DCLR=LEDS4;//设置LED4灯亮

  }

  else

  {

  IO0SET=BEEP;//松开则停止蜂鸣

  IO1SET=LEDS4;//设置LED4灯灭

  }

  for(i=0;i<1000;i++);

  //软件延时

  }

  return0;

  }

  内容三

  实验步骤①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_key。②在user组里编写主程序代码main.c。③选用DebugInFLASH生成目标,然后编译链接工程。④将EasyARM教学实验开发平台上的相应管脚跳线短接。⑤选择Project->Debug,启动AXD进行JLINK仿真调试。⑥全速运行程序,程序将会在main.c的主函数中停止。如下图所示:

  ⑦单击ContextVariable图标按钮(或者选择ProcessorViews->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择SystemViews->DebuggerInternals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。

  通过变量窗口可以观察变量BEEP、KEY1等的值和ARM7微控制器的片内外寄存器窗口。如下图所示:

  ⑧可以单步运行程序,先按下Key1,观察IO0PIN寄存器的值,然后断开Key1,观察IO0PIN寄存器的值。可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。如下图所示:

  图4.12未按下Key1时IO0PIN的值

  图4.13按下Key1时IO0PIN的值

  由上两图可知,当按下Key1时,IO0PIN寄存器的第16位由1变为0(F变为E),key1与P0.16相连,按下Key1时,P0.16管脚输出电平由1变为0,寄存器值变化,蜂鸣器响,流水灯亮,说明控制是正确的。

  现象描述:当按下按键KEY1时,蜂鸣器鸣响,流水灯亮;松开后,蜂鸣器静音,流水灯灭。

  源代码如下:#include"config.h"

  constuint32BEEP=1<<7;//P0.7控制蜂鸣器constuint32KEY=1<<16;//P0.16连接KEY1constuint32LEDS8=0xFF<<18;//P1[25:18]控制LED8~LED1,低电平点亮

  voidDelayNS(uint32dly){uint32i;

  for(;dly>0;dly--){

  for(i=0;i<50000;i++);}}

  /*********************************************************************************************函数名称:liushuideng()**函数功能:流水灯显示实验。**调试说明:连接跳线JP12至LED8~LED1。*******************************************************************************************//*流水灯花样,低电平点亮,注意调用时候用了取反操作*/constuint32LED_TBL[]={

  0x00,0xFF,//全部熄灭后,再全部点亮0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,//依次逐个点亮0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,//依次逐个叠加0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,//依次逐个递减0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,//两个靠拢后分开0x81,0xC3,0xE7,0xFF,0xFF,0xE7,0xC3,0x81//从两边叠加后递减};intliushuideng(void){uint8i;PINSEL1=0x00000000;//设置管脚连接GPIOIO1DIR=LEDS8;//设置LED控制口为输出while(1){for(i=0;i<42;i++){/*流水灯花样显示*/IO1SET=~((LED_TBL[i])<<18);DelayNS(20);IO1CLR=((LED_TBL[i])<<18);DelayNS(20);}}return0;}

  //主函数

  intmain(void){uint32i;PINSEL0=0x00000000;//所有管脚连接GPIOPINSEL1=0x00000000;IO0DIR=BEEP;//蜂鸣器控制口输出0

  while(1)

  {if((IO0PIN&KEY)==0)

  {for(i=0;i<1000;i++);

  //软件延时

  {

  IO0CLR=BEEP;//如果KEY按下,蜂鸣器鸣叫

  liushuideng();

  }

  }

  else

  {

  IO0SET=BEEP;//松开则停止蜂鸣

  IO1SET=LEDS8;

  }

  for(i=0;i<100;i++);

  //软件延时

  }

  return0;

  }

  六、思考题1、如果将P0.30设置为GPIO输入模式,且管脚悬空,那么读取P0.30

  得到的值是0还是1?或者是不确定?当管脚悬空时,该管脚有可能是高电平也有可能是低电平。读取

  IO0PIN的值并不能确定管教的值。有时管脚是高电平,读取到的不一定是高电平。2、如果需要读取当前P0.7的输出值(不是管脚上的电平),如何实现?

  将该管脚与一个LED连接,若LED亮,则输出值为0,否则为1.

  

篇十二:GPIO实验报告

 当ledgpio的实平实高实led实实的作用就是通实实置实实gpioarm芯片内的gpio口都是用的即它可以被配置实多实同的功能本实实是使用它的普通的口的实出功能故需要实每个gpio口实行配置

  word专业资料-可复制编辑-欢迎下载

  实验五基于ARM的模块方式驱动程序实验

  【实验目的】1.掌握Linux系统下设备驱动程序的作用与编写技巧2.掌握Linux驱动程序模块加载和卸载的方法3.了解Linux内核中的makefile和kconfig文件

  【实验内容】1.基于s3c2440开发板编写led驱动程序。2.将编写好的led驱动加入linux内核中,修改makefile和kconfig文件,配置和编译内核。3.编写关于led的测试程序,交叉编译后运行,控制led灯的亮灭。

  【预备知识】1.了解ARM9处理器结构和Linux系统结构2.熟练掌握C语言。

  【实验设备和工具】硬件:ARM嵌入式开发平台,PC机Pentium100以上。软件:PC机Linux操作系统+MINICOM+AMRLINUX开发环境

  【实验原理】linux设备驱动程序驱动的模块式加载和卸载编译模块装载和卸载模块led驱动的原理在本开发板上有八个led指示灯,从下往上分别为LED0-LED7。这八个led灯都是接的芯片

  上的gpio口(通用功能输入输出口)。在本实验的开发板硬件设计中,当led灯对应的gpio的电平为低时,led灯被点亮;当led灯对应的gpio的电平为高时,led灯灭。本驱动的作用就是通过设置对应gpio口的电平来控制led的亮灭。

  因为ARM芯片内的GPIO口都是复用的,即它可以被配置为多种不同的功能,本实验是使用它的普通的I/O口的输出功能,故需要对每个GPIO口进行配置。在内核中已经定义了对GPIO口进行配置的函数,我们只需要调用这些函数就可以完成对GPIO口的配置。

  【实验步骤】实验程序运行效果:

  word专业资料-可复制编辑-欢迎下载

  程序会提示:“pleaseentertheledstatus”输入与希望显示的led状态对应的ledstatus值(输入十进制值即可),观察led的显示情况。

  例如:输入数字“3”,对应的二进制数字为00000011故点亮LED2~LED7输入数字“4”,对应的二进制数字为00000100故点亮LED0,LED1,LED3~LED7

  【实验结果和程序】C语言程序:

  #include<linux/config.h>#include<linux/module.h>#include<linux/kernel.h>#include<linux/devfs_fs_kernel.h>#include<linux/fs.h>#include<linux/init.h>#include<linux/device.h>#include<linux/cdev.h>#include<asm/hardware.h>#include<asm/delay.h>#include<asm/uaccess.h>#include<asm/arch/regs-gpio.h>#include<asm/arch/hardware.h>

  #defineDEVICE_NAME"s3c2440-led"staticintLedMajor=231;staticintLedMinor=0;staticcharledstatus=0xff;staticstructclass*s3c2440_class;staticstructcdev*s3c2440_led_cdev;

  /********************************************************************************************************

  word专业资料-可复制编辑-欢迎下载

  **Functionname:Update_led()**Descriptions:updatetheledstatus**Input:NONE**Output:NONE********************************************************************************************************/staticvoidUpdate_led(void){

  if(ledstatus&0x01)s3c2410_gpio_setpin(S3C2410_GPC7,1);//LED0灭

  elses3c2410_gpio_setpin(S3C2410_GPC7,0);//LED0亮

  if(ledstatus&0x02)s3c2410_gpio_setpin(S3C2410_GPC5,1);//LED1灭

  elses3c2410_gpio_setpin(S3C2410_GPC5,0);//LED1亮

  if(ledstatus&0x04)s3c2410_gpio_setpin(S3C2410_GPH9,1);//LED2灭

  elses3c2410_gpio_setpin(S3C2410_GPH9,0);//LED2亮

  if(ledstatus&0x08)s3c2410_gpio_setpin(S3C2410_GPB4,1);//LED3灭

  elses3c2410_gpio_setpin(S3C2410_GPB4,0);//LED3亮

  if(ledstatus&0x10)s3c2410_gpio_setpin(S3C2410_GPG5,1);//LED4灭

  elses3c2410_gpio_setpin(S3C2410_GPG5,0);//LED4亮

  if(ledstatus&0x20)s3c2410_gpio_setpin(S3C2410_GPG6,1);//LED5灭

  elses3c2410_gpio_setpin(S3C2410_GPG6,0);//LED5亮

  if(ledstatus&0x40)

  word专业资料-可复制编辑-欢迎下载

  s3c2410_gpio_setpin(S3C2410_GPG7,1);//LED6灭else

  s3c2410_gpio_setpin(S3C2410_GPG7,0);//LED6亮if(ledstatus&0x80)

  s3c2410_gpio_setpin(S3C2410_GPG8,1);//LED7灭else

  s3c2410_gpio_setpin(S3C2410_GPG8,0);//LED7亮

  }staticssize_ts3c2440_Led_write(structfile*file,constchar*buffer,size_tcount,loff_t*ppos){

  copy_from_user(&ledstatus,buffer,sizeof(ledstatus));Update_led();printk("write:led=0x%x,count=%d\n",ledstatus,count);returnsizeof(ledstatus);}staticints3c2440_Led_open(structinode*inode,structfile*filp){printk("leddeviceopen\n");return0;}staticints3c2440_Led_release(structinode*inode,structfile*filp){printk("leddevicerelease\n");return0;}staticstructfile_operationss3c2440_fops={.owner=THIS_MODULE,.open=s3c2440_Led_open,.write=s3c2440_Led_write,.release=s3c2440_Led_release,};

  staticintinits3c2440_Led_init(void){

  word专业资料-可复制编辑-欢迎下载

  intret;dev_ts3c2440_leds_devno;/*configurethegpioforleds*/s3c2410_gpio_cfgpin(S3C2410_GPG5,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPG6,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPG7,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPG8,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPC7,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPC5,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPH9,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPB4,S3C2410_GPIO_OUTPUT);

  Update_led();/*registerthedevnumber*/s3c2440_leds_devno=MKDEV(LedMajor,LedMinor);ret=register_chrdev_region(s3c2440_leds_devno,1,DEVICE_NAME);/*registerthechardevice*/s3c2440_led_cdev=cdev_alloc();if(s3c2440_led_cdev!=NULL){

  cdev_init(s3c2440_led_cdev,&s3c2440_fops);s3c2440_led_cdev->owner=THIS_MODULE;if(cdev_add(s3c2440_led_cdev,s3c2440_leds_devno,1))

  printk(KERN_NOTICE"Somethingwrongwhenaddings3c2440_led_cdev!\n");else

  printk("Successaddings3c2440_led_cdev!\n");}/*createthedevicenodein/dev*/s3c2440_class=class_create(THIS_MODULE,"led_class");class_device_create(s3c2440_class,NULL,s3c2440_leds_devno,NULL,DEVICE_NAME);

  printk(DEVICE_NAME"initialized\n");return0;

  }staticvoidexits3c2440_Led_exit(void)

  word专业资料-可复制编辑-欢迎下载

  {cdev_del(s3c2440_led_cdev);class_device_destroy(s3c2440_class,MKDEV(LedMajor,LedMinor));

  class_destroy(s3c2440_class);printk(DEVICE_NAME"removed\n");

  }module_init(s3c2440_Led_init);module_exit(s3c2440_Led_exit);

  【思考题】1.设备驱动程序的功能是什么?答:设备驱动的功能就是将系统提供的调用映射到作用于实际硬件的和设备相关的操作上。2.模块化的最大优点是什么?答:可以在系统正在运行着的时候给内核增加模块提供的功能(也可以移除功能)。3.如果在驱动模块中删除module_exit(s3c2440_Led_exit);后会有什么影响?答:这个模块将不能被移除。4.驱动代码中调用的宏MKDEV的作用是什么?答:获取设备在设备表中的位置。输入主设备号,从设备号,返回位置号。

  【实验结论】本实验实现了linux环境下的led灯驱动的添加。

  

篇十三:GPIO实验报告

 word

  Cortex-M4原理与实践实验报告

  实验一GPIO接口实验

  1.掌握〔以下简称CCS〕的安装和配置步骤过程。2.了解Cortex-M4开发系统和计算机与目标系统的连接方法。3.了解CCS软件的操作环境和根本功能,了解TM4C1294软件开发过程。1)学习创建工程和管理工程的方法;2)了解根本的编译和调试功能;3)学会设置断点,注入和提取数据文件;4)学习使用观察窗口;5)了解图形功能的使用方法。

  二.实验程序流程图

  本实验通过多种方法来控制GPIO端口的读写,通过GPIO端口的读写来控制主板上两个独立的LED灯,D1、D2的点亮和熄灭。主板上D1、D2、D3对应的GPIO口分别为PF1、PF2、PF3。

  1/25

  word

  三.实验代码、注释与现象

  #include<stdint.h>#include<stdbool.h>#include"inc/hw_memmap.h"#include"inc/hw_types.h"#include"driverlib/pin_map.h"#include"driverlib/sysctl.h"#include"driverlib/gpio.h"intmain(void){

  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能GPIOF口GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_DIR_MODE_OUT);//设置为输出模式

  GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD);//进一步设置为8mA、带转换速率控制的推挽输出

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0xff);//PF1输出高电平while(1){};//LED_D1on简单LE}现象:LED1被点亮

  2/25

  word

  #include<stdint.h>#include<stdbool.h>#include"inc/hw_memmap.h"#include"inc/hw_types.h"#include"driverlib/pin_map.h"#include"driverlib/sysctl.h"#include"driverlib/gpio.h"

  intmain(void){

  SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ|SYSCTL_OSC_MAIN|SYSCTL_USE_PLL|SYSCTL_CFG_VCO_480),10000000);

  //设置系统时间为10MHZ

  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能GPIOF口

  GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_DIR_MODE_OUT);//设置为输出模式

  GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD);//进一步设置为8mA、带转换速率控制的推挽输出

  while(1)

  {

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0xff);//PF1输出高,点亮LED0

  SysCtlDelay(100*(10000000/3000));

  //延时n*1ms100ms

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0);//PF1输出低,关闭LED0

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0xff);//PF2输出高,点亮LED2

  SysCtlDelay(100*(10000000/3000));

  //延时n*1ms

  3/25

  word

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0);//PF2输出低,点亮LED2

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,0xff);//PF2输出高,点亮LED2

  SysCtlDelay(100*(10000000/3000));

  //延时n*1ms

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,0);//PF2输出低,点亮LED2

  };

  }

  现象:主板上LED0,LED1,LED2按照间隔时间顺序依次点亮

  实验原理解读:主要利用延迟函数,按顺序点亮和关断LED1,LED2,LED3。

  五.实验中遇到的问题与其解决方法

  首先是没有按默认路径安装,然后配置一直不对,缺少文件,后来把软件卸载之后再重新安装在默认路径,问题就解决了。

  实验二矩阵按键操作实验

  一、实验目的

  4/25

  word

  1.熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法。2.熟悉和掌握矩阵式键盘的行列扫描法。3.掌握键盘延时消抖的软件方法。

  二、实验过程(包括流程图)

  图2-1实验程序流程图

  三、实验代码、注释〔最好每条注释〕与现象

  volatileuint32_tui32Loop;//定义变量

  5/25

  volatileuint32_tkey;//定义变量

  word

  voiddelay()

  {

  intui32Loop0;

  for(ui32Loop0=0;ui32Loop0<1000;ui32Loop0++)//delay

  {;}

  }//通过循环跑空函数延迟

  intidentify_key()

  

篇十四:GPIO实验报告

 Cortex-M4原理与实践实验报告

  实验一GPIO接口实验

  一.实验目的

  1.掌握CodeComposerStudio6.0(以下简称CCS)的安装和配置步骤过程。2.了解Cortex-M4开发系统和计算机与目标系统的连接方法。3.了解CCS软件的操作环境和基本功能,了解TM4C1294软件开发过程。1)学习创建工程和管理工程的方法;2)了解基本的编译和调试功能;3)学会设置断点,注入和提取数据文件;4)学习使用观察窗口;5)了解图形功能的使用方法。

  二.实验程序流程图

  本实验通过多种方法来控制GPIO端口的读写,通过GPIO端口的读写来控制主板上两个独立的LED灯,D1、D2的点亮和熄灭。主板上D1、D2、D3对应的GPIO口分别为PF1、PF2、PF3。

  三.实验代码、注释及现象

  #include<stdint.h>#include<stdbool.h>#include"inc/hw_memmap.h"#include"inc/hw_types.h"#include"driverlib/pin_map.h"#include"driverlib/sysctl.h"#include"driverlib/gpio.h"

  intmain(void){

  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能GPIOF口GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_DIR_MODE_OUT);//设置为输出模式

  GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD);//进一步设置为8mA、带转换速率控制的推挽输出GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0xff);//PF1输出高电平while(1){};//LED_D1on简单LE

  }

  现象:LED1被点亮

  四.思考题

  1.代码

  #include<stdint.h>#include<stdbool.h>#include"inc/hw_memmap.h"#include"inc/hw_types.h"#include"driverlib/pin_map.h"#include"driverlib/sysctl.h"#include"driverlib/gpio.h"

  intmain(void){

  SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ|SYSCTL_OSC_MAIN|SYSCTL_USE_PLL|SYSCTL_CFG_VCO_480),10000000);

  //设置系统时间为10MHZ

  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能GPIOF口

  GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_DIR_MODE_OUT);//设置为输出模式

  GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD);//进一步设置为8mA、带转换速率控制的推挽输出

  while(1)

  {

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0xff);//PF1输出高,点亮LED0

  SysCtlDelay(100*(10000000/3000));

  //延时n*1ms100ms

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0);//PF1输出低,关闭LED0

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0xff);//PF2输出高,点亮LED2

  SysCtlDelay(100*(10000000/3000));

  //延时n*1ms

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0);//PF2输出低,点亮LED2

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,0xff);//PF2输出高,点亮LED2

  SysCtlDelay(100*(10000000/3000));

  //延时n*1ms

  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,0);//PF2输出低,点亮LED2

  };

  }

  2.实验现象:主板上LED0,LED1,LED2按照间隔时间顺序依次点亮

  实验原理解读:主要利用延迟函数,按顺序点亮和关断LED1,LED2,LED3。

  五.实验中遇到的问题及其解决方法

  首先是没有按默认路径安装,然后配置一直不对,缺少文件,后来把软件卸载之后再重新安装在默认路径,问题就解决了。

  实验二矩阵按键操作实验

  一、实验目的

  1.熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法。2.熟悉和掌握矩阵式键盘的行列扫描法。3.掌握键盘延时消抖的软件方法。

  二、实验过程(包括流程图)

  图2-1实验程序流程图

  三、实验代码、注释(最好每条注释)及现象

  volatileuint32_tui32Loop;//定义变量

  volatileuint32_tkey;

  //定义变量

  voiddelay()

  {

  intui32Loop0;

  for(ui32Loop0=0;ui32Loop0<1000;ui32Loop0++)//delay

  {;}

  }//通过循环跑空函数延迟

  intidentify_key()

  

篇十五:GPIO实验报告

 GPIO实验报告

  齐鲁理工学院实验报告课程名称:微型计算机控制技术时间:20XX年.10.22地点:D203班级:20XX年级机制3班姓名:杨帆学号:*****4实验项目名称:GPIO端口实验实验指导教师:赵保华实验成绩评定:一、实验目的ü通过实验掌握ARM芯片使用GPIO端口。ü掌握GPIO端口控制LED显示。ü掌握系统时钟的配置。ü掌握库开发原理及方法。二、实验设备ü通过实验掌握ARM芯片使用GPIO端口。ü掌握GPIO端口控制LED显示。ü掌握系统时钟的配置。ü掌握库开发原理及方法。三、实验内容控制信盈达Cotex-M3实验平台的发光二极

  1/6

  管LED1、LED2、LED3、LED4,使它们有规律的点亮,具体顺序如下:LED1亮-LED2亮-LED3亮-LED4亮,如此反复。

  四、实验原理如图所示,LED1-4分别与PB5PE5PA5PA6相连,通过PB5PE5PA5PA6引脚的高低电平来控制发光二极管的亮与灭。当这几个管脚输出高电平的时候发光二极管熄灭,反之,发光二极管点亮。

  GPIO管脚的每个位可以由软件配置成如下几种模式:1.输入浮空:浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。做按键,是要读取电平状态,这种配置抗干扰性差,但是是处理信号方面一般是配置这个功能。如测试一个波形,这时候可以配置这个功能。2.输入上拉:经过电阻连接到VCC,能让IO口在没有连接信号时候有一个确定的高电平,并且也能从VCC处获得比较大的驱动电流。3.输入下拉:经过电阻连接到GND,能让IO口在没有连接信号时候有一个确定的低电平。4.模拟输入:芯片内部外设专用功能(ADC,DAC对应的IO口功能)5.开漏输出:IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。6.推挽式输出:IO输出0接GND,IO输出1接VCC,

  2/6

  拥有比较强的驱动能力,如接led,或三极管。7.推挽式复用功能:GPIO口被用作第二功能时的配置情况

  (即并非作为通用IO口使用),比如像片上外设的的UART,SPI模块对应的输出数据线。UART发送线就是复用功能,并且是输出方向。

  8.开漏复用功能:GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用),比如像片上外设的的IIC模块对应的数据线和时钟线,使用时候要外接上拉电阻。如IIC总线的数据线和时钟线就要配置这种模式。

  我们使用IO口输出一个电压值来控制LED灯亮灭,因此选择推挽输出工作模式。

  五、软件程序设计1)配置系统时钟RCC,打开PB、PE、PA端时钟。

  2)配置GPIO口PB5、PE5、PA5、PA6为推挽输出工作模式。3)IO口输出低电平控制灯亮,输出高电平控制灯灭。参考程序:main.c参考程序:#include“stm32f10x.h“//芯片寄存器映射头文件#include“led.h“//自己写的led头文件staticvoidDelay(u32i);//延时函数的声明/*主函数*/intmain(void){GPIO_LED_Init();//LED灯初

  3/6

  始化while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_5);//PB5管脚置

  0,LED1亮Delay(*****);//延时GPIO_SetBits(GPIOB,GPIO_Pin_5);

  //PB5管脚置1,LED1灭Delay(*****);//延时

  GPIO_ResetBits(GPIOE,GPIO_Pin_5);//PE5管脚置0,LED2亮

  Delay(*****);//延时GPIO_SetBits(GPIOE,GPIO_Pin_5);//PE5管脚

  置1,LED2灭Delay(*****);GPIO_ResetBits(GPIOA,GPIO_Pin_5);

  Delay(*****);GPIO_SetBits(GPIOA,GPIO_Pin_5);Delay(*****);

  GPIO_ResetBits(GPIOA,GPIO_Pin_6);

  Delay(*****);

  GPIO_SetBits(GPIOA,GPIO_Pin_6);Delay(*****);}}/*延时函数*/

  staticvoidDelay(u32i){for(;ii--);}led.c参考程序:

  /****************************************************函数名:

  GPIO_LED_Init形参:无返回值:无函数功能:对4个LED灯

  进行初始化,并且关闭所有的led灯

  ****************************************************/#include

  “stm32f10x_gpio.h“voidGPIO_LED_Init(void){GPIO_InitTypeDef

  GPIO_InitStructure;//对GPIOB口的时钟打开

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2P

  eriph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//把IO口配置为

  输出模式,输出速度50MhzGPIO_InitStructure.GPIO_Mode=

  

篇十六:GPIO实验报告

 GPIO控制实验实验报告

  三、实验效果分析(包括仪器设备等使用效果)一、实验效果分析1、在进行实验时要严格按照实验步骤进行实验,否则试验程序出错则实验效果会发生偏差。

  2、由于本实验属于硬件实验的范畴,所以实验起初时要先设定实验属于硬件实验,而不是直接进行。

  3、经过一系列的调制修改,实验达到了要求的效果,实验成功。教师评语指导老师年月日江西师范大学物理与通信电子学院教学实验报告通信工程专业2013

  年11月26日实验名称GPIO控制实验指导老师姓名年级11级学号成绩一、预习部分1、实验目的2、实验基本原理3、主要仪器设备(含必要的元器件、工具)一、实验目的:1、了解GPIO片上外设2、掌握延时程序应用3、用GPIO口实现LED指示灯控制。二、实验基本原理:通用目的输入输出片内外设提供了专用的通用目的引脚,可以配置位输入或输出。当配置为一个输出时,用户可以写一个内部寄存器以控制输出引脚上驱动的状态。当配置为输入引脚时,用户可以通过内部寄存器的状态检测到输入的状态。另外,GPIO片内外设可以用不同的中断/事件产生CPU中断和EDMA事件。一旦在GPIO使能寄存器被使能,GPIO引脚可以用作通用目的输入/输出。用户可以使用GPIO方向寄存器独立配置每条GPIO引脚为输入或输出。当配置为输出(GPXDIR位=1),GPIO值寄存器(GPVAL)的GPXVAL位的值就被送到相应的GPn引脚。当配置为输入(GPXDIR位=0)时,输入状态可以从相应的GPXVAL读取TMS320VC5502有1-位通用输出引脚XF和8-位通用I/O引脚GPIO[7:0],其中GPIO3、GPIO5与McBSP2复用引脚。SEED-DEC5502模板上这些引脚的使用情况如下:XF用于点亮LED指示灯D1。XF=1,点亮;XF=0,熄灭。GPIO[2:0]:经电平转换后连至外设扩展总线的备用引脚。GPIO3:与McBSP2的CLKX2复用引脚,当配置为GPIO3时,用作COM1的。GPIO4:经电平转换后连至外设扩展总线的备用引脚。GPIO5:与McBSP2的FSX2复用引脚,当配置为GPIO5时,用作COM1的。GPIO6:经电平转换后连至外设扩展总线的备用引脚。GPIO7:用于点亮LED指示灯D5。XF=1,点亮;XF=0,熄灭。通过本实验,要求掌握GPIO口的应用;熟悉延时程序的应用。1、5502_GPIO.c:这是实验的主程序包含系统初始化,GPIO引脚点亮程序等;2、vectors.s55:

  快乐分享知识无限!

  包含5502的中断向量表;3、SEED_DEC5502.cmd:声明了系统的存储器配置与程序各段的连接关系。三、主要仪器设备计算机、ccs软件二、实验操作部分1、实验数据、表格及数据处理2、实验操作过程(可用图表示)3、结论一、实验操作过程1.打开CCS,进入CCS的操作环境。2.装入DEC5502_GPIO.pjt工程文件,添加SEED_DEC5502.gel文件。3.装载程序DEC5502_GPIO.out,进行调试。4.在5502_LED.c程序的第69行delay();处,第72行delay();处,第75行delay();处,第78行delay();处设置断点。5.运行程序,程序会停在第一个断点处,关闭指示灯D1;6.继续运行程序,程序每次都会停在第二个断点处,点亮指示灯D1;7.继续运行程序,程序每次都会停在第三个断点处,点亮指示灯D5;8.继续运行程序,程序每次都会停在第四个断点处,关闭指示灯D5;9.也可直接执行程序,观察指示灯D1,D5的闪烁情况。二、实验截图

  快乐分享知识无限!

  

篇十七:GPIO实验报告

 GPIO实验报告一、实验步骤1、先把板子连到电脑上,然后打开设备管理器,查看EMULATOR是否连接完毕,若连接上了,设置仿真目标板。2、打开CCS的软件,点击Debug中的connect,然后将点开菜单栏project的open,选择所要打开的工程文件,在.c格式的文档中修改程序,程序修改完毕后点击菜单栏的“编译文件”,在下边的方框里查看编译结果,若有错误,双击错误项,指针会自动跳回程序中的错误行进行修改。若编译没有错误,再点击“增量构建”。3、点击File中的“loadprogramme”,跳出一个窗口,选择以.out结尾的文件,编辑的程序输出到板子上。4、测“CLOCKOUT”输出波形。先根据原理图找出CLOCKOUT的管脚,然后将示波器连到此管脚,同时另一个夹子接地。观察示波器上的波形。二、实验程序/*ThisisanexampleforgpioofC5509/*----------------------------------------------------------------------------*/#include<csl.h>#include<csl_pll.h>#include<csl_chip.h>#include<csl_gpio.h>*/

  voiddelay();/*锁相环的设置*/PLL_ConfigmyConfig={0,//IAI:thePLLlocksusingthesameprocessthatwasunderway//beforetheidlemodewasentered1,//IOB:IfthePLLindicatesabreakinthephaselock,//itswitchestoitsbypassmodeandrestartsthePLLphase-locking//sequence1,//PLLmultiplyvalue;multiply24times倍频数,用于设置仿真器CPU的工作频率。1//Divideby2PLLdividevalue;itcanbeeitherPLLdividevalue//(whenPLLisenabled),orBypass-modedividevalue//(PLLinbypassmode,ifPLLmultiplyvalueissetto1)};main(){/*初始化CSL库*/CSL_init();/*设置系统的运行速度为144MHz*///PLL_config(&myConfig);/*确定方向为输出*///ioportunsignedint*IODIR;//IODIR=(unsignedint*)0x3400;

  //////

  ioportunsignedint*IODATA;IODATA=(unsignedint*)0x3401;*clkmd=0x21f3;//晶振12Hz,9Hz=0x21f3;//144MHz=0x2613GPIO_RSET(IODIR,0xFF);while(1){GPIO_RSET(IODATA,0x0c0);delay();GPIO_RSET(IODATA,0x80);delay();}

  }voiddelay()//设置延迟程序,修改j,k的循环次数,可改变延迟时间{Uint32j=0,k=0;for(j=0;j<0x30;j++){for(k=0;k<0xfff;k++){}}}/******************************************************************************\*Endofgpio.c\******************************************************************************/三、实验结果

  四、实验收获在此次试验中,我学会了怎么设置CPU的工作频率以及修改延迟时间。但对老师后来讲得设置断点不是很清楚,老师也对我们组进行了批评。我们组在老师检查以后,重新认识并学习了断点的相关知识和如何设置断点,实现单步程序运行。断点设置步骤如下:断点设置要求:不要设在跳转语句上不要设在块重复语句的倒数1、2条语句上若断点设置在for循环语句上,双击语句左边灰色区域,出现一个红色圆圈,然后点击左边工具栏的第一个图标,实现单步执行。点击菜单栏View中的WatchWindow,可在下方的方框里查看变量变化。

  

篇十八:GPIO实验报告

 入实验

  实验四GPIO输

  欧阳光明(2021.03.07)实验目的1、能够使用GPIO的输入模式读取幵关信号。2、掌握GPIO相关寄存器的用法和设置。3、掌握用C语言编写程序控制GPIOo二.实验环境PC机一台

  ADS1.2集成开发环境一套EasyARM2131教学实验平台一套三.实验内容1•实验通过跳线JP8连接KEY1与P0.16,程序检测按键KEY1的状态,控制蜂鸣器BEEP的鸣叫。按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣。(调通实验后,改为KEY3键进行输入)。2.当检测到KEY1有按键输入时点亮发光二极管LED4并控制蜂鸣器响,软件延时后关掉发光管并停止蜂鸣,然后循环这一过程直到检测按键没有输入。(键输入改为键KEY4,发光管改为LED6)o

  3.结合实验三,当按下按键Keyl时,启动跑马灯程序并控制蜂鸣器

  响,软件延时后关掉发光管并停止蜂鸣,然后循环这一过程直到检测按键再次按下。四.实验原理

  当P0□用于GPIO输入时(如按键输入),内部无上拉电阻,需要加上拉电阻,电路图参见图4.2。

  进行GPIO输入实验时,先要设置IODIR使接□线成为输入方式,然后读取IOPIN的值即可。

  图4.2按键电路原理图实验通过跳线JP8连接KEY1.P0.16,程序检测按键KEY1的状态,控制蜂鸣器BEEP的鸣叫。按下KEY1,蜂鸣器鸣叫,松幵后停止蜂鸣。在这个实验中,需要将按键KEY1输入口P0.16设为输入□而蜂鸣器控制口P0.7设置为输出口。蜂鸣器电路如图4.3所示,当跳线JP6连接蜂鸣器时,P0.7控制蜂鸣器,低电平时蜂鸣器鸣叫。LED灯电路如图4.4所示,低电平时灯亮。

  图4.3蜂鸣器控制电路图4.4LED控制电路程序首先设置管脚连接寄存器PINSEL0和PINSEL1,设置P0.16为输入设置P0.7,P1.21为输出。然后检测端口卩0.16的电平,对P0.7,P1.21进行相应的控制,流程图如图4.5所示,实现程序见程序清单4.1。

  图4.5按键输入实验流程图五、实验步骤.源代码及调试结果

  内容1实验步骤

  ①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_keyo

  ②在user组里编写主程序代码main.c。③选用DebuglnFLASH生成目标,然后编译链接工程。④将EasyARM教学实验开发平台上的相应管脚跳线短接。⑤选择Project->Debug,启动AXD进行JLINK仿真调试。⑥全速运行程序,程序将会在main.c的主函数中停止。如下图所加:⑦单击ContextVariable图标按钮(或者选择Processor

  Views->Variables)打开变量观察窗口,通过此窗□可以观察局部变量和全局变量。选择SystemViews->DebuggerInternals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。通过变量窗□可以观察变量BEEP、KEY1等的值和ARM7微控制

  器的片内外寄存器窗口。如下图所示:⑧可以单步运行程序,先按下Keyl,观察IOOPIN寄存器的值,

  然后断开Keyl,观察IOOPIN寄存器的值。可以设置/取消断点;或者

  *欧阳光明*创编

  全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制

  是否正确。如下图所示:

  图4.6未按下Keyl时IOOPIN的值的值

  图4.7按下Keyl时IOOPIN

  由上两图可知,当按下Keyl时,IOOPIN寄存器的第16位由1变为0(F变为E),keyl与P0.16相连,按下Keyl时,P0.16管脚输出电平由1变为0,寄存器值变化,蜂鸣器响,说明控制是正确的。现象描述:按下KEY1,蜂鸣器鸣叫,松幵后停止蜂鸣。

  源代码:

  #include"config.h"constuint32BEEP=1«7;//P0.7控制蜂鸣器

  constuint32KEY1=1«16;//P0」6连接KEY1(改为KEY3时,只需“constuint32KEY1=1«16”改为“const

  uint32KEY3=1«18w,其余不变。)

  /

  ■士■士

  %•丄■■士

  ■士

  %J”•士■士

  ■丄"■士

  J.■士■士

  •土

  f

  彳・

  彳、哼.

  ■士■土

  *1*

  •土%L*

  *1*

  #7^#1%#T*

  #Tv

  #Tv

  **函数名称:main()

  糾函数功能:GPIO输入实验测试。

  糾检测按键KEY1OKEY1按下,蜂鸣器蜂鸣,松开后停止蜂鸣。糾跳线说明:把JP8的KEY1跳线短接,JP11连接蜂鸣器。

  •士

  •["■士■士■士•士■]"%■士■士

  ■["%•士•士■]"%■士■士

  叫・

  ■]"■丄.•["■士■土

  #r^彳.彳.

  ■]"•士

  #Tv

  ■[“■]“•土•土%f>%■士■”•士■士

  ■”■士

  #r%#r%

  ■]“•”•士■士!

  V#v^>

  intmain(void)

  {PINSEL0=0x00000000;//所有管脚连接GPIOPINSEL1=0x00000000;IOODIR=BEEP;//蜂鸣器控制□输出,其余输入while(1){if((IOOPIN&KEY1)==0)IOOCLR=BEEP;//如果KEY1按下,蜂鸣器鸣叫elseIOOSET=BEEP;//松幵则停止蜂鸣

  

篇十九:GPIO实验报告

 班级

  学号

  姓名

  实验日期

  室温

  大气压

  成绩

  实验题目:GPIO输出实验——按键输入检测实验

  一、实验目的:

  1、通过本实验学会ARM7.0软件的安装及掌握对该软件和EasyJTAG仿真器的使用;2、了解EasyARM2131开发板硬件结构,掌握各引脚功能和接线;3、掌握相关实验的程序,并能作出简单的修改并实现其功能;4、掌握GPIO输出实验---按键输入的检测。二、实验仪器:EasyARM2131开发板一块及相关导线、计算机一台三、实验原理:下面是工程窗口中的图标介绍:

  如图4.2所示,当P0口连接GPIO且用于输入时,如用于检测按键的时候,由于P0口作GPIO输入时,内部无上拉内阻,所以需要加10K左右的上拉电阻,把I/O口拉到高电平。

  当P0口用于GPIO输入时(如按键输入),内部无上拉电阻,需要加上拉电阻,电路如图4.14

  图4.14按键输入原理图实验通过跳线JP8连线KEY3_P0.18,程序检测按键KEY3的状态,控制蜂鸣器BEEP的蜂鸣。在实验中,需要将按键KEY3输入口P0.18设为输入口,而蜂鸣器控制口P0.7设为输出口。蜂鸣器电路如图1.11所示,当跳线JP6连线蜂鸣器时,P0.7控制蜂鸣器,低电平时蜂鸣器蜂鸣。

  程序首先设置管脚连线寄存器PINSEL0和PINSEL1,设置P0.7为输出。然后检测端口P0.18的电平,对P0.7进行相应的控制,流程图如图4.15所示,实现程序见程序清单4.7。

  四、实验步骤:1、接好开发板与计算机的相关接线2、打开已安装好的H-JTAG和H-Flasher软件,并在H-Flasher软件中选择FlasherSelation→PHILIPS→LPC2318;然后再选择Programming→check。

  操作过程中出现的窗口如下图(1)、(2)所示:

  图(1)

  图(2)

  3、MetrowerksCodeWarriorforARMDeveloperSuitev1.2软件,点击File选择Open打开GPIO输出实验——按键输入检测实验文件夹,选择GPIO_Leds8-2.mcp文件,双击main.c,打开主程序,并运行检查是否出现错误,无误后点击Dubeg按钮;

  操作过程中的窗口如下图(3)、(4)所示:

  图(3)

  图(4)

  4、出的AXD窗口中选择Options,点击configuretarget后,在跳出的choosetarget窗口中点击Ok,点击运行按钮(若点击运行按钮,开发板中的LED不会亮)则在PIO_Leds8-a.mcp窗口中点击Run按钮运行,并观察开发板上出现的现象是否符合实验要求

  窗口如下图(5)所示:

  图(5)

  5、程序清单4.7:按键输入程序如下

  #include"config.h"constuint32BEEP=1<<7;constuint32KEY1=1<<18;/*

  //P0.7控制蜂鸣器//P0.18连接KEY3

  ***********************************************************

  **********************************************

  **函数名称:main()

  **函数功能:GPIO输入实验测试。

  **

  检测按键KEY3。KEY3按下,蜂鸣器蜂鸣,松开后停

  止蜂鸣。

  **跳线说明:把JP8的KEY3跳线短接,JP11连接蜂鸣器。

  ***********************************************************

  **********************************************

  */

  intmain(void)

  {

  PINSEL0=0x00000000;

  //所有管脚连接GPIO

  PINSEL1=0x00000000;

  IO0DIR=BEEP;

  //蜂鸣器控制口输出,其余输入

  while(1)

  {

  if((IO0PIN&KEY3)==0)IO0CLR=BEEP;//如果KEY3

  按下,蜂鸣器鸣叫

  elseIO0SET=BEEP;

  //松开则停止蜂鸣

  }

  return0;

  }

  五、实验结果心得体会:

  1、修改程序之后的实验现象是:如果KEY1按下,蜂鸣器蜂鸣;松开则停止蜂鸣。2、实验心得(1)本实验可通过改变不同的I/O接口时,其按下不同的按键,一

  样来实现蜂鸣器的响与停。如本实验也口P0.17连接KEY2,以此类推。(2)通过本实验不仅懂得了对RAM7.0软件的安装和使用,并对EasyARM2131开发板的基本结构有了一定的认识,更重要的是对其实验程序如何实验其功能有了一定的认识,并能对其某一句程序作相应的修改,使其实现我们所需的功能。(3)通过此实验,我也初步了解了GPIO各寄存器的功能与应用,知道了GPIO的应用电路,此按键输入检测实验是需要上拉电阻的。另外,我们可由书本知识可知,也有无需上拉电阻的GPIO。

  

推荐访问:GPIO实验报告 实验 报告 GPIO

本文来源:http://www.wd2050.com/zhuantifanwen/diaochabaogao/2022/1115/57535.html

推荐内容