gpio控制实验实验报告8篇

时间:2022-11-24 08:45:03 来源:网友投稿

gpio控制实验实验报告8篇gpio控制实验实验报告 DSP原理及应用实验报告片上外设实验1——GPIO控制实验姓名 学号 一、 实验目的1.了解GPIO片上外设;下面是小编为大家整理的gpio控制实验实验报告8篇,供大家参考。

gpio控制实验实验报告8篇

篇一:gpio控制实验实验报告

P 原理及应用实验报告 片上外设实验 1——GPIO 控制实验 姓名

 学号

 一、

 实验目的 1. 了 解 GPIO 片上外设;

 2. 掌握延时程序应用;

 3. 用 GPIO 口实现 LED 指示灯控制。

 二、

 实验设备及地点 设备:

 SEED-DTK 系列 DSP 实验箱 地点:

 三、

 实验原理 1.

 实验的原理性说明 通用目的输入输出(GPIO)

 片内外设提供了 专用的通用目的引脚, 可以配置位输入或输出。

 当配置为一个输出时, 用户可以写一个内部寄存器以控制输出引脚上驱动的状态。

 当配置为输入引脚时, 用户可以通过内部寄存器的状态检测到输入的状态。

 另外, GPIO 片内外设可以用不同的中断/事件产生 CPU 中断和 EDMA 事件。

 一旦在 GPIO 使能寄存器(GPEN)

 被使能, GPIO 引脚可以用作通用目的输入/输出。

 用户可以使用 GPIO 方向寄存器(GPDIR)

 独立配置每条

 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:

 与 McBSP 的 FSX2 复用引脚, 当配置为 GPIO5时, 用作 COM1 的。

 GPIO6:

 经电平转换后连至外设扩展总线的备用引脚。

 GPIO7:

 用于点亮 LED 指示灯 D5。

 XF = 1, 点亮;XF = 0, 熄灭。

 程序流程图如下:

  四、

 实验步骤及结果 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;

 CSL 初始化 GPIO7 引脚使能 GPIO 操作

 6. 继续运行程序, 程序每次都会停在第二个断点处, 点亮指示灯 D1;

 7. 继续运行程序, 程序每次都会停在第三个断点处, 点亮指示灯 D5;

 8. 继续运行程序, 程序每次都会停在第四个断点处, 关闭指示灯 D5;

 9. 也可直接执行程序, 观察指示灯 D1, D5 的闪烁情况。

 五. 总结

  DSP 原理及应用实验报告 片上外设实验 2——定时器控制实验 姓名学号

  一、 实验目的 1. 了解 TMS320VC5502 的定时器;

 2. 熟悉定时器各寄存器的配置;

 3. 掌握 TMS320VC5502 的中断结构和对中断的处理流程;

 4. 学会 C 语言中断程序设计, 以及运用中断程序控制程序流程。

 二、 实验设备及地点

 设备:

 SEED-DTK 系列 DSP 实验箱 地点:

 三实验原理 1. 实验的原理性说明 TMS320VC5502 有 3 个 64-位可编程的定时器, 其中 2 个用作通用定时器(TIM0 和 TIM1), 第三个定时器可以配置为通用定时器或看门狗定时器, 其功能取决于看门狗全局定 时控制寄存器 1(WDTGCTL1)

 中的 TIMMODE 位以及看门狗定时器控制寄存器 1(WDTWCTL1)

 中的看门狗使能位(WDEN)

 的设置。

 在系统复位时, 第 3 个定时器缺省配置为 64-位的通用定时器。’ VC5502 的每一个定时器均有一个外部引脚, 该引脚可配置为输入或输出。’ VC5502 片上定时器的功能框图如下图所示

  2. 下面简单的介绍一下 TMS320VC5502 中定时器的寄存器:

 EMU 用来确定定时器竞争模式;

 CLK 确定内在时钟分割比率;

 60GPINT 确定定时器的中断模式;

 GPEN 确定在 GPIO 模式中定时器引脚的操作模式;

 GPDIR 确定在 GPIO 模式中定时器引脚的输入输出模式;

 GPDAT 确定在 GPIO 模式中涉及定时器引脚的信号标准。

 缩写 寄存器名称 类别 CTL 定时器控制寄存器 CT0 CT1 PRD 定时器周期寄存器 PRD0 PRD1 CNT 定时器计数寄CNT0

 GCTL 描述定时器的操作模式:

 其中 TDDR34 位段为定时器分配比率位, TIMMOD 位段为定时器模式位。

 CTL 中 TIEN 位段为定时器输入使能位; ENAMODE 使能模式位; INVINP 为 TINP 反 向控制位; CLKSRC 定时器输入时钟源位; CP 时钟/脉冲模式使能位; PWID 脉冲宽度位;

 INVOUT 位段为 TOUT 反向控制位。

 PRD 中共 32 位为将要计数的定时器输入时钟周期数。

 CNT 中共 32 位为主计数器的当前值。

 周期如何算:

 周期=周期寄存器/f(时钟源)

 具体的 Timer 操作参见 TMS320VC5501/ 5502 DSP Timers Reference Guide (Rev.

 A) . pdf

 四、

 实验步骤及结果 1. 打开 CCS, 进入 CCS 的操作环境。

 2. 装入 DEC5502_LED. pjt 工程文件, 添加 SEED_DEC5502. gel 文件。

 存器 CNT1

 3. 装载 DEC5502_LED. out 文件, 进行调试。

 4. 在 5502-LED. c 程序的第 136 行 “LEDMARK = 1; ”、 第 141 行 “LEDMARK = 0; ”和第 146 行 “ CHIP_FSET(ST1_55, XF, 0) ; ”处设置断点。

  5. 运行 5502-LED. c 程序, 程序会停在第一个断点处, 表明已进入定时器中断。

 观察指示灯 D5 灭。

  6. 继续运行程序, 程序会停在第二个断点处。

 观察指示灯 D5 亮。

  7. 继续运行程序, 程序会停在第三个断点处。

 观察指示灯 D1 灭。

  程序流程图:

 Main 程序流程图:

  :

  使能定时器中断 使能定时器 1定时器各寄存器配定时器中断初始化 系统时钟设置 CSL 初始化For 循环等待进入定

