实验一 熟悉实验开发环境及GPIO编程

一.实验目的

(1)掌握 KDS 集成开发环境的使用方法。

(2)掌握开发工具的安装与配置。

(3)掌握程序调试方法。

(4)了解 MCU 最小系统和实验仪器的测试方法。

(5)熟悉 MCU 的第一个 C 程序框架结构。

(6)掌握 GPIO 口的编程方法、编写拨码开关构件驱动程序。

(7)掌握在程序框架工程中添加新模块的方

二.实验内容

1.验证性实验

1)KDS 集成开发环境安装与使用

根据附录 A 进行 KDS 集成开发环境的下载、安装,熟悉 KDS 集成开发环境。

2)开发工具的安装与配置

根据附录 B 将光盘中的工具进行安装与设置。

3)程序的调试运行

(1)在光盘资料中 SD-KL-CD 提供读者小灯闪烁实例 ch04-Light 文件夹中的 Simple 程序主要实现 PTB 口的 9 号引脚连接的蓝色小灯,通过 MCU 控制小灯,亮,接着延时一段时间,然后灭,接着延时一段时间,放在主循环中,则形成闪烁的效果,通过 KDS 环境的调试按钮将光盘中的 Simple 程序下载至目标板,利用 F6 进行程序的跟踪运行,观察目标上的小灯亮暗情况。

(2)修改 main.c 程序中 if (mRuncount>=5) 为 if (mRuncount>=2),重新编译下载,请在单步调试的过程中在调试界面的 Variables 查看 mRuncount 变量的变化情况。

(3)在光盘资料中SD-KL-CD提供读者小灯闪烁实例ch04-Light文件夹中的Component程序采用构件化规范要求编写,把对 GPIO 模块的操作独立为一个驱动构件,如 C 语言中,形成 gpio.h 头文件和 gpio.c 源文件。将对发光二极管控制独立成一个应用构件,形成 light.h头文件和 light.c 源文件。头文件对小灯的所用端口寄存器或引脚进行宏定义以及初始化函数和驱动函数声明。源文件对初始化函数和驱动函数进行定义。主要实现开发板上的红,蓝绿三色等交替闪烁。将光盘中的 Component 程序下载至目标板,观察目标板上的小灯亮暗情况。

2.设计性实验

(1)在光盘资料中SD-KL-CD提供读者小灯闪烁实例ch04-Light文件夹中的Component

程序提供了一个构件化的程序框架,利用构件化实现开发板上的红、蓝、绿及组合颜色交替闪烁。LED 三色灯电路原理图如图 1-1 所示。请在该框架下实现程序的编写,利用三色灯完成利用不同颜色 LED 灯形成一种流水灯的显示效果。请在实验报告中给出 MCU 端程序 main.c 流程图和程序语句。

(2)使用 GPIO 模块寄存器直接控制法和构件法实现:实验箱上某个端口的一个引脚连接调试小灯,一个引脚连接拨码开关(也可以是另一个端口的引脚),通过拨码开关开合通过 MCU 控制调试小灯亮暗。(没有实验箱,只有核心板开发套件情况,可利用导线将端口引脚接 VCC 表示开关一种状态,接 GND 表示开关的另一种状态,下同)

将 SD-FSL-实验箱上的核心板的扩展端口与调试小灯模块和拨码开关进行连线,与拨码开关连接的端口作为输入,与调试小灯模块连接的端口作为输出。具体电路请参见附录 D 中的附录 C.1 开发板对外接口电路、附录 D.1 与核心板接口、附录 D.4 调试小灯模块、附录D.5 拨码开关等相关章节说明。请在实验报告中写出调试小灯和拨码开关连接的硬件资源使用情况,拨码开关通过 MCU 控制调试小灯,拨码开关向上拨,调试小灯亮,拨码开关向拨,调试小灯暗,放在主循环中,则形成拨码开关随时开, 调试小灯随时亮的效果。

