求
```c
extern float ph,k_ll;
u8 lora_buf_tx[20]; //lora_tx buff
#include "bsp_ds18b20.h"
#include <string.h>
static u8 jy_xor;
void vlora_tx(void)//
{
u8 i=0,j=0;
float ph_10,t_10;
lora_buf_tx[i++]=0x5a;
lora_buf_tx[i++]=0xa5;
lora_buf_tx[i++]=(u8)DEV;//设备号
lora_buf_tx[i++]=(u8)NODE;//节点号
lora_buf_tx[i++]=0;//data len
/data start/
ph_10=ph10;
lora_buf_tx[i++]=(u16)ph_10>>8;
lora_buf_tx[i++]=(u16)ph_10;
t_10=2510;
//t_10=DS18B20_DATA.T.Temperature*10;
lora_buf_tx[i++]=(u16)t_10>>8;
lora_buf_tx[i++]=(u16)t_10;
/data end/
/xor start/
jy_xor=lora_buf_tx[0];
for(j=1;j<i;j++)
{
jy_xor^=lora_buf_tx[j];
}
lora_buf_tx[i++]=jy_xor;
/xor end/
lora_buf_tx[4]=i-5;//len 重写
if(strstr((const char*)lora_buf_tx,"+++")==NULL)
{
uart_tx(USART2,lora_buf_tx,i);//to gateway
}
}
```解释一下这段代码
根据数据协议,生成串口数据帧,然后通过串口发送出去,应该是发给lora模块。。。
0x5a,0xa5,dev,node,发送数据长度,ph10,2510,校验码
建议定义一个结构体,对结构体成员分别赋值,这样结构更清晰,而且通讯协议调整后,代码不需要做太多调整。
像你这样把通讯数据当数组处理,一是容易写错,二是协议调整一下(比如插入一个字段),全部都得重写。
上面这个结构,参考那个写lora_buf_tx的顺序,很容易推算出来
struct lora_data
{
uchar flag[2];
uchar dev_number;
uchar data_len;
uint16_t ph_10;
uint16_t t_10;
uchar checksum;
}
关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:STM32常用C语言基础