篇二:gpio控制实验实验报告

科技大学《微控制器原理》实验指导书

  STM32F103-GPIO 基本输入输出实验 1实验 01 STM32F103-GPIO 基本输入输出实验

 实验 01 STM32F103-GPIO 基本输入输出实验

 一、实验目的

 学习 STM32F103VCT6 单片机的通用 GPIO 的基本输出输入功能,主要了解 STM32 的GPIO 的原理和应用。

 二、实验设备 1) 装有 RV MDK 仿真软件的 Pentium 以上的计算机一套; 2) J-Link-ARM V8 仿真器一套; 3) STM32F103VCT 的神舟 II 号开发板一套。

 三、实验电路原理图及其说明 在神州Ⅱ号 STM32 开发板中,一共有 5 个 LED 指示灯,其中一个是电源指示灯LD5,其他的 4 个 LED (LD1、LD2、LD3 和 LD4)由 GPIO-PD 控制,4 个 LED 分别串了 470KΩ的电阻,起限流作用防止电流过大损坏 LED 和 GPIO 口。电路原理图如图 1 所示。

  图 1 STM32F103GPIO-LED 电路原理图图 当 GPIO 管脚输出高电平时,对应的 LED 灯亮;当 GPIO 管脚输出低电平时对应的LED 灯灭。GPIO 管脚与对应的 LED 灯的关系如下表所示:

 LED 灯 LED 灯对应的 GPIO LD1 PD08 LD2 PD09 LD3 PD10 LD4 PD11 蜂鸣器 DEEP PC8

 山东科技大学《微控制器原理》实验指导书

  STM32F103-GPIO 基本输入输出实验 2

 图 2 按键 KEY 硬件电路 GPIO 管脚与按键对应的关系 按键 GPIO 说明 确定 OK PD3 下拉电阻 上 UP PD4 下拉电阻 下 DOWN PA8 下拉电阻 左 LEFT PD0 下拉电阻 右 RIGHT PD1 下拉电阻 用户自定义 User PD2 上拉电阻 干预 Tamper PC13 上拉电阻 唤醒 Wakeup PA0 下拉电阻 四、实验内容 1. 使用单步运行实现 LD1、LD2、LD3、LD4 点亮和熄灭。

 2. 使用软件延时 1s 实现这四个灯交替闪烁的流水灯效果。

 3. 按下 UP、DOWN、LEFT、RIGHT 键分别让对应的 LD1、LD2、LD3、LD4 指示灯亮。

 4. 按下 LEFT 键让 LD1→LD2→LD3→LD4 自左向右流水显示;按下 RIGHT 键分别让LD4→LD3→LD2→LD1 自右向左流水显示。

 5. 按下 UP 键让 LD1→LD2→LD3→LD4 自左向右流水循环显示;按下 DOWN 键分别让LD4→LD3→LD2→LD1 自右向左流水循环显示。

 五、实验原理 流水灯的关键实际上就是如何控制 STM32 处理器的 GPIO 接口,作为 IO 口,输出指定的电平信号。

 STM32 的 IO 口可以由软件配置成 8 种模式:模拟输入、输入悬空、输入下拉、输入

 山东科技大学《微控制器原理》实验指导书

  STM32F103-GPIO 基本输入输出实验 3上拉、开漏输出、推挽输出、复用功能开漏输出和复用功能推挽输出等。STM32 每个 IO口可以自由编程,单 IO 口寄存器必须要按 32 位字被访问。STM32 的很多 IO 口都是 5V兼容的,这些 IO 口在与 5V 电平的外设连接的时候很有优势。

 STM32 的每个 IO 端口都有 7 个寄存器来控制:配置模式的 2 个 32 位的端口配置寄存器 CRL 和 CRH、2 个 32 位的数据寄存器 IDR 和 ODR、1 个 32 位的置位/复位寄存器 BSRR、一个 32 位的复位寄存器 BRR、1 个 32 位的锁存寄存器 LCKR 等。

 GPIO_CR 控制着每个 IO 口的模式及输出速率,STM32 的 IO 口位配置表如下表所示。

 配置模式 CNF1 CNF0 MODE1 MODE0 PxODR 寄存器 通用输出 推挽式 Push-Pull 0 0 01 10 11 见表 3.1.2 0 或 1 开漏 Open-Drain 1 0 或 1 复 用 功 能输出 推挽式 Push-Pull 1 0 不使用 开漏 Open-Drain 1 不使用 输入 模拟输入 0 0 00 不使用 浮空输入 1 不使用 下拉输入 1 0 0 上拉输入 1 STM32 输出模式配置如下表所示:

 MODE[1:0] 意义 00 保留 01 最大输出速度为 10MHz 10 最大输出速度为 2MHz 11 最大输出速度为 50MHz 六、实验现象 把程序下载到神州Ⅱ号 STM32 开发板后,可以根据实验设计看到四个 LED(LD1-4)单独或者轮流闪亮,实现流水灯的效果。

  七、实验报告书写要求 说明:七、实验报告书写要求 说明:

 实验报告均按以下格式书写

  1) 绘制程序流程图。

 2) 写出程序清单。

 3) 给出实验中用到的数据和实验结果。

 4) 通过实验,分析你的收获、不足、问题。

 山东科技大学《微控制器原理》实验指导书

  STM32F103-GPIO 基本输入输出实验 4八、参考程序 /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" /* Private define ------------------------------------------------------------*/ #define RCC_GPIO_LED

 RCC_APB2Periph_GPIOD /*LED 使用的 GPIO 时钟*/ #define LEDn

 4

  /*神舟 II 号 LED 数量*/ #define GPIO_LED

  GPIOD

 /*LED 使用的 GPIO 组*/ #define LD1_PIN

  GPIO_Pin_8

  /*LD1 使用的 GPIO 管脚*/ #define LD2_PIN

  GPIO_Pin_9

 /*LD2 使用的 GPIO 管脚*/ #define LD3_PIN

  GPIO_Pin_10

  /*LD3 使用的 GPIO 管脚*/ #define LD4_PIN

  GPIO_Pin_11

 /*LD4 使用的 GPIO 管脚*/ /* Private variables ---------------------------------------------------------*/ u8 count=0; /* Private function prototypes -----------------------------------------------*/ void Delay(vu32 nCount); void Turn_On_LED(u8 LED_NUM); /* Private functions ---------------------------------------------------------*/ int main(void) { GPIO_InitTypeDef

 GPIO_InitStructure;

  //定义结构体变量

 /* 配置神舟 II 号 LED 灯使用的 GPIO 管脚模式*/

 RCC_APB2PeriphClockCmd(RCC_GPIO_LED, ENABLE); /*使能 LED 使用的 GPIO 时钟*/

 GPIO_InitStructure.GPIO_Pin = LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 GPIO_Init(GPIO_LED, &GPIO_InitStructure);

 /*LED 灯相关的 GPIO 口初始化*/

 GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN);/*关闭所有 LED 灯*/

  while(1)

  {

 GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN);/*关闭所有 LED 灯*/

  Turn_On_LED(count%4);

  //点亮一个 LED 灯

  count++;

  Delay(0x2FFFFF);

  } } /*点亮对应灯*/ void Turn_On_LED(u8 LED_NUM) {

 switch(LED_NUM)

 {

  case 0: GPIO_SetBits(GPIO_LED,LD1_PIN); break; /*点亮 LD1 灯*/

  case 1: GPIO_SetBits(GPIO_LED,LD2_PIN); break; /*点亮 LD2 灯*/

  case 2: GPIO_SetBits(GPIO_LED,LD3_PIN); break; /*点亮 LD3 灯*/

 山东科技大学《微控制器原理》实验指导书

  STM32F103-GPIO 基本输入输出实验 5

 case 3: GPIO_SetBits(GPIO_LED,LD4_PIN); break; /*点亮 LD4 灯*/

  default:

  GPIO_SetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN); break;/*点亮所有灯*/

 } } /******************************************************************************* * Function Name

 : Delay * Description

 : Inserts a delay time. * Input

 : nCount: specifies the delay time length. * Output

  : None * Return

  : None *******************************************************************************/ void Delay(vu32 nCount) {

  for(; nCount != 0; nCount--); } /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 说明:

 1) 为了降低STM32处理器的功耗,可以依据实际的需求,选择合适的时钟速率,GPIO口支持的最大时钟速率越低,它产生的功耗也越低。

 2) 在使用一个 GPIO 之前,一般需要对 GPIO 管脚的时钟、GPIO 管脚模式以及速率进行设定。

