打印
[Kinetis]

KL25与lcd液晶显示问题!

[复制链接]
5758|56
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
774729254|  楼主 | 2013-11-26 11:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
用串口接收字符串在lcd上显示,为什么输入一个字符时可以一直显示,大于一个字符时就闪一下就没有了呢?

//串口1接收中断服务例程
void isr_uart1_re(void)
{
    uint_8 flag = 1;
   uint_8 buff[32]="                                "; //定义要在lcd上显示的字符
    uint_8 k[32];
   uint_8 i;
    enter_critical();
    flag=uart_reN (UART_1,32,buff);//函数名称:uart_reN
                                                      //参数说明:uartNo: 串口号:UART_0、UART_1、UART_2                                                   
                                                      //          buff: 接收缓冲区
                                                           / /          len:接收长度
                                                      //函数返回:函数执行状态 0=正常;非0=异常
                                                     //功能概要:串行 接收n个字节

    if(0==flag)
    {
            uart_send_string(UART_1, buff);  //发送字符串          
    }

    exit_critical();
    for(i=0;i<32;i++)
      {
              k=buff;
      }
      LCDShow(k);
}

相关帖子

沙发
FSL_TICS_Robin| | 2013-11-26 11:28 | 只看该作者
你的这个循环想做什么?
    for(i=0;i<32;i++)
      {
              k=buff;
      }


还有就是LCDShow函数内容是什么?

使用特权

评论回复
板凳
FSL_TICS_Robin| | 2013-11-26 11:37 | 只看该作者
我刚看了下你另外一个帖子,觉得你还不是很清楚到底应该什么时候去调用LCDShow函数显示。
请问你想要串口每收一个字符就显示,还是收完一串字符后才显示?

还有你的串口是否设置了接收缓冲区,是每收到一个字符就进中断,还是多个字符后进一次中断?

使用特权

评论回复
地板
774729254|  楼主 | 2013-11-26 13:14 | 只看该作者
本帖最后由 774729254 于 2013-11-26 13:16 编辑
FSL_TICS_Robin 发表于 2013-11-26 11:37
我刚看了下你另外一个帖子,觉得你还不是很清楚到底应该什么时候去调用LCDShow函数显示。
请问你想要串口每 ...

收完一串字符后才显示,接收多个字节以后中断

QQ图片20131126131738.jpg (37.41 KB )

QQ图片20131126131738.jpg

使用特权

