初级会员
- 积分
- 162
- 金钱
- 162
- 注册时间
- 2020-3-13
- 在线时间
- 32 小时
|
发表于 2020-3-13 11:24:33
|
显示全部楼层
1.实物描述:我有两块mini板,板A,板B,分别接上ATK-LORA-01的无线串口模块(与串口2相连),板A的串口3上面连接 模块C,模块C发送过来的数据是0.1s一个包(10HZ) 2.实现过程: 板A通过串口3不停的接收 模块C 传过来的数据后解析,然后板A通过串口2上的无线模块将解析数据 不断发送给板B,板B进行数据接收; 3.所遇问题: 发送数据一定时间后会卡死(这个数据发送的函数是在while 1里面不停调用的) 4.自己的思路:(这个不重要,请教下大家有没有好的方法去处理) 4.1.使用透传将数据透传给板B,但是这样我就不知道怎么将 无线串口模块初始化命令 发送给 无线模块了; 4.2.弄用一个环形缓冲UART2_SEND_FIFO,去代替这个USART2_TX_BUF,但有些细节不知道怎么处理;比如: 4.2.1.我将模块C发送过来的数据解析后放到sendBuf里面,我该如何将sendBuf放到环形缓冲里面去;(我想这里肯定不是简单的拷贝) 4.2.2.怎么从环形缓冲取数据并发送出去; 部分代码如下: 串口2的发送处理代码: #define USART2_MAX_RECV_LEN 1024 //最大接收缓存字节数 #define USART2_MAX_SEND_LEN 400 //最大发送缓存字节数 #define USART2_RX_EN 1 //0,不接收;1,接收. extern u8 USART2_RX_BUF[USART2_MAX_RECV_LEN]; //接收缓冲,最大USART2_MAX_RECV_LEN字节 extern u8 USART2_TX_BUF[USART2_MAX_SEND_LEN]; //发送缓冲,最大USART2_MAX_SEND_LEN字节 extern u16 USART2_RX_STA; //接收数据状态 void u2_printf(char* fmt,...) { u16 i,j; u16 ret; va_list ap; va_start(ap,fmt); ret = vsprintf((char*)USART2_TX_BUF,fmt,ap); va_end(ap); //i=strlen((const char*)USART2_TX_BUF);//此次发送数据的长度 for(j=0;j<ret;j++) //循环发送数据 { while((USART2->SR&0X40)==0); //循环发送,直到发送完毕 USART2->DR=USART2_TX_BUF[j]; } } |
|