篇三: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 嵌入式软件开发环境

 实验内容

 【实验过程】

 二、实验步骤:

 1. USER2(PD3)按钮按下时,LD5 灯闪烁;

 USER2(PD3)按钮弹开时,LD5 灯停止闪烁。

 (1)

 寄存器位操作模式:

 设置输入输出

  循环判断 PD3 的状态,并执行对应操作(点亮或熄灭灯)

  (2)

 库函数

  设置 LD5 和 USER2

 循环判断 PD3 的状态,并执行对应操作(点亮或熄灭灯)

  2.当每次 USER2(PD3)按钮按下时,LD5 灯只闪烁一次。

 (1)寄存器位操作模式 循环判断 PD3 的状态,并执行对应操作(点亮或熄灭灯)

  (3)

 库函数 循环判断 PD3 的状态,并执行对应操作(点亮或熄灭灯)

 小结

 1. 只闪烁一次跟一直闪烁的区别主要在于 Flag 值。

 在只闪烁一次的程序中,设置 flag 值作为标志,灯亮以后改变 flag 值的状态,flag 的状态改变灯的状态就不再继续。

 2. 学会了如何使用或者调用相关函数或库,以及寄存器操作和库函数操作的区别。

 3. 学会了利用值的改变来改变灯的状态。

 指导教师评语及成绩

 评语:

 成绩:

  指导教师签名:

 批阅日期:

