001_STM的GPIO端口操作实验
- 格式:doc
- 大小:42.00 KB
- 文档页数:2
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(General Purpose Input/Output)接口的工作原理和应用,通过实际操作和数据分析,提高对嵌入式系统硬件接口的理解和掌握。
实验背景是基于当前嵌入式系统在各种应用中的普及,GPIO 接口作为其中重要的硬件接口,对于理解嵌入式系统的运作方式具有重要意义。
二、GPIO基础知识GPIO接口是一种通用输入输出接口,它允许CPU与外部设备或传感器进行通信。
通过设置GPIO引脚的电平状态,CPU可以向外部设备发送数据,同时也可以接收外部设备发送的数据。
在嵌入式系统中,GPIO接口被广泛应用于各种硬件设备的控制和数据采集。
三、实验设备与工具本次实验使用的设备包括开发板、杜邦线、电源适配器、串口调试工具等。
其中,开发板提供了丰富的GPIO接口和外设接口,方便我们进行实验操作。
串口调试工具用于实时监控和调试实验过程。
四、实验步骤与操作连接实验设备:将开发板与电源适配器连接,为开发板提供稳定的电源。
使用杜邦线连接开发板的GPIO接口和外设接口,确保连接可靠。
编写程序:根据实验要求,编写相应的程序代码。
在程序中,我们需要配置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(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(General Purpose Input/Output)是一种通用输入输出接口,广泛应用于各种嵌入式系统,如微控制器、树莓派、Arduino等。
GPIO操作主要用于与外部硬件设备进行交互,包括读取传感器数据、控制执行器等。
本文将介绍GPIO的基本概念、读写操作方法以及应用实例。
一、GPIO基础GPIO通常通过特定的引脚与外部设备进行通信。
这些引脚可以设置为输入模式(从外部设备读取数据)或输出模式(向外部设备发送数据)。
GPIO通常被用来驱动LED灯、蜂鸣器、继电器等简单硬件设备。
此外,GPIO还常常用于控制微控制器或其他硬件的外设。
1. 初始化GPIO在进行GPIO读写操作前,需要先进行初始化。
具体来说,需要配置GPIO引脚的电气特性,如高低电平、上拉/下拉电阻等。
初始化通常在程序启动时进行。
2. 读取GPIO状态读取GPIO状态是指从GPIO引脚读取当前状态,即判断该引脚是高电平还是低电平。
可以通过查询引脚的值或者使用取反操作来获取状态。
3. 设置GPIO值设置GPIO值是指向GPIO引脚写入数据,以控制外部设备的动作。
通常使用输出操作来完成。
需要注意的是,不同的硬件平台可能具有不同的数据类型和寄存器,需要根据具体的硬件平台进行设置。
4. 配置GPIO为输入模式将GPIO配置为输入模式是指将该引脚设置为从外部设备读取数据。
当引脚接收到外部信号时,会自动将其状态存储起来,以便后续读取。
在输入模式下,通常需要配置适当的上拉或下拉电阻以避免悬空。
三、应用实例以下是一个简单的应用实例,演示如何使用树莓派和Python编程语言进行GPIO读写操作:1. 初始化GPIO在Python中,可以使用RPi.GPIO模块来操作树莓派的GPIO引脚。
首先,需要导入该模块并使用setup()函数初始化GPIO。
例如:RPi.GPIO.setmode(RPi.GPIO.BOARD) # 设置模式为板载模式RPi.GPIO.setup(12, RPi.GPIO.OUT) # 将引脚12设置为输出模式2. 读取GPIO状态可以使用input()函数来读取GPIO的状态。
实验二通用GPIO的使用(4学时)
一、实验目的
1、掌握C51芯片I/O接口的性能特点。
2、掌握STM32芯片I/O接口的性能特点。
3、对于C51芯片,使用P0、P1口做I/O接口,实现输入和
输出控制。
4、对于STM32芯片掌握GPIO的功能设定方法,使用
GPIO完成输入与输出的电路驱动
二、实验内容
1. P1口做为输出口控制“单只数码管循环显示0~9”。
2. 编写一段程序,并修改硬件电路,用P1.0-P1.6口控制
LED,P1.7控制LED的亮与灭(P1.7接按键,按下时LED 亮,不按时LED灭)。
3、用STM32芯片I/O接口实现流水灯的控制。
三、思考题
1、为什么P0作为I/O接口时,要接上拉电阻?
答:因为P0口作为I/O接口时内部是漏极开路型。
2、在实验内容2中,如果P0某个管脚接按键,该如何修改硬件和软件?
3、设计一单片机控制电路,用八只开关分别控制八只LED 的亮灭。
四、实验结果分析
对于问题2
四、结论
这次对单片机GPIO口的实验,我们分别做了51单片机和STM32f103r6对GPIO端口的应用,再通过protues的仿真验证,证明我们的思路是正确的。
由于在这次实验中没有吧protues8.6版本安装好,导致实验过程中出现了了一些延误,没能按照老师课堂的进度,但在实验课过后过后,及时复习和查资料,解决了这个问题。
实验过程中不足的有,对于实验仍处于生搬硬套的阶段,无法将老师理论课所讲与实验结合在一起,对于写代码的能力有待提高。
gpio的基本使用方法GPIO,即通用输入输出引脚,是一种通用的数字信号输入输出接口,它允许我们将数字信号发送到其他设备,或从其他设备接收数字信号,并使用它们进行控制和通信。
在树莓派等嵌入式设备的开发工作中,GPIO是非常重要的一个组成部分,使用方法也十分简单。
一、初始化GPIO要使用GPIO,我们首先需要将其初始化,以便我们可以开始使用其不同的引脚。
在初始化过程中,我们需要指定GPIO的模式,即输入或输出模式。
1.导入必要的库import RPi.GPIO as GPIO2.设置GPIO引脚模式:“输入/输出”GPIO.setmode(GPIO.BOARD)这将使我们根据引脚的物理编号而不是树莓派GPIO编号来标识GPIO引脚。
3.设置GPIO模式GPIO.setup(pin, mode)其中“pin”为GPIO引脚编号,“mode”可以是“IN”(输入模式)或“OUT”(输出模式)。
例如,要将GPIO引脚7设置为输出模式,代码如下:GPIO.setup(7, GPIO.OUT)二、读写GPIOGPIO只能够处理高低电平,因此我们需要了解如何使用Python将高电平和低电平发送到GPIO引脚,并从GPIO引脚读取高电平和低电平。
1.写GPIOGPIO.output(pin, value)其中,“pin”为GPIO引脚编号,“value”可以是HIGH(高电平)或LOW(低电平)。
例如,要将GPIO引脚7输出高电平,代码如下:GPIO.output(7, GPIO.HIGH)2.读GPIOGPIO.input(pin)其中,“pin”为GPIO引脚编号。
例如,要从GPIO引脚7读取电平,代码如下:input_value = GPIO.input(7)三、关闭GPIO当我们完成了对GPIO引脚的使用之后,需要将其关闭以防止出现不必要的错误并释放它们的状态。
我们可以使用GPIO.cleanup()函数将所有GPIO设置为默认状态。
//main()程序开始……//注释
//1.2.1 头文件:
#include "stm32f10x.h" //意思是,把文件stm32f10x_lib.h的内容放到此处
#include "main.h" //意思是,把文件main.h的内容放到此处
//#include "k_gpio.h" //注释
#define VECT_TAB_RAM //选择在RAM中调试;宏标识符宏体
1.2.2 系统初始化
SystemInit(); //选择系统运行时钟,默认是72MHz,可以调试跟踪进行修改;
#ifdef VECT_TAB_RAM //设置仿真调试区域,这里设置成在RAM中;
// Set the Vector Table base location at 0x20000000
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
// Set the Vector Table base location at 0x08000000
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
1.2.3 GPIO配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //首先使能B端口时钟才可以进行下面的配置
//扩展学习RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOA, ENABLE); //使能B,A,C端口时钟GPIO_InitTypeDef gpio //第二步声明一个gpio结构体
gpio.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //第三步选择待设置的GPIO管脚,这里是12,13,14,15
gpio.GPIO_Speed = GPIO_Speed_50MHz; //第四步设置最高输出速率50MHz
gpio.GPIO_Mode = GPIO_Mode_Out_PP; //第五步设置选中GPIO管脚的模式,推挽输出
GPIO_Init(GPIOB, &gpio); //第六步根据gpio中指定的参数初始化外设,这里是B端口(GPIOB)。
GPIO_SetBits(GPIOB, GPIO_Pin_12| GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15); //置位B12,B12,B14,B15灭LED灯;
//GPIO_SetBits(GPIOB, GPIO_Pin_13); //置位B13//已经用上句代替
//GPIO_SetBits(GPIOB, GPIO_Pin_14); //置位B14//已经用上句代替
//GPIO_SetBits(GPIOB, GPIO_Pin_15); //置位B15//已经用上句代替
//如此,GPIOB连接LED的四个端口都配置好了;
1.2.4 GPIO操作
While(1)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_12); //复位B12,灯亮
Delay(0xffffff); //延时,系统时钟16M时,示波器测得10.49s
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
Delay(0xffffff);
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
Delay(0xffffff);
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
Delay(0xffffff);
Delay(0xffffff);
Delay(0xffffff);
GPIO_SetBits(GPIOB, GPIO_Pin_12); //置位,灭灯,功能等同速度更快的是GPIOB->BSRR=GPIO_Pin_12,BSRR寄存器置1
Delay(0xffffff);
GPIO_SetBits(GPIOB, GPIO_Pin_13); // GPIOE->BSRR = 0x00400080//低16位的某位为'1',则对应的I/O端口置'1';高16位的某位为'1',则对应的I/O端口置'0' Delay(0xffffff); //上行例子是0X0040=6位=0;0080=7位=1其他位不变
GPIO_SetBits(GPIOB, GPIO_Pin_14); // GPIOE->BRR = 0x00400080//低16位的某位为'1',则对应的I/O端口置'0';高16位的某位为'1',则对应的I/O端口置'1' Delay(0xffffff); //上行例子是0X0040=6位=1;0080=7位=0其他位不变
GPIO_SetBits(GPIOB, GPIO_Pin_15);
Delay(0xffffff);
//GPIO_ResetBits(GPIOB, GPIO_Pin_12); //先不用
//GPIO_ResetBits(GPIOB, GPIO_Pin_13); //先不用
//GPIO_ResetBits(GPIOB, GPIO_Pin_14); //先不用
//GPIO_ResetBits(GPIOB, GPIO_Pin_15); //先不用SysCtlDelay(SysCtlClockGet() / 3000); // 与系统时钟无关,精确延时1ms
}
如此而已;这是最简单的实验,可以为此建立一个拥有自己特色的工程模板;
1.3 Test注意
A、硬件必须首先确保正确;
B、开发环境搭建确保正确;
C、系统时钟的选择要清楚;仿真所处的区域要清楚;
D、外设时钟的配置是第一位的,其他配置都在其后。