-
这位兄弟分析得很透彻。我的程序由串口1接收的数据经过打包发送至应用层任务,然后通过串口0发送出去。出现在两个问题:1)由串口0出来的数据不超过4个字节。 2)所有由串口1接收的数据都已经过回调函数MT_UartProcessZAppData处理,而且是每次处理一个字节,但四个字节以后的数据却没有到达应用层任务。3)用串口调试助手向串口1发送数据,当进行一段时间后,所有的数据都收不到,原以为是串口1接收缓冲区溢出,但后来粗略计算一下,不是这个原因。至于事件丢失问题,这次受教了,应该是有可能的。问题还未解决,期待进一步讨论!:)
-
但确实是发送了,如何实现的呢?
-
DMA方式肯定也是可以用的,但要改动的地方比较多。因为协议栈中默认只用了DMA3和4两个通道。还有三个通道可用。但是需要改动预编译和增加DMA通道的初始化。而且最后也只能采用第二个回调函数。DMA所做的事情与中断是一样的,也是完成缓冲区与串口寄存器间的数据搬移。感觉没有多大区别,关键应该在回调函数MT_UartProcessZAppData,如果它也能像MT_UartProcessZToolData一样在接收指定字节长度后才发送消息应该就没有问题了。目前我正在尝试修改回调函数,如果接收的每条消息第一个字节为消息长度也许就很好办了。希望有过经历的兄弟也出点建议!
-
中断服务程序根本就非常简单,每次仅仅是将UXDBUF中的一个字节的数据,写入接收缓冲区中。同时维护缓冲区的完整性。问题应该不在中断函数,而是在回调函数中,因为用户只会跟缓冲区打交道。仔细分析一下MT_UartProcessZAppData中的uint16 rxBufLen = Hal_UART_RxBufLen(0x01),由现象可知道,每次调用回调函数时缓冲区中都只有一个字节存在,而回调函数是由系统轮循来调用的。由此可以说明每次中断后系统就刚好开始调用回调函数。至于永远只有4个字节的问题,我试过了,其它的字节已经被回调函数处理了,只是没有发送到应用层相关的任务中。不知道是不是在调用4次回调函数后,系统就做别的事情去了。即使是这样,字节也应该还在,跑哪去了呢:funk:
-
这是使用中断方式需要修改的吗?如果两个串口一起用应该怎么改?
-
当然可以了,那只是一种参考设计。把处理器部分做好了,自己完全可以重做到一块板子上。这些插针就可以去掉了,不过高频电路设计要注意很多问题。至于那几个大的过孔我也不知道作什么用。估计去掉后也没什么影响。
-
那缓冲区是不是也得再另分配一对呢?
-
licence好像已经过期了,不知道怎么生成新的。:funk:
-
找到了,谢谢!
-
我认为只要编译相关模块,这些引脚只要自己不去另外设置,而且不接别的东西。协议栈中应该已经设置好了。不过好像用了CC2591后,串口出现了问题(用的ZTOOL)。
-
自己圆满解决!
-
正如7楼说的,CC253X就是我们想要的:lol
-
解决了,不过天线丢包太严重,设计不合格!:Sweat:
-
很尖的电烙铁就很好,先加点助焊剂,然后焊头沾点锡后,轻轻一划,一排引脚就全好了。非常漂亮:Laugh:
-
这个图看上去怎么这么乱呢,焊工技术太差了吧!:)
-
果然是好东西,尤其是介绍操作系统那篇,好东西
-
举双手赞成,以前就知道自己犯过这样的错误。顶一个
-
我也是依照这个资料来写的,要注意时钟的四种方式。
-
学习了
-
虽然我要的是2530,还是顶无私的楼主,好人啊!