篇四: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控制实验实验报告

PIO 实验内容:(GPIO 设置见课件 5-7,5-9) 1. 2.10_GPIO

 OUT1 2. 2.11_GPIO

 OUT2 3. 2.12_GPIO

 INPUT 4. 输入输出综合实验(查询方式,1S 由软件延时控制):

 要求:每按一次 KEY1 键,同时要求 LED1~LED8 循环点亮。

 1) 初始状态或按下 KEY1 键(松开后保持),只点亮一只 LED灯,每隔 1 秒右循环显示,移到 LED8 后回到 LED1。

 LED1 LED8

 ………………………… LED1 LED8 2) 按下 KEY2 键(松开后保持),点亮一只 LED 灯,每隔 1秒多点亮一只 LED 灯,直到 LED 灯全亮,然后回到一只 LED 点亮状态循环。

 LED1 LED8 LED1 LED8 ………………………… LED1 LED8 3) 按下 KEY3 键(松开后保持),开始点亮 LED1、LED8 灯,隔 1 秒后点亮 12、78,再隔 1 秒点亮 123、678,直到全亮后再隔 1 秒点亮 123、678,后又 12、78,直到点亮

  LED1、LED8 灯后重新循环。

 LED8 LED1 LED8 ………………………… LED1 LED8 LED8 ………………………… LED8

  /**************************************************************************** * 文 件 名:main.c * 功

 能:LED 显示控制。

 *

  通过 GPIO 直接控制 8 个 LED 产生流水灯效果 * 说

 明:将跳线 JP23 全部短接,JP15 跳线全部断开。

 *

  这个警告可忽略,C2892E: signed constant overflow ****************************************************************************/ #include

 "config.h"

 #define

  LED1

 1<<16

  // P2.16

  #define

  LED2

 1<<17

 // P2.17

  #define

  LED3

  1<<18

 // P2.18

  #define

  LED4

  1<<19

 // P2.19

  #define

  LED5

  1<<20

  // P2.20

  #define

  LED6

  1<<21

 // P2.21

 #define

  LED7

  1<<22

 // P2.22

 #define

  LED8

  1<<23

 // P2.23 #define

  KEY

  1<<7

  //P0.7 #define

  LEDCON 0x00ff0000 uint32

 count;

 const uint32

 DIS1_TAB[8] = { 0xff01ffff, 0xff02ffff, 0xff04ffff, 0xff08ffff,

  0xff10ffff, 0xff20ffff, 0xff40ffff, 0xff80ffff};

 const uint32

 DIS2_TAB[8] = { 0xff01ffff, 0xff03ffff, 0xff07ffff, 0xff0fffff,

  0xff1fffff, 0xff3fffff, 0xff7fffff, 0xffffffff};

 const uint32

 DIS3_TAB[7] = { 0xff81ffff, 0xffc3ffff, 0xffe7ffff, 0xffffffff,

  0xffe7ffff, 0xffc3ffff, 0xff81ffff, };

 /**************************************************************************** * 名

 称:DelayNS() * 功

 能:长软件延时 * 入口参数:dly

 延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void

 DelayNS(uint32

 dly) {

  uint32

 i;

 for(; dly>0; dly--)

 {

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

  } }

 void readKey() {

  while((IOPIN&KEY)==0)

 {

 while((IOPIN&KEY)==0);

  count++;

 if(count>=3) count=0;

 }

 }

 /**************************************************************************** * 名

 称:main() * 功

 能:根据表 DISP_TAB 来控制 LED 显示。

 ****************************************************************************/ int

 main(void) {

  uint8

 i=0;

  count=0 ;

 /* PINSEL2 使用启动代码的默认配置,切勿任意配置 PINSEL2,否则总线会受到干扰 */

  IODIR = LEDCON;

  // 配置 LED 控制 I/O 方向 while(1)

 {

 while(count==0)

  {

  readKey();

 IOCLR = DIS1_TAB[i];

  // 输出 LED 显示数据

 DelayNS(100);

  // 延时

 IOSET = 0xffffffff;

 i++;

 if(i==8) i=0;

 }

  while(count==1)

  {

  readKey();

 IOCLR = DIS2_TAB[i];

  // 输出 LED 显示数据

 DelayNS(100);

  // 延时

 IOSET = 0xffffffff;

 i++;

 if(i==8) i=0;

  }

  while(count==2)

  {

 readKey();

 IOCLR = DIS3_TAB[i];

  // 输出 LED 显示数据

 DelayNS(100);

  // 延时

 IOSET = 0xffffffff;

 i++;

 if(i==7) i=0;

  }

  } }

