NXP MCU 技术论坛
直播中

suyong_yq

12年用户 105经验值
擅长:电源/新能源 嵌入式技术 控制/MCU
私信 关注
[资料]

【KL25】LiteFwLib固件库之GPIO驱动程序及样例工程-基于Keil和KL25

LiteFwLib固件库之GPIO驱动程序及样例工程

2015年1月


固件库原帖见
https://bbs.elecfans.com/jishu_464558_1_1.html

哎,此处省略一万字,只为说明一个情况,“忙”。。。如果非要加一个形容的话,那就是,“哎”。。。

参加咱们KL25的学习活动已经整整一个星期了,其实之前手头上也有一块FRDM-KL25,所以可以提前做一些功课,即使经历了不少波折,但我还是拿到了跟大家一起团购的FRDM-KL25板子,挺开心的。

作为学习过程的记录,我也为FRDM-KL25写了一个简单的固件库。我在学习KL25芯片的过程中,也会不断丰富LiteFwLib固件库,除了USB之外(USB实在是一个大模块,软件上的内容就更多了),其它模块的驱动基本上都会搜罗进来。等完善之后,就发布出来第一个正式版本,平时做做小开发啥的就已经能够满足需求了。现在已经支持不少功能啦。
image_00.png

最近看咱们的学习群有不少童鞋也陆续收到的板子,我寻思着大家也可以用我的LiteFwLib固件库做一些实验了。除了LiteFwLib本身使用专业的软件架构及版本管理等优良特性外(自卖自夸哈),附带的一些例子程序也可以作为大家熟悉模块功能带来一些帮助,也方便大家熟悉LiteFwLib的使用方法。当然,更长远的一个打算,就是希望以后咱们写单片机程序不用肯生涩难懂的手册,只要简单地调用几个功能函数就可以完成自己的设计。

今天为大家带来的是关于GPIO驱动程序及样例工程gpio_led。

关于GPIO驱动程序,玩过单片机的童鞋们都非常熟悉,无论是谁家的单片机都有这个功能。对GPIO的操作函数API(Application Program Interface, 应用编程接口)也就是那么几个:配置引脚方向啊,设定输出逻辑电平,读取输入逻辑电平等等。对于飞思卡尔的GPIO还在硬件上设计了一个非常实用的小功能,就是反转输出逻辑电平,特别是控制小灯闪烁的时候特别好用,谁用谁知道。

相对应地,在LiteFwLib中的GPIO驱动程序中也设计了完成这几个功能的API,见图1。
image_01.png
图1

这里面提供了两组API,分别以端口和引脚作为使用操作对象。端口操作在模拟并行通信总线上用的比较多,但是引脚操作在单片机的应用中更为广泛。

关于驱动的介绍就这么简单说一下,基本上都是通用的概念,这里就不照搬教科书了。下面介绍一下LiteFwLib固件库中应用GPIO的一个例子。

在LiteFwLib固件库的“example”目录下存放了使用驱动模块最基本的例子工程,关于GPIO的例子工程是“gpio_led”。插一句,写到这里我才意识到编号第一的工程竟然是“uart_hello”,好吧,都已经写到这里了,关于“uart_hello”的帖子就放到下回分解吧。“gpio_led”演示的就是使用GPIO的引脚输出功能控制FRDM-KL25板子上的小灯闪起来,下面大家跟我一起看看用LiteFwLib控制这个小灯的程序是怎么运行的。

首先打开“gpio_led”的Keil工程,如图2。
image_02.png
图2

在“gpio_led”中,我们使用到了UART模块、GPIO模块,SIM模块和PORT模块:

- UART负责建立板子同电脑的通信,使用在串口终端同板子进行交互;
- GPIO就是控制小灯亮灭啦;
- SIM模块看似默默无闻,但实际上是非常重要的,负责在芯片内部将各个模块连接起来,比较常用的就是把从MCG(时钟发生器)产生的时钟信号传递到各个功能模块让它们工作起来。
- PORT模块是芯片内部信号到芯片引脚上的一个关口,过了这个关口,芯片内部的电平信号才能通过芯片引脚传递到电路板上。

首先,在init_board()函数里要完成对板子的初始化。如图3。
image_03.png

第一个红框里是调用SIM模块在芯片内部连了一些线,第二个红框里就是调用SIM模块把时钟信号引导到PORT模块让芯片内部信号可以同行到外部,同时给用作通信端口的UART提供工作时钟信号。第三个红框是配置引脚功能的。芯片内部丰富但引脚数量有限,所以一般一个引脚都有可能复用成多种功能,实际上就是由PORT模块决定这个引脚要同哪个模块的信号接通。这里打通的只是一个UART的两个引脚作为UART的Tx和Rx,还有控制LED小灯的三个引脚作为GPIO功能。第四个红框是配置UART工作的,因为标准输入输出(stdio)需要搭载到这个串口上,所以要在正式的程序之前就要配置好。

初始化板子之后,就可以准备配置GPIO控制小灯啦。例子程序的执行逻辑如图4。
image_04.png
图4

先是调用GPIO_SetPinLogic()设定好控制三个小灯的GPIO若为输出时的电平信号为高(小灯灭),然后调用GPIO_SetPinDir()设定这三个GPIO引脚的数据方向为输出。这里有个顺序要特别强调。为什么我们不是先设定输出再设定输出电平呢?这是为了保证在引脚配置为输出时不会产生不正确的控制电平。在芯片复位后,默认GPIO引脚的方向是输入的,这个时候GPIO引脚不会影响到控制信号线上的电平,一旦设置数据方向,就必须保证控制信号电平是正确的。

后面就是调用GPIO_TogglePinLogic()控制反转GPIO引脚输出电平,闪烁小灯啦。

运行效果

将程序下载到FRDM-KL25板子后,在电脑上打开串口终端。然后戳一下FRDM-KL25板子上的复位按键复位程序,就可以看到串口终端上输出的欢迎信息,如图5。
image_05.png
图5

看一眼FRDM-KL25板子,有个黄绿色的灯在颤抖,别想了,那是调试器的指示灯。我们要控制的等比这个闪亮多啦。

用鼠标戳一下串口终端,确保这个终端窗口是激活的,然后戳一下电脑键盘的随便哪个按键(我比较喜欢用空格,面积大,容易戳准,没办法,俺手指头粗)。这个时候我们编程的那个LED就亮起来啦。多戳几下,还会变颜色呢。
IMG_20150113_230501.jpg.JPG
IMG_20150113_230511.jpg.JPG IMG_20150113_230515.jpg.JPG IMG_20150113_230518.jpg.JPG IMG_20150113_230522.jpg.JPG

用LiteFwLib控制GPIO真简单!



回帖(4)

姜波

2015-1-15 14:14:49
沙发吧,成功了,就是还需要认真钻研。
举报

林璟怡

2015-1-18 17:11:02
支持!!!用库好方便,最后的组图好唯美啊哈哈哈
举报

suyong_yq

2015-1-18 18:07:28
引用: 初代饭影 发表于 2015-1-18 17:11
支持!!!用库好方便,最后的组图好唯美啊哈哈哈

拍成这个样子,也是碰巧了。当时电脑放在床上的小桌子上,身体也挪腾不开,所以拍摄的角度都差不多,哈哈。
举报

juexingzhe

2015-10-12 11:15:26
真心感谢楼主!!!!!!!!!!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分