请在实验报告中分别给出直接控制法实现的 MCU 端程序 main.c 流程图和程序语句。给出构件法实现的 MCU 端程序 main.c 和开关构件程序(key.c,key.h)流程图和程序语句。

3.进阶实验★

(1)在光盘资料中SD-KL-CD提供读者小灯闪烁实例ch04-Light文件夹中的Component

程序提供了一个构件化的程序框架,主要实现开发板上的红,蓝,绿三色灯的交替闪烁。请读者自行学习了解交通灯的工作原理,请在该框架下实现程序的编写,利用三色灯实现模拟路口交通灯的显示效果。

请在实验报告中给出 MCU 端程序 main.c 流程图和程序语句。

(2)使用 GPIO 模块构件法实现:将实验箱上核心板的八个 GPIO 引脚连接八个调试小灯,四个 GPIO 引脚连接四个拨码开关,通过四个拨码开关状态组合来控制八个调试小灯实现不同的流水灯显示。将 SD-FSL-实验箱上的核心板的扩展端口与八个调试小灯模块和四个拨码开关进行连线,与拨码开关连接的端口作为输入,与调试小灯模块连接的端口作为输出。请在实验报告中写出八个调试小灯模块和四个拨码开关连接的硬件资源使用情况,通过四个拨码开关状态组合来控制八个调试小灯实现不同的流水灯显示。

请在实验报告中分别给出构件法实现的 MCU 端程序 main.c 流程图和程序语句。

(3)根据外部拨码开关的开关闭合状态,请利用 KDS 的调试跟踪功能详细分析 GPIO构件的 gpio.c 中的 uint_8 gpio_get(uint_16 port_pin)函数中的返回值的变化情况,并分析其实现的原理和方法。请自行设计一个类似功能的函数实现获取 GPIO 引脚电平变化的构件函数。

(4)详细分析 GPIO 构件的 gpio.c 中的 void gpio_reverse(uint_16 port_pin)函数的功能,请自行设计不使用 GPIO_PTOR_REG “输出反转寄存器”实现“反转指定 GPIO 引脚输出状态”相同功能的构件函数。

请在实验报告中给出构件函数实现语

三.实验步骤和结果

1.验证性实验

通过对代码的分析,了解了GPIO编程的基本步骤和基本方法。

2.设计性实验

(1)七色流水灯

设计思路:

起色流水灯主要是根据光的三原色可以组成不同的颜色而来,在switch语句中只需将任意两种(或三种)小灯同时控制为亮,其余控制为暗,即可显示七色流水灯。

Main()函数中switch代码段如下:

switch (flag) {

//七色流水灯

  case 0: //红灯取反,绿灯暗,蓝灯暗

 light_control(LIGHT_RED,LIGHT_ON);

 light_control(LIGHT_BLUE, LIGHT_OFF);

 light_control(LIGHT_GREEN, LIGHT_OFF);

 flag = 1;

 break;

 case 1: //蓝灯取反,红灯暗,绿灯暗

 light_change(LIGHT_BLUE);

 light_control(LIGHT_RED, LIGHT_OFF);

 light_control(LIGHT_GREEN, LIGHT_OFF);

 flag = 2;

 break;

 case 2: //绿灯取反,红灯暗,蓝灯暗

 light_change(LIGHT_GREEN);

 light_control(LIGHT_RED, LIGHT_OFF);

 light_control(LIGHT_BLUE, LIGHT_OFF);

 flag = 3;

 break;

 case 3: //红灯取反,绿灯亮,蓝灯暗,呈黄色

 light_change(LIGHT_RED);

 light_control(LIGHT_BLUE, LIGHT_OFF);

 flag = 4;

 break;

 case 4: //绿灯亮,蓝灯取反,红灯暗,呈青色

 light_change(LIGHT_BLUE);

 light_control(LIGHT_RED, LIGHT_OFF);

 flag = 5;

 break;

 case 5: //蓝灯亮,红灯取反,绿灯暗,呈紫色

 light_change(LIGHT_RED);

 light_control(LIGHT_GREEN, LIGHT_OFF);

 flag = 6;

 break;

 case 6: //红灯亮,绿灯亮,蓝灯亮,呈白色

 default:

 light_change(LIGHT_GREEN);

 flag = 0;

 break;

}