篇六:gpio控制实验实验报告

  IO 口实现 LED 灯闪烁 一、实验目的:

 1. 正确安装 keil 软件 2. 正确安装调试驱动,熟悉实验板的用法 3. 学习 IO 口的使用方法。

 二、实验设备:

 单片机开发板、学生自带笔记本电脑 三、

 实验内容:

 利用单片机 IO 口做输出,接发光二极管,编写程序,使发光二极管按照要求点亮。

 四、实验原理:

 1. LPC1114 一共有 42 个 GPIO,分为 4 个端口,P0、P1、P2 口都是 12 位的宽度,引脚从 Px.0~Px.11,P3 口是 6 位的宽度,引脚从 P3.0~P3.5。引脚的内部构造如图所示。其中 Rpu 为上拉电阻、Rpd 为下拉电阻。

 2. 为了节省芯片的空间和引脚的数目,LPC1100 系列微处理器的大多数引脚都采用功能复用方式,用户在使用某个外设的时候,要先设置引脚。控制引脚设置的寄存器

 称之为 IO 配置寄存器,每个端口管脚 PIOn_m 都分配一个了一个 IO 配置寄存器IOCON_PIOn_m,以控制管脚功能和电气特性。

 3. IOCON_PIOn_m 寄存器其位域定义如表所列。

 位域 符号 描述 2:0 FUNC 选择管脚功能 000:选择功能 1 001:选择功能 2(如果未定义功能 2,则保留)

 010:选择功能 3(如果未定义功能 3,则保留)

 011:选择功能 4(如果未定义功能 4,则保留)

 100~111:保留 4:3 MODE 选择功能模式(片内上拉/下拉电阻控制)

 00:无效模式(无上拉和下拉电阻被允许)

 01:允许下拉电阻 10:允许上拉电阻 11:中继模式 5

 HYS 滞后模式 1:禁止 0:允许 6 - 保留,复位值为 1 7 ADMODE 选择 模拟/数字模式(无 AD 功能,则保留,复位值为 1)

 0:模拟输入模式 1:数字功能模式 9:8

 I2CMODE 选择为 I2C 模式 00:标准 I2C 模式/快速 I2C 模式(默认)

 01:标准 I/O 功能

 10:FM+I2C 模式 11:保留 31:8 - 保留,复位值为 0

 4. 各引脚 IOCON 寄存器的位[2:0]配置不同的值所相应功能。

  5. GPIO 寄存器 GPIO数据寄存器用于读取输入管脚的状态数据,或配置输出管脚的输出状态,表5-5对GPIOnDATA寄存器位进行描述。

 位 符号 访问 描述 11:0 DATA R/W 管脚PIOn_0~PIOn_11输入数据(读)或输出数据(写)

 31:12 - - 保留 GPIO的数据方向的设置是通过对GPIOnDIR寄存器的位进行与或操作实现的,LPC1100微处理器和8051单片机的GPIO不同,在使用前一定要先设置数据方向才能使用, 位 符号 访问 值 描述 11:0 IO R/W 0 引脚PIOn_0~PIOn_11配置为输入 1 引脚PIOn_0~PIOn_11配置为输出 31:12 - - - 保留

 6. 发光二级管的工作电压和工作电流如何? _______________________________________________________________________________________________________________________________________________________________________________________________________________________________。

 7. 发光二极管的限流电阻如何计算? __________________________________________________________________________。

 五、实验原理图:

  六、实验步骤:

 一、基本要求

 1、默写发光二极管闪烁程序。

 二、扩展要求

 1.查找关于呼吸灯的资料,弄懂呼吸灯工作原理。

 2.自行编写呼吸灯代码,在实验板子上面验证。

 七、程序框图:

 八、 供 参考程序:

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

 #include "LPC11XX.H"

  // 头文件

 #define LED1_ON()

 (LPC_GPIO1->DATA &= ~(1<<0))

 // 点亮连接到 P1.0 的 LED #define LED1_OFF() (LPC_GPIO1->DATA |= (1<<0))

  // 熄灭连接到 P1.0 的LED #define LED2_ON()

 (LPC_GPIO1->DATA &= ~(1<<1))

 // 点亮连接到 P1.1 的 LED #define LED2_OFF() (LPC_GPIO1->DATA |= (1<<1))

  // 熄灭连接到 P1.1 的LED /************************************************************************** * FunctionName

  : Delay() * Description

 : 延时函数 * EntryParameter : None * ReturnValue

 : None **************************************************************************/ void Delay()

 {

 uint16_t i,j;

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

  for(j=0;j<200;j++); } /************************************************************************** * FunctionName

  : LedInit() * Description

 : 初始化 LED 引脚 * EntryParameter : None * ReturnValue

 : None **************************************************************************/ void LedInit(void) {

 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能 IOCON 时钟

  LPC_IOCON->R_PIO1_0 &= ~0x07;

 LPC_IOCON->R_PIO1_0 |= 0x01; //把 P1.0 脚设置为 GPIO

 LPC_IOCON->R_PIO1_1 &= ~0x07;

  LPC_IOCON->R_PIO1_1 |= 0x01; //把 P1.1 脚设置为 GPIO

 LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能 IOCON 时钟

 LPC_GPIO1->DIR |= (1<<0); // 把 P1.0 设置为输出引脚

 LPC_GPIO1->DATA |= (1<<0); // 把 P1.0 设置为高电平

 LPC_GPIO1->DIR |= (1<<1); // 把 P1.1 设置为输出引脚

 LPC_GPIO1->DATA |= (1<<1); // 把 P1.1 设置为高电平 } /************************************************************************** * FunctionName

  : main() * Description

 : 主函数 * EntryParameter : None * ReturnValue

 : None **********************************************************************/ int main(void)

 {

  LedInit();

 while(1)

 {

  Delay();

  LED1_ON();

  LED2_OFF();

  Delay();

  LED1_OFF();

  LED2_ON();

 }

 }

篇七:gpio控制实验实验报告

四 GPIO、 时钟、 定时器、 中断、 UART1. 教材实例调试1.1. 中断控制器教材P1 51 , 按键中断实例,

 完成如下操作:新建Project导⼊源代码(*.c,*.S,*.h)

 ,

 导⼊MakeFile改写makefile , 使程序能够正确编译调试代码代码⺫录:

 /hardware/int/请回答如下问题:

 makefile中, arm-linux-ld -Ttext 0x00000000 -o int_elf $^ , text 0x00000000代表什么含义? makefile中, %.o:%.c是什么含义, 其中%.o代码哪些⽂件; 在%.o:%.S中, %.o代表哪些⽂件? $@和$<分别代码什么? 请写出下图中实际执⾏时的编译指令(即将⾃动化变量带⼊后的指令)本例中编译中, 源⽂件是哪些? ⺫标⽂件是哪个? 中间⽂件有哪些?本例中s3c24xx.h⽂件的作⽤是什么?本例中中断处理的⼊⼝是什么? 在中断处理程序中做了哪些⼯作? (参看课件处理器⼯作模式和中断控制器章节)分析源代码, 给出函数调⽤流程图。1.2. 时钟, 定时器教材第1 0章P1 66, MPLL和定时器实例操作 , 完成以下内容:嵌⼊式系统实验【 ⽣物医学电⼦⼯程1 0级】第1⻚

 新建Project导⼊源代码(*.c,*.S,*.h.*.lds)

 ,

 导⼊MakeFile改写makefile , 使程序能够正确编译调试代码代码⺫录:

 /hardware/timer/请回答如下问题:

 timer.lds⽂件起什么作⽤, 解释脚本中语句的含义, 程序的代码空间如何分配?程序中⽤到了哪些寄存器(中断, 定时器, SDRAM)

 , 其设置值的含义分别是什么? 如果修改为使⽤定时器1, 定时时间为3S,程序应如何修改?1.3. UART教材第11 章P177, UART实例操作 , 完成以下内容:新建Project导⼊源代码(*.c,*.S,*.h.*.lds)

 ,

 导⼊MakeFile改写makefile , 使程序能够正确编译调试代码代码⺫录:

 /hardware/uart/请回答如下问题:1 . 本⽰例串⼝收发数据没有采⽤中断⽅式实现, 那么实现正确收发必须使⽤哪个寄存器为收发判断依据?2. 如果修改串⼝波特率为1 9200, 采⽤FIFO⽅式, 应该如何配置, 请给出代码?3. 如果采⽤中断⽅式实现, 请设计程序流程, 并给出相关寄存器的配置。2. 综合设计题⺫2.1.设计⺫标利⽤UART0,TIMER1 ,GOIP实现LED的控制, 设计⺫标如下:在PC机的串⼝终端(如PCOMM或SecureCRT)

 ,输⼊以下格式命令, LED等根据命令指⽰执⾏动作并像PC机做出回复响应。嵌⼊式系统实验【 ⽣物医学电⼦⼯程1 0级】第2⻚PC开发板命令响应

 命令:

 Mode,Duration<LF>命令字含义取值说明ModeLED灯闪烁模式ByTurn: 轮流点亮All: 同时点亮(不区分⼤⼩写)DurationLED亮灭之间的间隔N: (1 ~10),单位秒<LF>回⻋换⾏符号采⽤ASCII码以上命令⾏字符均以ASCII码表⽰。⽰例:all,3 !!代表要求LED灯每3秒实现⼀次开关切换, 所有灯同时亮或灭byturn,2 ! !代表LED灯每2秒点亮⼀只, 轮流点亮, 同⼀时间只有⼀只点亮。响应:

 responseCode含义取值ok: 命令成功执⾏responseCode响应码error: 命令执⾏不成功unknown: 未知命令2.2. 设计要求采⽤UART0, 收发模式为中断⽅式, 串⼝波特率为19200, 其他设置与教材相同。定时器采⽤TIMER1, 采⽤中断定时⽅式。注意中断优先级的设置。嵌⼊式系统实验【 ⽣物医学电⼦⼯程1 0级】第3⻚

篇八:gpio控制实验实验报告

机 IO 口实验实验报告

  一、实验内容 1、编写程序,用 P1.0~P1.2 口连 LED,查询拨盘开关 SW1 的状态来控制 LED 的亮和灭(P1.7口接 SW1)。

 2、编写程序,用 P1.0~P1.2 口连 LED ,用按键开关 KEY1 作为外部中断输入 INT0 控制 LED的亮和灭。(每按一次按键 LED 状态取反一次)

 二、硬件点原理图 1、实验 1 电原理图:此次试验连线很简单,把 P1.0-P1.2 与 LED 相连,SW1 与 P1.7 相连即可。

 2、实验 2 电原理图:将 P1.0-P1.2 与 LED 连接,KEY1 与 P3.2 连接

 三、程序流程图 1、实验 1 程序流程图:

  2、实验 2 程序流程图

 初始化,熄灭灯,设置 P1.7 为读 判断 P1.7 开关状态 为高电平 熄灭三盏灯 为低电平 点亮三盏灯 初始化,灯熄灭,IT=1,EX0=1,EA=1 SJMP $自循环 中断,执行中断程序,对灯的状态取反

 四、程序清单

 1、实验 1 程序代码 ORG 0000H LJMP MAIN ORG 0100H MAIN: CLR P1.0

  CLR P1.1

 CLR P1.2

 ;初始化,将三盏灯熄灭 LOOP1:

  SETB P1.7

  ;设置 P1.7 的寄存器为 1,进入读的状态

 JNB P1.7,LOOP2;通过 P1.7 口输入判断开关状态

  SETB P1.0

  ;开关开,即为高电平,所以点亮三盏灯

  SETB P1.1

  SETB P1.2

  SJMP LOOP1

  ;重新进行判断 LOOP2:

  CLR P1.0

  CLR P1.1

  CLR P1.2

 ;开关为关,熄灭三盏灯

  SJMP LOOP1

 ;跳转,回到判断

  END

 2、实验 2 程序代码 ORG 0000H LJMP MAIN

 ;跳转到主程序 ORG 0003H

  ;采用 INT0 中断,因此中断入口地址为 0003H LJMP LOOP

  ;跳转到中断程序 ORG 0100H MAIN: CLR P1.0

  CLR P1.1

 CLR P1.2

 ;初始化,将三盏灯熄灭

 SETB IT0

 ;设置为下降沿触发

 SETB EX0

  ;使用 INT0 中断

 SETB EA

 ;开启中断控制

 SJMP $

 ;自循环,等待中断

 ORG 0200H LOOP:CPL P1.0

  CPL P1.1

  CPL P1.2

 ;进入中断,将三盏灯状态取反

  RETI

  ;退出中断

  五、实验结果记录和分析

 1、实验 1 结果记录:

 将开关往上拨,此时 P1.7 口输入为高电平,三盏灯被点亮。将开关往下拨,此时 P1.7 口输入为低电平,三盏灯熄灭。表明程序符合要求。

 2、实验 2 结果记录:

 按下按键开关,按键开关由高电平变为低电平,因此出现下降沿,中断程序被处罚,此时三盏灯的状态改变,被点亮。再按下按键开关,三盏灯熄灭,如此循环。

 在实验中,之所以采用下降沿触发而不是低电平触发,是因为机器周期很短,因此按下按键的时间内可能经过了多个机器周期,导致中断程序被触发多次。如果经过的机器周期为偶数个,那么最终灯的状态不会改变。

 而在试验中,偶尔也会出现按下按键后灯的状态不改变的情况,我认为这是因为按键开关的抖动引起的,如图:

 因此,可能会出现多个上升沿,导致中断程序被多次触发,影响结果。

 要消除按键抖动,有两种办法:一是通过改变硬件

 如图,RC 构成了积分电路,使得电平不会发生突变,从而消除抖动,但是实验箱内的电路已经固定,因此无法实现。另一种实在程序中加入延时。

 ORG 0000H LJMP MAIN

 ;跳转到主程序 ORG 0003H

  ;采用 INT0 中断,因此中断入口地址为 0003H LJMP LOOP

  ;跳转到中断程序 ORG 0100H MAIN: CLR P1.0

  CLR P1.1

 CLR P1.2

 ;初始化,将三盏灯熄灭

 SETB IT0

 ;设置为下降沿触发

 SETB EX0

  ;使用 INT0 中断

 SETB EA

 ;开启中断控制

 SJMP $

 ;自循环,等待中断

 ORG 0200H LOOP:CPL P1.0

  CPL P1.1

 CPL P1.2

 ;进入中断,将三盏灯状态取反

 CALL DELAY

  RETI

  ;退出中断 ORG 0300H DELAY:MOV

 R3,#250

 LP3:MOV

 R2,#250

 LP2:MOV

 R1,#2

 LP1:DJNZ

 R1,LP1

 DJNZ

 R2,LP2

 DJNZ

 R3,LP3

 RET 这段程序延时约为 250ms,因此在第一次下降沿触发后的 250ms 内不会再被触发,从而可以避开前段抖动,而因为一般人连按两次按键的时间间隔大于 250ms,因此不会对下一次按键产生影响。但因为在试验过程中无法判断自己按键是否产生了抖动,因此未能验证这段程序是否真的对消除按键抖动有效。

推荐访问:gpio控制实验实验报告 实验 控制 报告

版权所有:振驰文档网 2021-2024 未经授权禁止复制或建立镜像[振驰文档网]所有资源完全免费共享

Powered by 振驰文档网 © All Rights Reserved.。京ICP备2021002390号-1