评论回复
5
774729254|  楼主 | 2013-11-26 13:27 | 只看该作者
FSL_TICS_Robin 发表于 2013-11-26 11:28
你的这个循环想做什么?
    for(i=0;i

这个没有完全显示出来,下面我发了截图
LCDShow函数如下图

QQ图片20131126132859.jpg (78.4 KB )

QQ图片20131126132859.jpg

使用特权

评论回复
6
FSL_TICS_MAHUI| | 2013-11-26 14:00 | 只看该作者
每次进入UART中断接收一个字符,并将所收到的字符放入数组中,直到所有字符收齐后在调用显示函数。不要在中断中调用LCDShow函数,使用变量作为标志位,在UART中置位这个表示,这个标志位在主循环中觉得是否调用LCDShow函数。

使用特权

评论回复
7
FSL_TICS_Robin| | 2013-11-26 14:03 | 只看该作者
774729254 发表于 2013-11-26 13:27
这个没有完全显示出来,下面我发了截图
LCDShow函数如下图

你有单独测试过LCDShow函数,显示正常吗?

使用特权

评论回复
8
774729254|  楼主 | 2013-11-26 14:05 | 只看该作者
FSL_TICS_Robin 发表于 2013-11-26 14:03
你有单独测试过LCDShow函数,显示正常吗?

正常的,lcd显示和串口接收都是正常的,就是弄到一起就不行了,我这个可以显示,就是会一闪就没有了,如果加个延时,是可以看到的,但是为什么会自动就清屏呢

使用特权

评论回复
9
FSL_TICS_Robin| | 2013-11-26 14:27 | 只看该作者
你试下进串口中断后关闭中断使能,退出串口中断前再打开中断使能。
在这种条件下再测试发送大于一个字符串口信息是否会被刷屏

使用特权

评论回复
10
774729254|  楼主 | 2013-11-26 20:48 | 只看该作者
FSL_TICS_Robin 发表于 2013-11-26 14:27
你试下进串口中断后关闭中断使能,退出串口中断前再打开中断使能。
在这种条件下再测试发送大于一个字符串 ...

还是会刷屏

使用特权

评论回复
11
774729254|  楼主 | 2013-11-26 21:20 | 只看该作者
FSL_TICS_Robin 发表于 2013-11-26 14:27
你试下进串口中断后关闭中断使能,退出串口中断前再打开中断使能。
在这种条件下再测试发送大于一个字符串 ...

我调出来了,谢谢!

使用特权

评论回复
12
FSL_TICS_Robin| | 2013-11-27 09:07 | 只看该作者
请问问题出在哪里呢,是进中断太频繁打断屏幕显示了吗?

使用特权

评论回复
13
774729254|  楼主 | 2013-11-27 10:25 | 只看该作者
FSL_TICS_Robin 发表于 2013-11-27 09:07
请问问题出在哪里呢,是进中断太频繁打断屏幕显示了吗?

我在接收完成之后加了禁止中断使能,这样他就不会闪了,但是当我在粗输入时他不会变了,然后我又加了使能串口接收中断,这样就可以了!多谢你 的启发!

QQ图片20131127102456.jpg (43.04 KB )

QQ图片20131127102456.jpg

使用特权

评论回复
14
774729254|  楼主 | 2013-11-27 10:27 | 只看该作者
FSL_TICS_Robin 发表于 2013-11-27 09:07
请问问题出在哪里呢,是进中断太频繁打断屏幕显示了吗?

我感觉他一直在中断里面,一直在接收,以至于接到空字符把之前的覆盖了

使用特权

评论回复
15
FSL_TICS_MAHUI| | 2013-11-27 11:17 | 只看该作者
要清除接收中断标志,需要先读取UARTx_S1位,然后再读取数据寄存器的值。请参考下面的代码清除RDRF标志位:
    /* Check to see if the rx full flag is set */
    if (status & UART_S1_RDRF_MASK)
    {
        printf("\nUART receive data register full.\n");
        num_rdrf_int++;

        /* Read data register to clear the flag */
        temp = UART_D_REG(channel);
        
        /* Print out the character received (useful for low power mode tests) */
        out_char(temp);
    }

使用特权

评论回复
16
FSL_TICS_Robin| | 2013-11-27 11:31 | 只看该作者
如果不清除中断标志,程序将会重复进入中断函数

使用特权

评论回复
17
774729254|  楼主 | 2013-11-27 13:33 | 只看该作者
FSL_TICS_Robin 发表于 2013-11-27 11:31
如果不清除中断标志,程序将会重复进入中断函数

我把串口接收中断使能关闭可以吗?

使用特权

评论回复
18
FSL_TICS_Robin| | 2013-11-27 14:24 | 只看该作者
774729254 发表于 2013-11-27 13:33
我把串口接收中断使能关闭可以吗?

其实之前MAHUI推荐你串口中断里只接收数据将其放入数组并给出标志,主函数里根据标志去把数组中值显示。
就是为了防止你连续接收串口,导致短时间内多次进中断,如果显示函数在串口接收中断里会来不及执行。

使用特权

评论回复
19
FSL_TICS_Robin| | 2013-11-27 14:29 | 只看该作者
774729254 发表于 2013-11-27 13:33
我把串口接收中断使能关闭可以吗?

关键是中断函数中不要放太多处理信息的函数,中断函数长了你再在中断函数中禁止中断,那执行这中断函数时间内如果有串口中断来就没法收了。

使用特权

评论回复
20
FSL_TICS_Robin| | 2013-11-28 10:26 | 只看该作者
你的串口中断程序现在是否能正常工作了?
标志是否成功清除,是否还会因为这问题重复进入中断?
中断函数要简短,这样因为外面串口数据连续发送过来,你才能不遗漏地全部接收。
串口接收中断还是要单独调好,数据保存在数组里以备中断函数外部的程序调用LCD显示。

使用特权

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

本版积分规则

58

主题

299

帖子

1

粉丝