3784|5

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

MK60 串口如何接收不定长度的字符串? [复制链接]

    第一次用NXP的芯片,型号是MK60DN512VLQ10 ,编译器用的是CODEWARRIOR 10.6。
    之前用串口实现固定长度的数据接收并判断回复,没有问题,现在的情况是想跟别的设备对接,而这次想通过这个串口实现的功能是可以接收不定长度的字符串,根据我在STM32芯片上的经验,我选择了用总线空闲中断IDLE来进行处理,因为第一次用NXP芯片,所以我用PE生成了基本代码,但是这个生成的代码是没有IDLE使能的,所以我进行了一部分修改:使能了IDLE中断,增加了IDLE中断函数。
    实际的调试情况是没法正常工作,数据接收到没有反应,在自己定义的数据接收BUFFER里,数据顺序与实际不符,但是有点奇怪的规律,后来查过手册后,发现因为我使用的是UART1,根据数据手册描述,UART0,UART1的FIFO深度是8,其他的FIFO深度是1,那么我直接不使能FIFO是否可以解决呢?
//UART_PDD_EnableFifo(UART1_BASE_PTR, (UART_PDD_TX_FIFO_ENABLE)); /* Enable RX and TX FIFO */
    我直接注释掉了FIFO使能的语句,结果在BUFFER里的数据顺序也正常了,但是程序还是不能工作。
    根据程序运行状况,有如下问题:
    1.接收中断因为没有接收到足够的数据而不触发,但是IDLE中断又没有正确触发,因为如果触发了中断,我判断了BUFFER里的内容后,会用memset函数清除掉里面的内容。
    2.BUFFER里的数据位置问题,每次新收的数据都是在BUFFER里按顺序往下存储的,我想实现的是每次处理完成后,下次的数据进来是从
BUFFER[0]开始。
    3.PE生成的代码里有这样一个函数:
LDD_TError zigbee_ReceiveBlock(LDD_TDeviceData *DeviceDataPtr, LDD_TData *BufferPtr, uint16_t Size)
其中红字是我定义的部件名称,这个函数决定了我能收多少数据,和存储数据BUFFER,因为每次接收数据的长度不定,所以这个SIZE参数我都用的比较大,大于我收到的数据的最大长度,但是这就引出了问题1。

   请各位大神指点下,或者给个思路,因为这个芯片真的不熟悉。

此帖出自NXP MCU论坛

最新回复

设置成接收到一个字节就触发中断的状态。自己定义数据, 保存一定长度的数据。中断里,进行最简单的处理。字节存入你的数组。计数变量加一。消耗时间非常短。默认一帧数据中,相邻字节间隔远小于相邻帧的间隔。以此,进行时间判断。一定时间没有触发中断,认为一帧结束。设置对应标志。保存为一帧数据。  详情 回复 发表于 2019-1-20 21:47
点赞 关注(1)
 

回复
举报

9

帖子

2

TA的资源

一粒金砂(中级)

沙发
 
在一个GPS数据处理的程序里是这样搞得,stm32判断接收不定长的数据时是加了个定时器,有数据发过来时启动定时器,在设定的时间内没有新的数据到来即认为一帧数据接收完成,进行判断。NXP芯片没有过,只能给你说个思路。
此帖出自NXP MCU论坛
 
 
 

回复

1万

帖子

141

TA的资源

版主

板凳
 
从楼主的题目看,不定长字符的串口通迅是基于字节的,但看楼主帖内容,却提及到FIFO和接收中断,显然串口通迅程序本身尚存在问题,还没轮到字符串是否定长的问题。要先解决串口操作本身,这个与字符串是否定长无关,在串口接收中断服务程序中做个数据转存就好。至于不定长通迅判断结束的方法有两种,一是采用协议,协议内容可以包含帧长度信息,也可以用约定的结束符来表达。二是采用时间判定,如2楼所言。接收到第一个字节后,启动一个定时器,每接收到一个字节清零一次定时器,当定时器溢出时,可以认为通迅已经结束。对于连续通迅,定时时长可以根据波特率选择1.5-2.5个字节时长。对于非连续通迅,需要考虑发送方最大字节间隔并在此基础上增加1.5-2.5个字节时长。如果是频繁的大数据量不定长通迅,尤其是无线通迅和在强干扰下的通迅,最好采用通迅协议来解决而非延时法。
此帖出自NXP MCU论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

4
 
设置成接收到一个字节就触发中断的状态。自己定义数据, 保存一定长度的数据。中断里,进行最简单的处理。字节存入你的数组。计数变量加一。消耗时间非常短。默认一帧数据中,相邻字节间隔远小于相邻帧的间隔。以此,进行时间判断。一定时间没有触发中断,认为一帧结束。设置对应标志。保存为一帧数据。
此帖出自NXP MCU论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

5
 
目前问题已经解决,问题处在PE生成的程序中,解决方法是禁用芯片UART口的FIFO,然后修改生成的RX中断函数,跟IDLE空闲中断函数进行配合,使接收中断函数不再对FIFO溢出进行响应然后接收缓存的BUFFER指针清零,这样存入自定义BUFFER的数据顺序就不会乱,而是在总线空闲中断中进行操作,保证收到一帧完整数据后,对内容进行协议或校验判断。
这几天有事忙,没有来看帖,感谢大佬们提出的建议和方向,依靠定时器溢出来进行判断的话,在我这个应用场合不是很合用,不知道怎么结贴,请版主看到后,指点一下哈
此帖出自NXP MCU论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

6
 
chunyang 发表于 2019-1-18 17:16
从楼主的题目看,不定长字符的串口通迅是基于字节的,但看楼主帖内容,却提及到FIFO和接收中断,显然串口通 ...

目前问题已经解决,问题处在PE生成的程序中,解决方法是禁用芯片UART口的FIFO,然后修改生成的RX中断函数,跟IDLE空闲中断函数进行配合,使接收中断函数不再对FIFO溢出进行响应然后接收缓存的BUFFER指针清零,这样存入自定义BUFFER的数据顺序就不会乱,而是在总线空闲中断中进行操作,保证收到一帧完整数据后,对内容进行协议或校验判断。
这几天有事忙,没有来看帖,感谢大佬们提出的建议和方向,依靠定时器溢出来进行判断的话,在我这个应用场合不是很合用,不知道怎么结贴,请版主看到后,指点一下哈
此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表