(2)拨码开关开关(另一端口引脚)控制小灯亮暗

思路分析:

由于没有实验箱,故使用B端口8引脚控制小灯亮暗。首先将此引脚设置为gpio功能,然后将其定义为输入,当输入为高电平,将0信号输入到19号引脚控制小灯亮;当输入为低电平时,将1信号输入到19号引脚控制小灯暗。

相关代码如下:

 

 

 

在main()函数中的for循环下写控制代码:

 

3.进阶实验★

(1)利用三色灯实现模拟路口交通灯的显示效果。

思路分析:

用一个灯实现故障报警灯,则可通过控制每组内灯亮的次数,间隔以及每组警报间的时间间隔来区分不同的警报。

具体代码如下:

 

 

通过switch语句,选择不同的语句可以获得不同的报警灯效果。

(3)设计一个key构件获取gpio引脚电平变化。

思路分析:

  1. 在06_App_Component中新建一个key文件夹;
  2. 在主函数中初始化key构件,在循环中通过获取当前端口状态而改变端口的状态。
  3. 在key.c中实现key构件的三个方法;
  4. 在key.h中声明key构件的三个方法:key构建初始化、获取端口状态、改变端口状态
  5. 将light文件夹中的light.c和light.h复制到key文件夹中,并改名为key.c和key.h;

相关代码如下:

 

Key.h

 

 

 

Key.c

 

 

 

 

(4)不用取反寄存器实现 “反转指定 GPIO 引脚输出状态”相同功能的构件函数。

思路分析:

取反寄存器的功能:写0不改变输出寄存器相应位,写1将输出寄存器的相应位去反(即1变0,0变1)。

如果原来小灯亮(19号引脚输出为0)则令小灯灭(19号引脚输出1);否则令小灯亮(19号引脚输出0)。

相关代码如下(main()函数内修改):

 

 

四.实验总结

通过该实验实习,了解KDS集成开发环境的使用方法、开发工具的安装及使用,同时掌握了MCU的C程序框架结构,熟悉了GPIO口的编程方法,构件的编写等知识。通过本次实验,我从底层深入的理解了MCU是如何通过引脚来控制各个部件进行工作,为以后的学习和实验打下了坚实的基础。

嵌入式技术基础与实践(第4版)

