打印
[技术问题解答]

KL25串口接收一帧数据错误???

[复制链接]
3028|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
oscar0724|  楼主 | 2014-7-29 11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是要在接收中断中调用函数h_rx1byte(void)接收一个数据 ,为啥不能接收一个数据就调用一次,进入函数h_rx1byte(void)进行判断。。void h_rx1byte(void)
{unsigned char rxbuf;
  //while (!(UART_S1_REG(UART0_BASE_PTR) & UART_S1_RDRF_MASK));   
rxbuf=UART0_D_REG(UART0_BASE_PTR);
//rx_overtime = 1000;                //ÑÓ³Ù30mS
//if((COMSTA0 & BIT2) == BIT2)        //ÆæżУÑéλ³ö´í
   //{H_T_ACK[0] = H_T_ACK[0]  | BIT6;     
   //}
if(H_R_STATUS == 0)
   {if(rxbuf == 0xff)
      {rxsize++;
          printf("STATUS==0\r\n");
           if(rxsize >= 2)         //Á¬ÐøÊÕÁË2¸öÇ°µ¼Âë
             {H_R_STATUS = 1; printf("STATUS==1\r\n");
                  rxsize = 0;
                 H_T_ACK[0] = 0;        //ÏìÓ¦ÂëµÚ1,2×Ö½ÚÇå0
                 H_T_ACK[1] = 0;
                 }

中断调用函数的实现

//temp[ii++]=uart0GetChar();
while(UART0_S1_REG(uartPtr) & UART0_S1_RDRF_MASK){   
        //     /* Çå³ýÖжϱêÖ¾         */
//uart0SendChar(UART0_D_REG(uartPtr));   /* ·µ»Ø½ÓÊÕÊý¾Ý         */
    //;
//ii=  UART0_D_REG(uartPtr);   
h_rx1byte();
//while(!UART0_D_REG(uartPtr));                                          /* Çå½ÓÊÕ»º³åÇø         */

}

相关帖子

沙发
FSL_TICS_ZJJ| | 2014-7-29 12:42 | 只看该作者
楼主,你接收中断里可以直接取数据啊,为什么还要调用函数呢?
你函数h_rx1byte(void)里面写了多少代码?你的代码实在太多,中断服务程序太长,会出问题的。
中断中的代码要尽量简短,调用函数还是比较花时间的,所以有代码直接在中断中写,不要再调用函数。
中断中只做最重要的事情,比如拿数据,其他的可以放在主程序中做。

使用特权

评论回复
板凳
xinyinxing| | 2014-7-29 12:47 | 只看该作者
中断中直接取值,其他事可以主函数中做。
楼主写代码习惯要改改哦

使用特权

评论回复
地板
FSL_TICS_ZJJ| | 2014-7-30 09:25 | 只看该作者
楼主可以参考我们官方的代码,在我们坛子有两篇相关的文档,你可以参考下:
https://bbs.21ic.com/icview-658940-1-1.html
https://bbs.21ic.com/icview-661746-1-1.html
如果还有问题,欢迎继续交流。

使用特权

评论回复
5
oscar0724|  楼主 | 2014-7-30 14:04 | 只看该作者
好的  我看看。。另外怎么感觉那个KL25的奇偶校验有点问题  每次通信正常的话 交个校验就乱码了

使用特权

评论回复
6
oscar0724|  楼主 | 2014-7-30 14:06 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-7-29 12:42
楼主,你接收中断里可以直接取数据啊,为什么还要调用函数呢?
你函数h_rx1byte(void)里面写了多少代码?你 ...

好的  我看下 我想问下KL25的奇偶校验不是只要使能和选择奇偶类型就会硬件校正 了吗,怎么我每次通信正常 加个奇偶校验就出问题了

使用特权

评论回复
7
FSL_TICS_ZJJ| | 2014-7-30 14:22 | 只看该作者
oscar0724 发表于 2014-7-30 14:06
好的  我看下 我想问下KL25的奇偶校验不是只要使能和选择奇偶类型就会硬件校正 了吗,怎么我每次通信正常 ...

你加奇偶校验会出什么问题呢?
你和串口助手调试试试看可以吗?
实在不行,你用示波器把波形抓出来看看是什么情况。

使用特权

评论回复
8
oscar0724|  楼主 | 2014-7-30 14:40 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-7-30 14:22
你加奇偶校验会出什么问题呢?
你和串口助手调试试试看可以吗?
实在不行,你用示波器把波形抓出来看看是 ...

接收不正确。。缺少字节 且字节不正确

使用特权

评论回复
9
oscar0724|  楼主 | 2014-7-30 15:40 | 只看该作者
oscar0724 发表于 2014-7-30 14:40
接收不正确。。缺少字节 且字节不正确

求解  示波器怎么抓

使用特权

评论回复
10
FSL_TICS_ZJJ| | 2014-7-30 15:58 | 只看该作者
oscar0724 发表于 2014-7-30 14:40
接收不正确。。缺少字节 且字节不正确

你告诉我你是怎么通信的?
什么和什么通信呢?另外一端有没有使能奇偶校验呢?
你是发送出错了?如果这样,很简单啊,你直接用示波器的探头接在发送引脚上,监测通信时的波形啊,正好可以分析分析波形,看你的加奇偶校验和不加奇偶校验波形有什么区别,那个奇偶校验位有没有加上去啊。

使用特权

评论回复
11
oscar0724|  楼主 | 2014-7-30 16:10 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-7-30 15:58
你告诉我你是怎么通信的?
什么和什么通信呢?另外一端有没有使能奇偶校验呢?
你是发送出错了?如果这样 ...

我是串口猎人和开发板的KL25调试,在设置的时候那个那个数据位的时候是不是9位啊 校验位也算是数据位的吧,我发现当发送奇数个1的数据的时候 收发正常,发送偶数个的时候收发不正常 例如发送01  收到01  发送02  收到02  发送03收到 83 但是printf(“MCU  START ”)正常。。。

使用特权

评论回复
12
FSL_TICS_ZJJ| | 2014-7-30 16:16 | 只看该作者
oscar0724 发表于 2014-7-30 16:10
我是串口猎人和开发板的KL25调试,在设置的时候那个那个数据位的时候是不是9位啊 校验位也算是数据位的吧 ...

数据位还是8啊,就把校验位置上。
你选择是奇数校验还是偶数校验的。
再试试,还不行,你就看看示波器波形,串口助手也不一定准。

使用特权

评论回复
13
oscar0724|  楼主 | 2014-7-30 17:21 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-7-30 16:16
数据位还是8啊,就把校验位置上。
你选择是奇数校验还是偶数校验的。
再试试,还不行,你就看看示波器波 ...

我想问下KL25的奇偶校验是只要设置检验使能还有选择校验类型就会自动校验吗?发现里面只有接收校验错误标志,没有发送的校验在哪弄呢

使用特权

评论回复
14
FSL_TICS_ZJJ| | 2014-7-31 08:57 | 只看该作者
oscar0724 发表于 2014-7-30 17:21
我想问下KL25的奇偶校验是只要设置检验使能还有选择校验类型就会自动校验吗?发现里面只有接收校验错误标 ...

是的,如果你配置好了奇偶校验相关的设置,硬件会自动添加这个奇偶校验位的。
只有接受校验这点,如果你仔细看UART的发送和接受框图,你就会发现,其实发送的时候,奇偶校验位是自己生成的,肯定是正确的。
接收的时候是接的另外一方的,所以才需要判断。

使用特权

评论回复
15
oscar0724|  楼主 | 2014-7-31 09:09 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-7-31 08:57
是的,如果你配置好了奇偶校验相关的设置,硬件会自动添加这个奇偶校验位的。
只有接受校验这点,如果你 ...

需要怎么判断呢 可以具体说下嘛

使用特权

评论回复
16
FSL_TICS_ZJJ| | 2014-7-31 09:15 | 只看该作者
oscar0724 发表于 2014-7-31 09:09
需要怎么判断呢 可以具体说下嘛

你可以看下什么叫奇偶校验,网上**很多的,
比如:http://wenku.baidu.com/view/53ef50eb19e8b8f67c1cb96f.html
你先了解下。
对于KL25,你接收的时候只要查看寄存器位就行了,或者你也可以使用出错中断来提醒自己出现通信问题了。

使用特权

评论回复
17
oscar0724|  楼主 | 2014-7-31 10:51 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-7-31 09:15
你可以看下什么叫奇偶校验,网上**很多的,
比如:http://wenku.baidu.com/view/53ef50eb19e8b8f67c1cb ...

我了解奇偶校验,可就是出问题 ,不知道哪里出问题了

使用特权

评论回复
18
FSL_TICS_ZJJ| | 2014-7-31 10:54 | 只看该作者
oscar0724 发表于 2014-7-31 10:51
我了解奇偶校验,可就是出问题 ,不知道哪里出问题了

你出的是什么问题?
有没有看通信波形到底哪里错了?
你现在出问题是什么表象?

使用特权

评论回复
19
oscar0724|  楼主 | 2014-7-31 11:03 | 只看该作者
发送偶数个1的数据,高位会变,例如发送FF(11111111),接收到的数据会变成7F(0111 1111),发送7F(0111 1111)接收的数据是(0111 1111),但是发送奇数个1的数据没问题(例如1F,F1)

使用特权

评论回复
20
FSL_TICS_ZJJ| | 2014-7-31 12:45 | 只看该作者
oscar0724 发表于 2014-7-31 11:03
发送偶数个1的数据,高位会变,例如发送FF(11111111),接收到的数据会变成7F(0111 1111),发送7F(0111  ...

你是奇数校验吗?
看看示波器波形,把波形贴出来。

使用特权

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

本版积分规则

1

主题

21

帖子

1

粉丝