嵌入式GPIO课程设计报告

合集下载

《嵌入式系统原理与应用》实验报告01-GPIO输出控制实验

《嵌入式系统原理与应用》实验报告01-GPIO输出控制实验
二、实验设备(环境)及要求
硬件:PC机;
软件:PC机操作系统windows XP,ADS1.2集成开发环境,Proteus软件。
3、实验内容与步骤
实验内容:
LPC2138外接3个按键,4个LED灯,实现不同流水灯的效果。
4、实验结果与数据处理
1.实验连接图
图1 实验原理图
2.程序代码
#include "config.h"
图3.3:模式3下蓝灯亮起
图3.4:模式3下绿灯亮起
5、分析与讨论
在这一次实验中,我学会了通过教程下载并安装了ADS和Proteus软件,同时根据录播,一步一步地熟悉两个软件的时候,同时也完成了利用仿真实验模拟了GPIO输出控制。初步掌握并理解了Proteus仿真软件的使用,对ARM7有了进一步的了解,为之后的学习打下了基础。
}
void LED_3(void)
{
IO0SET = 0x0001;
delay(1000);
IO0CLR = 0x0001;
IO0SET = 0x0040;
delay(1000);
IO0CLR = 0x0040;
IO0SET = 0x0008;
delay(1000);
IO0CLR = 0x0008;
delay(1000);
IO0CLR = 0x0008;
IO0SET = 0x0040;
delay(1000);
IO0CLR = 0x0040;
IO0SET = 0x0200;
delay(1000);
IO0CLR = 0x0200;
}
void LED_2(void)
{
IO0SET = 0x0200;

GPIO实验报告(Word最新版)

GPIO实验报告(Word最新版)

GPIO实验报告(Word最新版)GPIO(General Purpose Input/Output)是指通用输入输出口,可以连接各种传感器、执行器以及外部设备等,用于实现与外部世界的交互。

GPIO在嵌入式系统中起到了非常重要的作用,本文将介绍基于树莓派的GPIO实验。

实验目的通过本次实验,了解如何在树莓派上使用GPIO控制LED灯的开关,同时熟悉GPIO编程接口的使用方法。

实验器材与环境1.树莓派4B开发板一块2.亮LED灯(红色)一盏3.电阻220欧姆两个4.面包板一个1.树莓派系统:Raspbian Buster with Desktop(full)2.编程语言:Python3.x实验步骤1.硬件连接首先需要将亮LED灯和220欧姆电阻连接到树莓派的GPIO口上。

因为树莓派的GPIO 输出电压是3.3V,而LED灯的电压是2.0V,因此需要使用电阻将电压控制在合适范围内,以免LED灯过亮或过暗。

连接的具体方式如下:将LED灯的正极连接到树莓派的GPIO17口(BCM编码方式下的编号),负极连接到220欧姆电阻上,再将电阻的另一端连接到树莓派的GND口(BCM编码方式下的编号)。

2.软件配置在树莓派的终端窗口中输入以下指令,安装GPIO库和Python语言的GPIO编程接口:```sudo apt-get updatesudo apt-get install python3-gpiozero```安装完成后,我们就可以通过Python代码来控制树莓派的GPIO口了。

打开新的终端窗口,输入以下命令:```sudo nano led.py```其中led.py是我们将要编写的Python程序的文件名,可以自行命名。

在终端窗口中会打开一个文本编辑器,在其中输入以下代码:led = LED(17)while True:led.on()sleep(1)led.off()sleep(1)```代码解释:1.首先从GPIO库中导入LED类和sleep函数;2.定义led变量,将它赋值为LED(17),代表树莓派的GPIO17口控制LED灯的开关;3.在无限循环中,通过led.on()和led.off()来控制LED灯的开和关,同时通过sleep 函数来产生延时效果。

嵌入式系统GPIO 输入输出实验报告

嵌入式系统GPIO 输入输出实验报告

真验四GPIO 输进真验之阳早格格创做一、真验手段1、不妨使用GPIO的输进模式读与开闭旗号.2、掌握GPIO相闭寄存器的用法战树坐.3、掌握用C谈话编写步调统造GPIO.二、真验环境PC机一台ADS 1.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.4 LED 统造电路步调最先树坐管足连交寄存器PINSEL0 战PINSEL1,树坐P0.16 为输进,树坐为输出.而后检测端心P0.16 的电仄,对于举止相映的统造,过程图如图 4.5所示,真止步调睹步调浑单 4.1.图 4.5按键输进真验过程图五、真验步调、源代码及调试截止真质1真验步调①开用ADS1.2IDE集成开垦环境,采用ARM ExecutableImage for lpc2131工程模板修坐一个工程BEEP_key.②正在user组里编写主步调代码main.c.③采用DebugInFLASH死成目标,而后编译链交工程.④将EasyARM教教真验开垦仄台上的相映管足跳线短交.⑤采用Project->Debug,开用AXD举止JLINK仿真调试.⑥齐速运止步调,步调将会正在main.c的主函数中停止.如下图所示:⑦单打Context Variable图标按钮(大概者采用ProcessorViews->Variables)挨开变量瞅察窗心,通过此窗心不妨瞅察局部变量战局部变量.采用System Views->Debugger Internals 即可挨开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"const uint32 BEEP = 1 << 7; // P0.7 统造蜂鸣器const uint32 KEY1 = 1 << 16; // P0.16 连交KEY1(改为KEY3时,只需“const uint32 KEY1 = 1 << 16”改为“const uint32 KEY3 = 1 << 18”,其余稳定.)/***************************************************** **************************************** 函数称呼:main()** 函数功能:GPIO 输进真验尝试.** 检测按键KEY1.KEY1 按下,蜂鸣器蜂鸣,紧开后停止蜂鸣.** 跳线证明:把 JP8 的KEY1 跳线短交,JP11 连交蜂鸣器.****************************************************** *************************************/int main (void){ PINSEL0 = 0x00000000; // 所有管足连交GPIOPINSEL1 = 0x00000000;IO0DIR = BEEP; // 蜂鸣器统造心输出,其余输进while (1){ if ((IO0PIN & KEY1) == 0) IO0CLR = BEEP; // 如果KEY1 按下,蜂鸣器鸣喊else IO0SET = BEEP; // 紧开则停止蜂鸣}return 0;}真质二真验步调①开用ADS1.2IDE集成开垦环境,采用ARM ExecutableImage for lpc2131工程模板修坐一个工程BEEP_key.②正在user组里编写主步调代码main.c.③采用DebugInFLASH死成目标,而后编译链交工程.④将EasyARM教教真验开垦仄台上的相映管足跳线短交.⑤采用Project->Debug,开用AXD举止JLINK仿真调试.⑥齐速运止步调,步调将会正在main.c的主函数中停止.如下图所示:⑦单打Context Variable图标按钮(大概者采用Processor Views->Variables)挨开变量瞅察窗心,通过此窗心不妨瞅察局部变量战局部变量.采用System Views->Debugger Internals 即可挨开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"const uint32 BEEP = 1 << 7; // P0.7 统造蜂鸣器const uint32 KEY1 = 1 << 16; // P0.16 连交KEY1(改为KEY4按键时,只需把上句代码改为“const uint32 KEY4=1<<19”,其余稳定)const uint32 LEDS4= 1 << 21; // P1[21]统造LED4,矮电仄面明(改为LED6时,只需把上句代码改为“const uint32 LED6=1<<23”,其余稳定.)/***************************************************** ************************ 函数称呼:main()** 函数功能:GPIO 输进真验尝试.** 检测按键KEY1.KEY1 按下,蜂鸣器蜂鸣,紧开后停止蜂鸣.** 跳线证明:把 JP8 的KEY1 跳线短交,JP11 连交蜂鸣器.****************************************************** *************************************/int main (void){Uint32 i;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++); // 硬件延时}return 0;}真质三真验步调①开用ADS1.2IDE集成开垦环境,采用ARM ExecutableImage for lpc2131工程模板修坐一个工程BEEP_key.②正在user组里编写主步调代码main.c.③采用DebugInFLASH死成目标,而后编译链交工程.④将EasyARM教教真验开垦仄台上的相映管足跳线短交.⑤采用Project->Debug,开用AXD举止JLINK仿真调试.⑥齐速运止步调,步调将会正在main.c的主函数中停止.如下图所示:⑦单打Context Variable图标按钮(大概者采用ProcessorViews->Variables)挨开变量瞅察窗心,通过此窗心不妨瞅察局部变量战局部变量.采用System Views->Debugger Internals 即可挨开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"const uint32 BEEP = 1 << 7; // P0.7 统造蜂鸣器const uint32 KEY = 1 << 16; // P0.16 连交KEY1const uint32 LEDS8 = 0xFF << 18; // P1[25:18]统造LED8~LED1,矮电仄面明void DelayNS(uint32 dly){ uint32 i;for(; dly>0; dly--){for(i=0; i<50000; i++);}}/***************************************************** **************************************** 函数称呼:liushuideng()** 函数功能:流火灯隐现真验.** 调试证明:连交跳线 JP12 至LED8~LED1.****************************************************** *************************************//* 流火灯格式,矮电仄面明,注意调用时间用了与反支配 */ const uint32 LED_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 // 从二边叠加后递减};int liushuideng(void){ uint8 i;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);}}return 0;}//主函数int main(void){uint32 i;PINSEL0 = 0x00000000; // 所有管足连交GPIOPINSEL1 = 0x00000000;IO0DIR = BEEP; // 蜂鸣器统造心输出0while (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++); // 硬件延时}return 0;}六、思索题1、如果将P0.30树坐为GPIO输进模式,且管足悬空,那么读与P0.30得到的值是0仍旧1?大概者是不决定?当管足悬空时,该管足有大概是下电仄也有大概是矮电仄.读与IO0PIN的值本来不克不迭决定管教的值.偶尔管足是下电仄,读与到的纷歧定是下电仄.2、如果需要读与目前P0.7的输出值(不是管足上的电仄),怎么样真止?将该管足与一个LED连交,若LED明,则输出值为0,可则为1.。

嵌入式系统GPIO输入输出实验报告

嵌入式系统GPIO输入输出实验报告

实验四GPIO 输入实验一、实验目的1、能够使用GPIO的输入模式读取开关信号。

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

3、掌握用C语言编写程序控制GPIO。

二、实验环境PC机一台ADS 1.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.4 LED 控制电路程序首先设置管脚连接寄存器PINSEL0 和PINSEL1,设置P0.16 为输入,设置P0.7,P1.21 为输出。

然后检测端口P0.16 的电平,对P0.7, P1.21进行相应的控制,流程图如图4.5 所示,实现程序见程序清单4.1。

gpio实验报告总结

gpio实验报告总结

GPIO实验报告总结一、实验目的与背景本次GPIO实验的主要目的是深入了解GPIO(General Purpose Input/Output)接口的工作原理和应用,通过实际操作和数据分析,提高对嵌入式系统硬件接口的理解和掌握。

实验背景是基于当前嵌入式系统在各种应用中的普及,GPIO 接口作为其中重要的硬件接口,对于理解嵌入式系统的运作方式具有重要意义。

二、GPIO基础知识GPIO接口是一种通用输入输出接口,它允许CPU与外部设备或传感器进行通信。

通过设置GPIO引脚的电平状态,CPU可以向外部设备发送数据,同时也可以接收外部设备发送的数据。

在嵌入式系统中,GPIO接口被广泛应用于各种硬件设备的控制和数据采集。

三、实验设备与工具本次实验使用的设备包括开发板、杜邦线、电源适配器、串口调试工具等。

其中,开发板提供了丰富的GPIO接口和外设接口,方便我们进行实验操作。

串口调试工具用于实时监控和调试实验过程。

四、实验步骤与操作连接实验设备:将开发板与电源适配器连接,为开发板提供稳定的电源。

使用杜邦线连接开发板的GPIO接口和外设接口,确保连接可靠。

编写程序:根据实验要求,编写相应的程序代码。

在程序中,我们需要配置GPIO引脚的工作模式(输入或输出),并控制引脚的电平状态进行数据传输。

下载程序:将程序代码下载到开发板中,启动程序。

实验操作:通过串口调试工具观察程序的运行状态和GPIO引脚的电平变化。

根据实验要求,进行相应的操作,如读取传感器数据、控制外部设备等。

记录数据:在实验过程中,记录关键步骤的实验数据和结果,以便后续分析和解释。

五、实验数据与结果通过实验操作,我们获得了以下数据和结果:GPIO引脚配置成功,可以正常工作在输入或输出模式。

通过GPIO接口成功读取了传感器数据,数据准确无误。

通过GPIO接口成功控制了外部设备,实现了预期的功能。

在实验过程中,记录了详细的实验数据和结果,包括GPIO引脚的电平状态、传感器数据、外部设备控制状态等。

gpio实验报告

gpio实验报告

gpio实验报告GPIO实验报告引言:GPIO(General Purpose Input/Output)是通用输入/输出引脚的简称,是一种常用的数字接口技术。

在嵌入式系统和电子设计中,GPIO被广泛应用于与外部设备进行数据交互的过程中。

本实验报告将介绍GPIO的原理、应用以及实验过程和结果。

一、GPIO的原理和应用1.1 GPIO的原理GPIO是一种数字接口技术,通过控制电压的高低来实现数据输入和输出。

在嵌入式系统中,GPIO通常由微控制器或单片机提供,可以通过编程来控制GPIO 的状态。

GPIO引脚通常具有输入和输出两种模式,可以根据需要进行配置。

1.2 GPIO的应用GPIO在嵌入式系统和电子设计中有广泛的应用。

例如,可以使用GPIO将传感器的数据输入到微控制器,实现数据采集和处理;同时,也可以使用GPIO将微控制器的计算结果输出到执行器,实现控制功能。

此外,GPIO还可以用于控制LED灯、蜂鸣器等外部设备,实现各种交互效果。

二、实验过程和结果2.1 实验准备在进行GPIO实验之前,我们需要准备以下材料:- 一块可编程的嵌入式开发板- 杜邦线- LED灯- 电阻2.2 实验步骤1. 将LED灯的长脚连接到开发板的GPIO引脚上,短脚连接到电阻上,再将电阻的另一端连接到开发板的地线上。

2. 打开开发板的开发环境,创建一个新的项目。

3. 在项目中编写代码,配置GPIO引脚为输出模式。

4. 在代码中控制GPIO引脚的电平,使LED灯点亮。

5. 将代码下载到开发板上,观察LED灯是否亮起。

2.3 实验结果经过实验,我们成功地控制了GPIO引脚,使LED灯点亮。

这验证了GPIO的工作原理和应用。

三、实验总结通过本次实验,我们了解了GPIO的原理和应用,并成功地进行了实验验证。

GPIO作为一种常用的数字接口技术,在嵌入式系统和电子设计中具有重要的作用。

掌握GPIO的使用方法,可以实现与外部设备的数据交互和控制功能。

GPIO的使用实验报告

GPIO的使用实验报告

GPIO的使用实验报告本实验报告以“GPIO的使用”为主题,介绍了GPIO的基本概念、使用方法和在实际应用中的一些案例。

报告总共分为四个部分:介绍部分、实验原理、实验过程和实验结果分析。

一、介绍部分GPIO是General Purpose Input/Output的简称,中文名称为通用输入输出。

它是处理器芯片与外部电路之间的一个接口,可以通过编程来控制和读取电平状态。

通常情况下,GPIO的引脚既可以作为输入引脚,也可以作为输出引脚。

二、实验原理三、实验过程1. 设置GPIO引脚模式:在Python中,可以使用RPi.GPIO库来控制GPIO引脚。

首先需要导入RPi.GPIO库,然后使用GPIO.setmode(GPIO.BCM)来设置编码方式为BCM。

接着可以使用GPIO.setup(函数来设置引脚的输入/输出模式。

例如,GPIO.setup(17, GPIO.OUT)将引脚17设置为输出模式。

2. 控制输出引脚:使用GPIO.output(函数可以控制引脚的电平状态。

例如,GPIO.output(17, GPIO.HIGH)将引脚17设置为高电平,GPIO.output(17, GPIO.LOW)将引脚17设置为低电平。

3. 读取输入引脚:使用GPIO.input(函数可以读取引脚的电平状态。

例如,state = GPIO.input(17)将引脚17的电平状态赋值给变量state。

四、实验结果分析在实验中,我们先将引脚设置为输出模式,然后控制引脚输出高低电平,观察LED等外部设备的亮灭情况。

接着将引脚设置为输入模式,读取引脚的电平状态,判断外部设备的开关状态。

通过这些操作,我们可以了解到GPIO的基本使用方法和在实际应用中的一些场景。

总结:本次实验通过树莓派和GPIO库控制了GPIO引脚的输入和输出。

实验结果表明,我们可以通过编程实现对GPIO引脚的控制,进而控制外部设备的工作状态,实现了与外部电路的交互。

嵌入式gpio实验总结

嵌入式gpio实验总结

嵌入式gpio实验总结嵌入式GPIO实验总结嵌入式系统是指将计算机硬件系统集成在其他电子设备中的计算机系统。

在嵌入式系统中,GPIO(General Purpose Input/Output)是一种通用输入输出接口,用于与外部设备进行数字信号的交互。

在本次实验中,我们通过使用嵌入式GPIO接口,控制外部设备的输入和输出,以实现特定功能。

在实验过程中,我们首先了解了GPIO的基本原理和使用方法。

GPIO接口通常由一组引脚组成,每个引脚可以配置为输入或输出模式。

通过配置引脚的模式和状态,我们可以向外部设备发送信号或接收外部设备发送的信号。

在配置GPIO引脚之前,我们需要确定引脚的编号和所属的GPIO 控制器。

不同的嵌入式平台或开发板可能具有不同的GPIO引脚编号和控制器。

因此,在实验开始之前,我们需要查阅相关文档或资料,以确定正确的引脚编号和控制器。

在配置GPIO引脚之后,我们可以使用相应的API函数来读取或写入引脚的状态。

对于输出模式的引脚,我们可以使用API函数将引脚状态设置为高电平或低电平,从而控制外部设备的行为。

对于输入模式的引脚,我们可以使用API函数读取引脚的状态,以获取外部设备发送的信号。

在实验过程中,我们使用了一些常见的外部设备,如LED灯、按钮和蜂鸣器,来演示GPIO的使用。

通过配置GPIO引脚,并使用相应的API函数,我们成功地控制了LED灯的亮灭、按钮的检测和蜂鸣器的鸣叫。

这些操作都是通过对GPIO引脚的状态进行读取或写入实现的。

通过本次实验,我们深入了解了嵌入式GPIO的原理和使用方法。

GPIO接口在嵌入式系统中具有广泛的应用,可以用于控制各种外部设备,实现各种功能。

掌握了GPIO的使用,我们可以根据实际需求,灵活地配置和控制嵌入式系统的输入输出,从而实现更多的功能和应用。

总结起来,嵌入式GPIO实验是学习嵌入式系统的重要一环。

通过实验,我们了解了GPIO的基本原理和使用方法,掌握了配置和控制GPIO引脚的技巧。

《嵌入式系统原理及应用》实验---通用目的输入输出口 GPIO 使用实验

《嵌入式系统原理及应用》实验---通用目的输入输出口 GPIO 使用实验

1、熟悉 GPIO 内部结构和工作模式、2、掌握基于库函数的开发方法3、掌握 GPIO 输入输出控制STM32 固件库向下实现与寄存器的直接相关操作, 向上为用户提供配置寄存 器的标准接口。

Typedef struct {U16 GPIO_Pin;GPIOSpeed_TypeDef GPIOMode_TypeDef } GPIO_InitTypeDef; GPIO_SetBits GPIO_Speed; GPIO_Mode;1LCDGPIO_SetBits(GPIOA,GPIO_Pin_8); //PA8=1 ,背光灯亮;GPIO_ResetBits(GPIOA,GPIO_Pin_8); //PA8=0 ,背光灯灭。

(1)复制创建的工程模板文件夹到桌面,并将文件夹改名为“LCD 背光控制”。

将原工程模板编译一下,直到没有错误和警告为止。

(2)在main.c 文件中输入如下源程序,对GPIO 管脚进行初始化,给PA.8 引脚赋值控制LCD 背光亮灭。

编译工程,如没有错误,则会在output 文件夹中生成“工程模板.hex”文件,如有错误则修改源程序直至没有错误为止。

(3)将生成的目标文件通过ISP 软件下载到开发板微控制器的FLASH 存储器当中,复位运行,检查实验效果。

LED在STM32 的工程里添加用户自己的.c 和.h 文件,保存在外设文件夹内。

(1)新建led.c 和led.h 文件并将其保存在APP 文件夹led 目录中。

(2)编写led.c 源代码,保存。

(3)编写led.h 源代码,保存在MDK 中设置包含头文件路径。

(4)编写主函数,完成LCD 背光控制。

《嵌入式系统原理与应用》实验报告03-GPIO输出控制实验1

《嵌入式系统原理与应用》实验报告03-GPIO输出控制实验1

《嵌入式系统原理与应用》实验报告
实验序号:03 实验项目名称:GPIO 输入输出控制实验
学号姓名专业、班
实验地点实验楼1#318 指导教师黄鹏程实验时间
一、实验目的
1. 掌握LPC2200 专用工程模板的使用;
2. 掌握Proteus仿真软件的安装和使用;
3. 熟悉LPC2000 系列ARM7 微控制器的GPIO 控制。

二、实验设备(环境)及要求
硬件:PC机;
软件:PC机操作系统windows XP,ADS1.2集成开发环境,Proteus软件。

三、实验内容与步骤
实验内容:
编写程序配置LPC2138的P0.2,P0.5为GPIO功能,并P0.2驱动LED灯,P0.5外接按键,实现按下按键,使LED灯闪烁的效果。

四、实验结果与数据处理
#include "config.h"
#define PIN_P05 0x00000020
int main (void)
{
int i;
PINSEL0=PINSEL0 & 0xfffff3cf;
IO0DIR=IO0DIR|0x04 ;
while(1)
{
if((IO0PIN & PIN_P05)==0) IO0SET=0X04; else IO0CLR=0x04;
for(i=0;i<1000;i++);
}
return 0;
}
实验结果如图所示
五、分析与讨论
六、教师评语
成绩
签名:
日期:。

嵌入式GPIO实验

嵌入式GPIO实验

西安郵電大学嵌入式系统设计实验报告题目:GPIO、定时器设计实验院系名称:电子信息学院专业名称:电子与通信工程班级:电研12学生姓名:武永仙学号:1202810056指导教师:王忠民设计起止时间:2013年2月25日~2013年6月14日实验二GPIO实验一、实验目的1、熟悉LPC2000系列ARM7微控制器的GPIO控制,熟悉ARM 芯片I/O口编程配置方法。

2、熟悉LPC2000 系列ARM7 微控制器的定时器0的基本设置及匹配输出应用。

3、学习ARM汇编语言程序设计,包括GPIO和定时器的设计,及在EasyARM2131上进行调试和运行。

二、实验内容硬件:嵌入式实验平台一套、仿真器一个、PC 机一台。

软件:Windows 98/2000/NT/XP 操作系统、仿真器驱动程序、ADS 开发软件一套控制嵌入式实验箱上的LED 轮流点亮。

三、概要设计S3CRRB0X 芯片上共有71个多功能I/O 引脚,他们分别为7 组I/O 端口:2个9 位I/O 端口(端口E 和F)2个8 位I/O 端口(端口D 和G)1个16 位I/O 端口(端口C)1个10 位I/O 端口(端口A)1个11 位I/O 端口(端口B)每组端口都可以通过软件配置寄存器来满足不同系统合设计的需要。

在运行主程序之前,必须先对每一个用到的引脚的功能进行设置。

如果某些引脚的附庸功能没有使用,那么可以先将该引脚设置为I/O 口。

S3C44B0X 芯片与端口相关的寄存器:(1)端口控制寄存器(PCONA~G):在S3C44B0X 芯片中,大部分引脚是使用多路复用的,所以要确定每个引脚的功能。

PCONn(端口控制寄存器)能够定义引脚功能。

如果PG0~PG7 作为掉电模式下的唤醒信号,那么这些端口必须配置成中断模式。

(2)端口数据寄存器(PDATA~G):如果端口定义为输出口,那么输出数据可以写入PDATn 中相应的位;如果端口定义为输入口,那么输入数据可以从PDATn 相应的位中读入。

嵌入式实验-GPIO与系统状态

嵌入式实验-GPIO与系统状态

嵌入式系统实验报告实验名称:GPIO与系统状态实验目的●通过FSM4 实验板了解实验的软硬件环境,熟悉MDK 开发环境的使用。

●学习查阅文档和数据手册,获取需要的信息。

●学会使用C 语言直接控制IO 寄存器完成功能。

●掌握基本的软件编写与调试方式。

●学会STM32 GPIO 的基本操作方式。

1实验环境●FS-STM32F407开发平台●ST-Link仿真器●RealView MDK5.23集成开发软件●PC及其Window7/8/10 (32/64bit)●串口调试工具2实验要求●基本要求:◆编写程序控制led 灯的亮灭(或者控制板上蜂鸣器的出声),输出以字母、数字、空格组成的字符串的摩斯码(以“Hello Cortex-M4”为测试用例)。

◆特殊要求:不能使用CMSIS 库函数操作led 灯(蜂鸣器),需用代码直接操作GPIO 的寄存器。

●拓展要求:◆使用按键控制系统状态,LED 灯显示系统状态:➢按键K3按下:待机,系统进入低功耗模拟➢按键K4长按:系统复位➢按键K5双击:led灯闪烁➢按键K6长按:随着按动时长,4个led灯依次点亮3实验原理STM32 GPIO的配置:LED 灯的亮灭、蜂鸣器的鸣响、按键电平的读入都需要使用STM32 芯片的I/O 引脚。

STM32 芯片上,I/O 引脚可以被软件设置成各种不同的功能,如输入或输出,所以被称为GPIO (General-purpose I/O)。

而GPIO 引脚又被分为GPIOA、GPIOB…GPIOG 不同的组,每组端口分为0~15,共16 个不同的引脚。

如何使用,需要参考板子原理图、芯片的datasheet和reference mannual。

具体首先需要从原理图找到板上LED、按键对应的GPIO。

在实验板使用D6 查找地底板原理图,可得:D6——PF7D7——PF8D8——PF9D9——PF10控制GPIO 的高低电平来控制LED 的状态。

《嵌入式系统》课程实验报告-stm32单片机gpio程序开发

《嵌入式系统》课程实验报告-stm32单片机gpio程序开发
华南理工大学 《嵌入式系统》课程实验报告-STM32 单片机 GPIO 程序开发
实验概述
【实验目的及要求】 实验目的: 1. 掌握 STM32 单片机输入输出接口程序开发 2. 掌握用寄存器开发 STM32 单片机程序 3. 掌握用库函数开发 STM32 单片机程序 实验要求: 1. 完成实验要求中提到要完成的所有内容,完成代码并提交主要代码。 2. 分析寄存器和库函数编程的优势和劣势,你喜欢用哪种方式。 3. 对每行主要代码要进行注释,说明其功能。 实验内容:
1.熟悉 TEB-CM5000 嵌入式单片机实验系统上的 LED 灯电路和单独按钮电路。
2.学习并掌握寄存器版本、库函数版本相关的实例程序,主要学习实例 stm32referencesrcforch5 目录下的,LED、LEDLib、KEY_LED 和 KEY_LEDlib 四 个程序。
3.利用寄存器位操作模式、库函数分别开发出 USER2(PD3)按钮控制 LD5(PF7)亮灭。具体功能:USER2(PD3)按钮按下时,LD5 灯闪烁;当 USER2(PD3) 按钮弹开时,LD5 灯停止闪烁。 4.实现利用寄存器位操作模式、库函数分别开发出: 当每次 USER2(PD3)按钮 按下时,LD5 灯只闪烁一次。 【实验环境】 1. TEB-CM5000 嵌入式单片机实验系统 2. MDK4.12 嵌入式软件开发环境
2.当每次 USER2(PD3)按钮按下时,LD5 灯只闪烁一次。
(1)寄存器位操作模式 循环判断 PD3 的状态,并执行对应操作(点亮或熄灭灯)
(3) 库函数
循环判断 PD3 的状态,并执行对应操作(点亮或熄灭灯)
小结
1. 只闪烁一次跟一直闪烁的区别主要在于 Flag 值。 在只闪烁一次的程序中, 设置 flag 值作为标志,灯亮以后改变 flag 值的状态,flag 的状态改变灯的 状态就不再继续。

嵌入式gpio实验报告

嵌入式gpio实验报告

嵌入式gpio实验报告3.4基于UART的加法器的实现一、实验目的自学lm3s9b92的串口通信学习应用超级终端调试串口学会应用领域UART有关的库函数二、实验设备计算机、LM3S9B92开发板、USB A型公口转回 Mini B型 5Pin 数据线1 条三、实验原理Stellaris系列ARM的UART具备全然可编程、16C550型串行接口的特性。

Stellaris 系列ARM所含2至3个UART模块。

该指导书在第一部分的1.2节中说明,该开发板使用了FT芯片实现usb到串口的转换。

并设置在芯片的B通道上使用虚拟COM接口(VCP)。

虚拟串行端口(VCP)与LM3s9b92上的UART0模块连接。

在安装FTDI驱动程序后,windows会分配一个串行通信端口号到VCP通道,并允许windows应用程序(如超级终端)通过USB与LM3s9b92上的UART0进行通信。

利用Windows超级终端调试UART的方法对于该开发板,采用的就是USB交互式的COM端口,无须采用DB9连接器。

因此下面传授一下如何利用Windows附带的超级终端去调试UARTUSB。

Windows附件里的“超级终端”是个非常实用的应用程序,可以用来调试电脑的COM 串行口,也能很好地支持通过USB虚拟的COM口。

以下是超级终端配置COM端口的过程:四、实验建议采用超级终端作为外部输入与输出的接口,实现多位数的.相加。

即通过UART串口分别输入需要相加的多位数A与B,最后把A和B两个多位数相加的过程和结果,回显给用户。

具体实现方法:既可以采用轮询的方式也可以应用中断。

五、实验步骤1、连接实验设备:使用USB mini B线缆的mini端与开发板ICDI口相连,另一端接到PC机的USB插口上。

2、根据实验建议撰写、调试、运转程序。

并建议在代码上附上有关的注解。

#include#include "inc/hw_ints.h"#include "inc/hw_memmap.h"#include "inc/hw_types.h"#include "driverlib/debug.h"#include "driverlib/gpio.h"#include "driverlib/interrupt.h"#include "driverlib/sysctl.h"#include "driverlib/uart.h"#include "grlib/grlib.h"#include "drivers/kitronix320x240x16_ssd_8bit.h"#include "drivers/set_pinout.h"#include "systemInit.h"void uartInit(void){SysCtlPeriEnable(SYSCTL_PERIPH_UART0); // CX600XUART模块SysCtlPeriEnable(SYSCTL_PERIPH_GPIOA); // 使能RX/TX所在的GPIO端口GPIOPinTypeUART(GPIO_PORTA_BASE, // 配置RX/TX所在管脚为GPIO_PIN_0 | GPIO_PIN_1); // UART通话功能UARTConfigSet(UART0_BASE, // 配置UART端口, // 波特率:UART_CONFIG_WLEN_8| // 数据位:8UART_CONFIG_STOP_ONE | // 暂停位:1UART_CONFIG_PAR_NONE); // 校验位:无UARTEnable(UART0_BASE); // CX600XUART端口void uartPuts(const char *s){while (*s != ''){UARTCharPut(UART0_BASE, *(s++));}}main(void){char c,a[12];int sum=0,num=0,i;// jtagWait( ); // 防止 JTAG 失效,重要!clockInit( ); // 时钟初始化:晶振, 6MHzuartInit( ); // UART 初始化uartPuts("输出格式 m+n= ");for (;;){c = UARTCharGet(UART0_BASE); // 等待接收字符if(c>='0'&&c<='9')//推论接到的与否为字符{num=num*10+c-'0'; //将收到的字符转换为整形储存 } else if(c=='+'){ //发送第二个数 sum=sum+num;num=0;}else if(c=='=') //输出sum=sum+num;num=0;for(i=0;sum!=0;i++){a[i]=sum%10;sum=(sum-a[i])/10;}for(i--;i>=0;i--){UARTCharPut(UART0_BASE, a[i]+'0'); }UARTCharPut(UART0_BASE, ' '); }if (c == ' ') // 如果遇到回车{UARTCharPut(UART0_BASE, ' '); // 多回显一个换行} }}3、书写实验报告,建议附上程序流程图。

嵌入式系统实验—GPIO口试验

嵌入式系统实验—GPIO口试验

GPIO输出控制实验11 、实验目的(1)掌握LPC2200专用工程模块的使用(2)掌握EASYJTAG仿真器的安装与使用(3)在开发平台上运行第一个程序(4)熟悉ARM7的GPIO控制2 、实验设备硬件:PC机一台MAGICARM2200-S教学实验开发平台一套软件:Windows98/XP/2000系统,ADS1.2集成开发环境3 、实验内容控制开发平台的蜂鸣器报警。

4、原理图:5、源代码:/**************************************************************************** * 文件名:main.c* 功能:蜂鸣器控制。

对蜂鸣器B1进行控制,采用软件延时方法。

* 使用I/O口直接控制,采用灌电流方式。

* 说明:短接蜂鸣器跳线JP7。

断开CF卡跳线JP13、GPIO接口J17。

****************************************************************************/ #include "config.h"#define BEEPCON 0x00000080 // P0.7引脚控制B1,低电平蜂鸣/***************************************************************************** 名称:DelayNS()* 功能:长软件延时。

* 入口参数:dly 延时参数,值越大,延时越久* 出口参数:无****************************************************************************/ void DelayNS(uint32 dly){ uint32 i;for(; dly>0; dly--){for(i=0; i<5000; i++);}}/**************************************************************************** * 名称:main()* 功能:控制蜂鸣器蜂鸣。

嵌入式系统gpio输入输出实验报告

嵌入式系统gpio输入输出实验报告

嵌入式系统gpio-输入输出实验报告嵌入式系统GPIO输入输出实验报告一、实验目的本实验旨在深入理解嵌入式系统中GPIO(General Purpose Input/Output)输入输出模块的功能及操作方法,通过实际操作学习GPIO的寄存器配置和使用方法,提高对嵌入式系统硬件的控制能力。

二、实验原理GPIO是一种通用输入输出接口,可以用于连接和控制外部设备。

它通常具有多个引脚,每个引脚都可以独立地配置为输入或输出模式,并可以通过软件控制实现高低电平的输入输出操作。

GPIO模块的主要功能包括:输入输出电平控制、输入输出方向控制、输出数据寄存器、输入数据寄存器等。

三、实验步骤1.硬件连接:连接开发板与PC,通过USB接口进行通信。

确保开发板的电源已经接通,并连接GPIO引脚与PC的串口。

2.开发环境搭建:安装开发板的驱动程序和开发工具,如Keil、JLink等。

3.编程语言选择:本实验采用C语言进行编程操作。

4.GPIO初始化和配置:根据实验要求,使用Keil软件编写代码,对GPIO进行初始化和配置。

具体步骤包括:定义GPIO引脚、设置引脚方向、配置输出数据寄存器等。

5.GPIO输入输出操作:通过Keil软件编写代码,实现GPIO的输入输出操作。

具体步骤包括:读取输入数据、写入输出数据等。

6.程序调试和测试:使用JLink工具对编写的程序进行调试和测试,确保程序的正确性和稳定性。

7.数据记录和分析:记录实验过程中的数据,包括输入输出的电平、时间等,进行分析和处理。

四、实验结果与分析通过本实验的操作,我们成功地实现了GPIO的输入输出操作。

在实验过程中,我们发现GPIO的配置和使用需要注意以下几点:1.GPIO引脚的编号和物理位置无关,因此需要根据实际需求进行选择和配置。

2.GPIO的输入输出方向可以独立设置,输入输出电平也可以通过软件进行控制。

3.在进行GPIO输入输出操作时,需要先对相应的寄存器进行配置,才能实现正确的输入输出。

嵌入式技术及应用实验GPIO实验报告

嵌入式技术及应用实验GPIO实验报告

院系:计算机科学学院专业:自动化年级: 11级学号: 11064029 姓名:杨胜提指导教师:刘科2013年 5 月 8 日实验步骤与结果分析运行过程(1) 使用Keil uVision3 通过ULINK 2仿真器连接EduKit-M3实验平台,打开实验例程目录GPIO_TEST子目录下的GPIO.Uv2例程,编译链接工程;(2) 选择软件调试模式,点击MDK 的Debug菜单,选择Start/Stop Debug Session 项或Ctrl+F5键,在逻辑分析仪中添加GPIOC_ODR.6、GPIOC_ODR.7、GPIOC_ODR.8、GPIOC_ODR.9,点击Run按钮即可在逻辑分析仪中看到如图7-11;(3) 选择硬件调试模式,选择Start/Stop Debug Session项或Ctrl+F5键,下载程序并运行,观察LED灯的变化情况;当程序运行在while循环体内时,按Key键,程序进入中断服务子程序EXTI9_5_IRQHandler(),单步运行,观察LED的变化情况。

(4) 退出Debug模式,打开Flash菜单>Download,将程序下载到EduKit-M3实验平台的Flash中,按RESET键复位,观察LED灯的情况,正常情况应如下。

LED灯状态1 说明LED1 LED2 LED3 LED4亮灭灭灭程序正常运行,发光二极管依次点亮灭亮灭灭灭灭亮灭灭灭灭亮灭灭灭灭外部信号输入,发生中断,执行中断处理程序亮亮亮亮LED灯状态2 说明LED1 LED2 LED3 LED4亮灭灭灭程序正常运行,发光二极管依次点亮亮亮灭灭亮亮亮灭亮亮亮亮灭灭灭灭外部信号输入,发生中断,执行中断处理程序亮亮亮亮3、初始化时,LED依次点亮,当按下Key键时产生中断;使用这两个函数对引脚进行配置。

嵌入式实验课程设计报告

嵌入式实验课程设计报告

嵌入式实验课程设计报告一、课程目标知识目标:1. 学生能理解嵌入式系统的基础知识,掌握其基本组成和工作原理。

2. 学生能够掌握嵌入式编程的基本语法和常用指令,具备编写简单嵌入式程序的能力。

3. 学生能够了解嵌入式系统在实际应用中的优势和局限性。

技能目标:1. 学生能够运用所学知识,进行简单的嵌入式系统设计和程序开发。

2. 学生能够使用嵌入式实验设备,进行实际操作,并解决常见问题。

3. 学生能够通过团队协作,完成一个具有实际应用价值的嵌入式项目。

情感态度价值观目标:1. 学生对嵌入式系统产生兴趣,激发其学习主动性和积极性。

2. 学生能够认识到嵌入式技术在国家战略和社会发展中的重要性,培养其社会责任感和使命感。

3. 学生在课程学习过程中,培养良好的团队合作精神和沟通能力,形成正确的价值观。

课程性质分析:本课程为嵌入式实验课程,侧重于实践操作和项目实践。

课程内容紧密结合教材,旨在帮助学生将理论知识与实际应用相结合。

学生特点分析:本年级学生已具备一定的计算机基础和编程能力,对新鲜事物充满好奇,具备较强的动手能力和创新能力。

教学要求:1. 注重理论与实践相结合,提高学生的实际操作能力。

2. 采用项目驱动教学法,培养学生的团队协作和解决问题的能力。

3. 激发学生的学习兴趣,引导其探索嵌入式技术在实际应用中的奥秘。

二、教学内容1. 嵌入式系统概述:介绍嵌入式系统的基本概念、发展历程、应用领域及未来发展趋势。

教材章节:第一章 嵌入式系统概述2. 嵌入式系统组成:讲解嵌入式系统的硬件组成、软件架构及系统设计方法。

教材章节:第二章 嵌入式系统硬件组成;第三章 嵌入式系统软件架构3. 嵌入式编程基础:学习嵌入式编程的基本语法、常用指令和编程技巧。

教材章节:第四章 嵌入式编程语言与编程环境;第五章 嵌入式程序设计基础4. 嵌入式系统设计与实践:通过项目实践,让学生掌握嵌入式系统的设计方法和实际操作。

教材章节:第六章 嵌入式系统设计与实践5. 嵌入式系统应用案例分析:分析典型嵌入式应用案例,了解嵌入式技术的实际应用。

嵌入式技术及应用实验报告(中南民族大学)

嵌入式技术及应用实验报告(中南民族大学)

院系:计算机科学学院专业:
年级:
学号:
姓名:
指导教师:
年月日
实验步骤与结果分析1.通过编译、下载、仿真可以看到我们想要的结果
图2-1
2.得到一个1K的仿真频率
2.1 因为得到的是更新频率,所以根据公式:
计数初值CCRx_Val = TIM2计数时钟频率/ 更新频率
所以有CCRx_Val = 0X1700
2.2 在工程中将对应的CCRx_Val值改为0X1770,然后编译、仿真、测频率,如图所示:
图2-2
实验结果分析:
通过本次实验达到了开始的实验目的和要求,加强对TIMERx定时器的理解和使用,以及在仿真过程中学会了怎样应对出现的问题。

实验步骤与结果分析1.在编译、下载之后,会在LCD上显示相应的英文字母和数字。

2.通过修改显示学号和名字,如图所示:
图3-1
实验结果分析:
通过本次实验,达到了实验预期的效果,学会了用怎样实现在LCD上显示中文名,和学号等功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式课程设计报告
电信3班
学号:200802305301
姓名:冯洪旭
嵌入式课程设计报告
一,设计要求
(1) GPIO15,实现对GPIO的操作,重点介绍驱动程序框架的设计,以及在嵌入式系统中调试驱动程序的流程。

(2)基于轮询的UART驱动设计,用户空间和内核空间的数据互传。

二,设计实现
(1) GPIO的驱动设计主要包括以下四个函数的设计:
·加载本驱动是执行init_module函数,以注册本驱动,同时系统为本驱动分配一对唯一的主设备号和从设备号;
·卸载驱动时执行cleanup_module函数,系统回收已分配的主设备号和从设备号;
·打开驱动程序文件时执行gpio_open函数,通过调用GPIO_init初始化GPIO15,设置其为输出端口,通过调用GPIO_hig使GPIO15引脚输出高
电平,并将驱动程序的引用计数加1;
·关闭驱动程序文件时执行gpio_release函数,并调用GPIO_low使GPIO15引脚输出低电平,并将驱动程序的引用计数减1.
在驱动程序设计中,由于linux运行事使用的是虚拟内存,因此在驱动程序中访问处理器的特殊功能寄存器时,需要将相应的特殊功能寄
存器的物理地址转化成虚拟地址。

本例中,就是包含<asm/hardware.h>
头文件,通过hardware.h中进一步引用定义了PXA270处理器特殊功能
寄存器虚拟地址的头文件\include\asm-asm\arch-pxa\pxa-regs.h。


中定义了控制GPIO所需的三个寄存器:
#define GPDRO _REG(0x40E0000C)/*GPIO方向寄存器*/
#define GPSRO _REG(0X40E00018)/*GPIO输出置为寄存器*/
#define GPCRO _REG(0x40E00024)/*GPIO输出复位寄存器*/ 其中_REG宏调用了物理地址到虚拟地址的转换函数io_p2v(x)。

#define io_p2v(x)(~((x丨0xbe000000)^(~((x)>>1)&0x06000000))
#define_REG(x)_REGP(io_p2v(x))
GPIO驱动程序部分源代码如下:
#ifndef MODULE
#define MODULE
#endif
#ifndef_KERNEL_
#define_KERNEL_
#endif
#if CONFIG_MODVERSIONS==1
#define MODVERSIONS
#include<linux/modversions.h>
#endif
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/init.h>
#include<linux/fs.h>
#include<linux/errno.h>
#include<linux/uaccess.h>
#include<asm/uaccess>
#include<asm/segment.h>
#include<asm/hardware.h>
//#include<asm/xsbase270.h>
#include<linux/mm.h>
#include<asm/io.h>
#ifndef KERNEL_WERSIONS
……………
(2) 所谓轮询方式,是指内核定期对设备的状态进行查询,然后作出相应的处理。

基于轮询的UART驱动程序,其主要函数的功能如下:
Init_module()函数用来初始化串口模块,加载串口设备驱动。

Uart_open()函数用来打开一个串口设备节点,当一个设备节点被打开时,计数器MOD_INC_USE_COUNT加1.
Uart_release()函数用来关闭一个设备节点,当一个设备节点被关闭时,MOD_DEC_USE_COUNT减1.
uart_write()函数首先调用copy_from_user()函数将用户空间的数据复制到内核空间,然后通过蓝牙串口BTuart发送出去,在该函数中调用了SerialOutputByte()函数。

uart_read()函数中,首先读BTRBR寄存器,将接收到的数据读到内核空间,然后通过copy_to_user()函数将接收数据复制到用户空间。

Cleanup_module()函数将BTuart设备驱动卸载。

Uart_init(void)函数主要来配置串口的波特率、数据位、停止位和奇偶校验位。

SerialOutputByte(const char c)函数是串口发送函数,将字符C通过串口发送出去。

SerialoutputByte(void)函数是串口接收数据函数。

基于轮询的UART驱动程序的部分源代码如下:
#include<linux/kernel.h>
#include<linux/module.h>
#if CONFIG_MODVERSIONS==1
#define MODVERSIONS
#include<linux/modversions.h>
#endif
#include<linux/fs.h>
#include<linux/wrapper.h>
#include<linux/types.h>
#include<linux/init.h>
#include<linux/delay.h>
#include<asm/hardware.h>
#include<asm/irq.h>
#ifndef KERNEL_VERSIONS
#define KERNEL_VERSIONS(a,b,c)((a)*65536+(b)*256+(c))
#endif
#if linux_VERSION_CODE>KERNEL_VERSION(2,2,0)
#include<asm/uaccess.h>
#endif
#define DEVICE_NAME”uart_test”
#define setuartband
……………
三,设计总结
设备驱动程序,他直接与相应设备打交道,并且向上层提供一组访问接口,内核常常使用设备类型、主设备号和次设备号来标识一个具体的设备,在设备管理中用户可以像访问普通文件一样访问外部设备。

在linux中所有的硬件设备均被当作特殊的设备文件处理,可以使用标准的文件操作,对于字符设备和块设备,其设备文件用mknod命令创建,用主设备号和次设备号来标识,同一个设备驱动程序控制的所有设备具有相同的主设备号,并用不同的次设备号加以区别,然后,对设备进行操作的系统调用和对文件操作类似,最后通过内核将系统调用转换成对物理设备的操作。

驱动的实现就是编写一组被系统调用的函数,然后加载到系统中,这些函数能够实现对硬件的操作,能够通过和系统的接口与上层应用程序交互信息。

设备驱动在加载时首先需要调用入口函数init_module(),该函数完成驱动的初始化工作,比如寄存器置位、结构体赋值等一系列的工作,其中一个最重要的工作就是向内核注册该设备,字符设备调用函数
register_chrdve()完成注册,注册成功后,该设备获得了系统分配或向系统申请的主设备号、自定义的次设备号,并建立起与设备文件的关联,设备驱动在卸载时需要回收相应的资源,将设备的响应寄存器值复位并从系统中注销该设备的操作过程,设备驱动程序可以分为三个主要的部分:一自动配置和初始化子程序。

负责检测所需驱动的硬件设备是否存在以及是否能够正常工作,这部分驱动只在初始化时被调用一次。

二服务I/O 就是请求子程序,这部分是系统调用的结果。

三中断服务程序又称驱动程序的下半部分,设备在I/O请求结束或其他状态改变时产生中断,因为设备驱动程序支持同一类型的若干设备,所以调用中断服务子程序时都带有一个或多个参数以唯一标识请求服务的设备。

内核模块是linux内核的重要组成部分,内核模块能在linux系统启动之后动态进行装载和卸载,因此不需对内核进行重新编译或重启系统就可以将内核的一部分替换掉,linux内核的所有设备驱动、文件系统、网络协议等可做成模块的形式来提供。

在所有模块中需记录编译的内核版本信息,并与当前执行的内核版本一致,即模块具有版本依赖性。

相关文档
最新文档