实验 熟悉实验开发环境GPIO编程 结构合理、条理清晰的程序结构,有助于提高程序的可移植性与可复用性,有利于程序 的维护。学习嵌入式软件编程,从开始就养成规范编程的习惯,将为未来发展打下踏实基 础。这是第实验,目的是以通用输入输出为例,达到熟悉实验开发环境、理解规范编程 结构、掌握基本调试方法等目的。 实验目的 本实验通过编程控制 LED 小灯,体会 GPIO 输出作用,可扩展控制蜂鸣器、继电器等; 通过编程获取引脚状态,体会 GPIO 输入作用,可用于获取开关的状态。主要目的如下: (1)了解集成开发环境的安装与基本使用方法。 (2)掌握 GPIO 构件基本应用方法,理解第个 C 程序框架结构,了解汇编语言与 C 语言的如何相互调用。 (3)掌握硬件系统的软件测试方法,初步理解 printf 输出调试的基本方法。 二、实验准备 (1)硬件部分。PC 机或笔记本电脑台、开发套件套。 (2)软件部分。根据网上光盘“..\02-Doc”文件夹下的电子版快速指南,下载合适的电 子资源。 (3)软件环境。按照电子版快速指南中“安装软件开发环境节,进行有关软件工 具的安装。 三、参考样例 (1)“.. \04-Soft\CH04-GPIO\GPIO-Output-DirectAddress)”。该程序使用直接地址编程方 式,点亮个发光二极管。从中可了解到,模块的哪个寄存器的哪位变化使得发光二极管 亮了,由此理解硬件是如何干预软件的。但这个程序不作为标准应用编程模板,因为要真正 进行规范的嵌入式软件编程,必须封装底层驱动构件,在此基础上进行嵌入式软件开发。 (2)“.. \04-Soft\CH04-GPIO\GPIO-Output-Component”。该程序通过调用 GPIO 驱动构 件方式,使得个发光二极管闪烁。使用构件方式编程干预硬件是今后编程的基本方式。而 使用直接地址编程方式干预硬件,仅用于底层驱动构件制作过程中的第阶段(打通硬件), 为构件封装做准备。 四、GPIO知识要素与构件接口 1.GPIO 知识要素 通用输入输出(General Purpose Input/Output,GPIO),是 I/O 最基本形式,是几乎所有 计算机均使用到的部件。通俗地说,GPIO 是开关量输入输出的简化名称。而开关量是指逻 辑上具有 1 和 0 两种状态的物理量。开关量输出,可以是指在电路中控制电器的开和关,也 可以是指控制灯的亮和暗,还可以是指闸门的开和闭等等。开关量输入,开关量输出,可以 是指获取电路中电器开关状态,也可以是指获取灯的亮暗状态,还可以是指获取闸门开关状 态等等。 GPIO 硬件部分的主要知识要素有:GPIO 的含义与作用、输出引脚外部电路的基本接 法及输入引脚外部电路的基本接法等。 1)GPIO 的含义与作用 从物理角度,GPIO 只有高电平与低电平两种状态。从逻辑角度,GPIO 只有“1”和“0” 两种取值。在使用正逻辑情况下,电源(Vcc)代表高电平,对应数字信号“1”;地(GND) 代表低电平,对应数字信号“0”。作为通用输入引脚,计算机内部程序可以获取该引脚状 态,以确定该引脚是“1”(高电平)或“0”(低电平),即开关量输入。作为通用输出引 脚,计算机内部程序可以控制该引脚状态,使得引脚输出“1”(高电平)或“0”(低电平), 即开关量输出。 GPIO 的输出是以计算机内部程序通过单个引脚控制着开关量设备,达到自动控制开关 状态之目的。GPIO 的输入是以计算机内部程序获取单个引脚状态,达到获得外界开关状态 之目的。 特别说明:注意在不同电路中,逻辑“1”对应的物理电平不同。在 5V 供电的系统中, 逻辑“1”的特征物理电平为5V;在3.3V供电的系统中,逻辑“1”的特征物理电平为3.3V。 因此,高电平的实际大小取决于具体电路。 2)输出引脚外部电路的基本接法 作为通用输出引脚,计算机内部程序向该引脚 输出高电平或低电平来驱动器件工作,即开关量输 出。如图 1-1 所示,输出引脚 O1 和 O2 采用了不同 的方式驱动外部器件。种接法是 O1 直接驱动发光 二极管 LED,当 O1 引脚输出高电平时,LED 不亮; 当 O1 引脚输出低电平时,LED 点亮。这种接法的驱 动电流般在 2mA~10mA。另种接法是 O2 通过 个 NPN 三极管驱动蜂鸣器,当 O2 引脚输出高电 平时,三极管导通,蜂鸣器响;当 O2 引脚输出低电 平时,三极管截止,蜂鸣器不响。这种接法可以用 O2 引脚上的几个 mA 的控制电流驱动高达 100mA 的驱 动电流。若负载需要更大的驱动电流,就必须采用光电隔离外加其他驱动电路,但对计算机 编
最新发布
03-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值