打印
[Kinetis]

【FRDM-K64F+MBED】串口功能-2

[复制链接]
906|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小猫爱吃鱼|  楼主 | 2015-12-25 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这次的程序实现了一个经由串口输入一个字符来控制 FRDM-K64F 板底 LED 闪烁 RGB 颜色的功能,程序的功能并不复杂,主要的目的是要熟悉几个 MBED 函数的使用。

MBED 中串口在宣告之后波特率的默认设置是 9600,在这次的程序当中我们将串口波特率设置为 115200。
pc.baud(115200);
先前使用的 wait() 函数是一个简单方便的延时函数,但是呼叫后会让程序在这里停留而没有办法处理其他的工作,这一次我们使用了 Timer 定时器处理 LED 状态翻转所需要的延时功能。程序一开始定义了一个 tmr 定时器:
Timer tmr;


相关帖子

沙发
小猫爱吃鱼|  楼主 | 2015-12-25 20:13 | 只看该作者
在呼叫 start() 函数之后启动定时器开始计时:
tmr.start();
程序中使用 read_ms() 函数读取目前的定时器计数值,函数会返回以 1ms 为单位的计数值,当程序判断计数值大于等于 500ms 时将 LED 状态翻转,最后呼叫 reset() 函数将计数值清零重新计数。

使用特权

评论回复
板凳
小猫爱吃鱼|  楼主 | 2015-12-25 20:14 | 只看该作者
if(tmr.read_ms() >= 500) {
    switch(id) {
        case 0:
            led1 = !led1;
            break;
        case 1:
            led2 = !led2;
            break;
        case 2:
            led3 = !led3;
            break;
    }

    tmr.reset();
}

使用特权

评论回复
地板
小猫爱吃鱼|  楼主 | 2015-12-25 20:15 | 只看该作者
对于串口输入的读取我们在回圈中使用 readable() 函数判断串口是否有字符可以读取?有的话呼叫 getc() 函数读取一个字符,然后判断是否为 r R g G b B 字符然后做相应的处理。
if(pc.readable() == 1) {
    led1=led2=led3=OFF;
    switch (pc.getc()) {
        case 'r':
        case 'R':
            led1 = ON;
            id = 0;
            idx = 0;
            break;
        case 'g':
        case 'G':
            led2 = ON;
            id = 1;
            idx = 0;
            break;
        case 'b':
        case 'B':
            led3 = ON;
            id = 2;
            idx = 0;
            break;
    }
}

使用特权

评论回复
5
小猫爱吃鱼|  楼主 | 2015-12-25 20:15 | 只看该作者
程序中会依输入字符的不同再经由串口打印出相应的讯息,不过这里我们不使用 printf() 函数,而是在回圈中使用 writeable() 函数判断串口是否可以写入字符?可以的话呼叫 putc() 函数依 idx 的指向将 msg 数组中的字符串一个一个的依序送出。
if(idx != -1) {
    if(pc.writeable() == 1) {
        ch = msg[id][idx];
        if(ch != 0) {
            pc.putc(ch);
            idx++;
        }
        else {
            idx = -1;
        }
    }
}

使用特权

评论回复
6
小猫爱吃鱼|  楼主 | 2015-12-25 20:16 | 只看该作者
运行结果:







使用特权

评论回复
7
小猫爱吃鱼|  楼主 | 2015-12-25 20:17 | 只看该作者
主程序:

main.rar

617 Bytes

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

294

帖子

2

粉丝