1.切换串口基本知识
关于切换串口的问题,首先由于项目需求,需要3个串口进行通信,但是nordic(52832)这款芯片只有一个串口,所以需要进行串口的切换。
不过唯一感到欣慰的是,只有一个串口需要保持长久的通讯,另外两个串口通讯是短时间的,这样在短时间内使用完串口,再切回主串口,理论上是可行的。
在调试之前,我们需要了解我们的串口的使用基本功能,主串口,目前定义为和模块的通讯串口,这个串口数据的特点是随机吐数据和请求再吐数据,如果其随机吐数据时,我们正在切换串口时,可能会将数据丢失,因此,我们在模块获取数据时,设置一个中断,有数据到来,触发中断,再取数据,将数据放入一个队列中。
理论上是,将发送的数据都加入到一个队列里面,防止多方抢占串口,造成串口数据乱码的现象,因此,我们将另外两个串口的发送和接收都封装到队列里面,这样做的后果是,如果队列里面的指令较多,那么等到自己需要的指令会产生延时,所以在要求实时性比较高的任务时,建议使用io口模拟串口。
好了,废话不多说,下面直接贴代码和思路。
2.切换串口的代码
/*创建队列,将需要发送的数据放入队列之中,以及入队列和出队列的方法*/
CREAT_FIFO uart_cmd;
set_data2fifo(uchar *p); //将数据塞入队列
get_data2fifo(uchar *p