实验一 熟悉实验开发环境及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版)

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值