打印
[Kinetis]

KL25中断的优先级问题

[复制链接]
2709|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
774729254|  楼主 | 2013-11-21 19:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我想把串口接收的数据放在LCD上显示,我把串口接收数据放在串口中断里,开始我把LCD显示部分放在串口接收中断里,void isr_uart1_re(void),但是这样显示的数据不能一直显示,一闪一下就没有了,我想把显示放在定时器中,这样相隔一定的时间进行一次中断,执行显示程序,请问这样行得通吗?串口接收中断和定时器中断那个优先级别高?

相关帖子

沙发
xinyinxing| | 2013-11-21 21:57 | 只看该作者
你LCD也是串口的吗?每次没有了是清屏了吗?

使用特权

评论回复
板凳
FSL_FAE_River| | 2013-11-21 22:00 | 只看该作者
如果闪一下就没有了 是不是有自动清屏这回事?
我觉得用中断去做显示有点浪费资源,用查询方式每隔10ms一次就已经很足够了

使用特权

评论回复
地板
774729254|  楼主 | 2013-11-22 09:39 | 只看该作者
FSL_FAE_River 发表于 2013-11-21 22:00
如果闪一下就没有了 是不是有自动清屏这回事?
我觉得用中断去做显示有点浪费资源,用查询方式每隔10ms一次 ...

我的清屏是在初始化里面的,显示是放在串口接收中断里,他退出中断不就不显示了吗

使用特权

评论回复
5
FSL_TICS_ZJJ| | 2013-11-22 11:40 | 只看该作者
按照道理,液晶屏本来显示的数据,直到下一次更新显示改变,或者清屏才会不再显示。这个你需要检查一下你的液晶屏的指令方面,结合串口发出的数据,看是否清屏了。或者像3楼说的,是否存在自动清屏。

使用特权

评论回复
6
774729254|  楼主 | 2013-11-22 12:57 | 只看该作者
FSL_TICS_ZJJ 发表于 2013-11-22 11:40
按照道理,液晶屏本来显示的数据,直到下一次更新显示改变,或者清屏才会不再显示。这个你需要检查一下你的 ...

//串口1接收中断服务例程
void isr_uart1_re(void)
{
    uint_8 st;
    uint_8 buff[32]="                                "; //定义要在lcd上显示的字符
    enter_critical();
    st=uart_reN (UART_1,32,buff);
    if(st==0)
    {
            uart_send_string(UART_1, buff);  //发送字符串
             LCDShow(buff);
    }
    exit_critical();
}

我的程序是这样的!

使用特权

评论回复
7
FSL_TICS_ZJJ| | 2013-11-22 13:07 | 只看该作者
这里,如果你把buff清掉的话,那么肯定显示就被清了!所以你需要控制你的buff!

使用特权

评论回复
8
774729254|  楼主 | 2013-11-22 13:39 | 只看该作者
FSL_TICS_ZJJ 发表于 2013-11-22 13:07
这里,如果你把buff清掉的话,那么肯定显示就被清了!所以你需要控制你的buff! ...

亲,我应该怎么改呢

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2013-11-22 13:51 | 只看该作者
774729254 发表于 2013-11-22 13:39
亲,我应该怎么改呢


我觉得一个很简单的思路就是,你需要确认你是否这次真的接收到了数据,如果接到数据你就显示,没接到呢,你就不要显示。这样就不会被更新掉。
因为我看你
st=uart_reN (UART_1,32,buff);
这句话,我不知道你的这个st=0代表的是什么意思。是接到新的数据了吗?
你可以使用串口助手看看,每次给LCD串口发送的都是什么数据,是不是其中有空的数据,从而把你LCD屏幕给更新了。

使用特权

评论回复
10
774729254|  楼主 | 2013-11-22 13:59 | 只看该作者
FSL_TICS_ZJJ 发表于 2013-11-22 13:51
我觉得一个很简单的思路就是,你需要确认你是否这次真的接收到了数据,如果接到数据你就显示,没接到呢, ...

st是判断是否接收到数据,
/============================================================================
//函数名称:uart_reN
//参数说明:uartNo: 串口号:UART_0、UART_1、UART_2                                                   
//          buff: 接收缓冲区
//          len:接收长度
//函数返回:函数执行状态 0=正常;非0=异常
//功能概要:串行 接收n个字节

使用特权

评论回复
11
774729254|  楼主 | 2013-11-22 14:06 | 只看该作者
FSL_TICS_ZJJ 发表于 2013-11-22 13:51
我觉得一个很简单的思路就是,你需要确认你是否这次真的接收到了数据,如果接到数据你就显示,没接到呢, ...

我把显示放在这里也不行啊

QQ图片20131122140640.jpg (56.02 KB )

QQ图片20131122140640.jpg

QQ图片20131122140640.jpg (56.02 KB )

QQ图片20131122140640.jpg

使用特权

评论回复
12
FSL_TICS_ZJJ| | 2013-11-22 14:33 | 只看该作者
你如果不用动态串口接收显示的方式,直接用一个固定的show[i]去写LCD,会不会闪烁呢?比如你写一个程序,直接调用一次写LCD,你这个数据还是否在里面?首先需要确定是你LCD清屏,还是程序里给LCD的数据buff清掉。

使用特权

评论回复
13
FSL_TICS_A| | 2013-11-22 17:33 | 只看该作者
请问你的串口一直是在接收数据吗?如果连续接收的话,当然LCD会不断变化啊。

使用特权

评论回复
14
774729254|  楼主 | 2013-11-26 10:55 | 只看该作者
FSL_TICS_A 发表于 2013-11-22 17:33
请问你的串口一直是在接收数据吗?如果连续接收的话,当然LCD会不断变化啊。 ...

我的串口不是一直在接收数据,是通过PC机输入字符串,串口接收,送给lcd显示的,现在的问题是,当输入一个字符时,可以停在上面一直显示,当输入大于一个字符时,显示一下就没有了

使用特权

评论回复
15
FSL_TICS_MAHUI| | 2013-11-26 15:07 | 只看该作者
774729254 发表于 2013-11-26 10:55
我的串口不是一直在接收数据,是通过PC机输入字符串,串口接收,送给lcd显示的,现在的问题是,当输入一 ...

这个就是因为UART中断进入间隔太短,LCD已经显示过了,所以不要把LCD显示代码放到中断服务程序中。

使用特权

评论回复
16
64xiaodian| | 2016-1-27 00:22 | 只看该作者
学习中

使用特权

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

本版积分规则

58

主题

299

帖子

1

粉丝