使用K60串口接收字符串问题

2020-02-11 10:00发布

用单片机K60的串口和上位机完成通信,需要接收上位机的数据,是字符串,长度未知,数据开始为0xaa,结尾是中间数据的和,作为校验值,查了一些文档,串口接收数据的中断只能一个字节一个字节接收,有没办法一次串口中断吧数据都接收进来,这样就可以避免频繁的进入串口接收中断,初学K60,请各位赐教一下!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
1328616904
1楼-- · 2020-02-12 11:10
FIFO或DMA
zjipc
2楼-- · 2020-02-12 13:25
snail_dongbin 发表于 2016-3-16 19:06
发送放中断里还9600 ,不等才怪

串口发送一般可以用发送中断,高级点的可以用dma

这几天一直在研究这个问题,用DMA接收数据,由于数据长度是变化的,不知道怎么解决,如果用用UART中断接收数据,又出来问题是数据每次接收不完全,因为中断不能嵌套,1、如果中断设置嵌套该怎么设置,数据手册里面没有讲到;2、如果用DMA数据不定长怎么办,因为是K60的芯片,网上都找不到例子
落叶知秋
3楼-- · 2020-02-12 14:43
 精彩回答 2  元偷偷看……
zjipc
4楼-- · 2020-02-12 20:34
落叶知秋 发表于 2016-4-8 15:23
最近工作在用K6X系列的芯片,也用到了UART和DMA,看到楼主的目的有点描述不清楚,
所以进行以下猜测:
1. ...

非常感谢您,这么认真的分析以及给与合理的建议,上位机我用的是网上的,上位机发送的数据包长度我不能修改,比如数据包发送来AAAF02(n字节),我可以通过AAAF02这6个字节指令语句来判断这个数据包的长度,我如果用DMA先接收6个字节,然后根据这6个字节判断后面n是多大,然后从新初始化DMA接收N字节,不知道会不会导致串口数据丢失的。
落叶知秋
5楼-- · 2020-02-13 02:22
zjipc 发表于 2016-4-12 15:35
非常感谢您,这么认真的分析以及给与合理的建议,上位机我用的是网上的,上位机发送的数据包长度我不能修 ...

楼主考虑的这种做法也不是不可以,只要你查询和处理DMA状态的速度比UART的发送速率块,不导致数据到了没人管就行了。
另外,也可以考虑我上面提及的【乒乓缓冲】的方法。即:
1. 开辟2块内存缓冲区A和B;
2. 让DMA将收到的UART数据先存到A;
3. 主程序可以查询DMA已经搬运了多少,如果够6个字节,就开始解析;
4. 等到DMA收完解析出来的长度后,就进行n个字节的读取解析;
5. DMA把A区填满了,就指定DMA开始把B区开始“填埋”;
6. 主程序处理完A区,跟着处理B区;
7. 然后就是A->B->A->B……这样了。
落叶知秋
6楼-- · 2020-02-13 08:01
zjipc 发表于 2016-4-12 15:35
非常感谢您,这么认真的分析以及给与合理的建议,上位机我用的是网上的,上位机发送的数据包长度我不能修 ...

其实只要遵循一个原则就行了:数据到了就尽快取走存起来,免得丢了,然后再根据协议做出处理,处理完的数据就丢掉。

一周热门 更多>