打印
[资料分享与下载]

【YL-KL26Z开发】+ 串口通讯

[复制链接]
564|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Micachl|  楼主 | 2015-10-14 20:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分享给大家的是KL26Z的串口通讯程序,通过USB调试口与PC相连,PC发送数据,KL26Z接收后返回相同的数据。

程序不是很复杂,只要配置好串口就可以工作了。

下面是查询法的串口通讯:
#include "includes.h"

int  main (void)
{
    SystemCoreClockUpdate();                                            /* 时钟配置*/

    PORT_ENABLE_CLK(MKL_PORTA);                                         /* GPIO时钟使能 */

    uart0Init(9600,0,0,8,1);                                            /* UART0初始化 */
    while (1) {
        while(UART0_S1_REG(UART0_BASE_PTR) & UART0_S1_RDRF_MASK){       /* 清除中断标志 */
            uart0SendChar(UART0_D_REG(UART0_BASE_PTR));                 /* 返回接收数据 */
        }
    }
}


相关帖子

沙发
Micachl|  楼主 | 2015-10-14 20:05 | 只看该作者
然后再看中断法的串口通讯:
#include "includes.h"

int  main (void)
{
    SystemCoreClockUpdate();                                            /* 时钟配置*/

    PORT_ENABLE_CLK(MKL_PORTA);                                         /* GPIO时钟使能 */

    uart0Init(9600,0,0,8,1);                                            /* UART0初始化 */
    while (1) {

        }
    }
}

我们可以发现二者非常相似,配置完全相同,并且在串口初始化函数中发现二者都有一样的中断服务函数,但是当我把查询法WHILE中的程序删掉后发现无法实现功能。

经过一番查找发现,串口的初始化函数中有这么一段
#if UART0_IRQ_ENABLE   
        #if UART0_SEND_IRQ
        UART0_C2_REG(uartPtr) |= UART0_C2_TCIE_MASK;
        #endif
        #if UART0_RECEIVE_IRQ
        UART0_C2_REG(uartPtr) |= UART0_C2_RIE_MASK;
        #endif

使用特权

评论回复
板凳
Micachl|  楼主 | 2015-10-14 20:06 | 只看该作者
我在MKL_uart.h中发现UART0_IRQ_ENABLE 时,就有了答案。


查询法:   
#define UART0_DEFAULT_OPEN      1
#define UART0_IRQ_ENABLE        0      

中断法:
#define UART0_DEFAULT_OPEN      1 
#define UART0_IRQ_ENABLE        1   

然后就有了结果。

使用特权

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

本版积分规则

43

主题

300

帖子

1

粉丝