最近写的一个比较简单的modbus rtu处理函数,根据lora的定点通信,只需在发送数据前加上对应的信道和地址,就可以让目标lora接收到查询报文,在程序中我使用了串口4与lora相连,对串口4的数据做出相应处理即可。
首先是定义一个结构体,做个全局声明:
typedef struct{
u8 addr; //设备地址
u8 rxcount; //接收数据长度
u8 rxover; //接收完成标志位
u8 txbuf[LORA_TXMAXSIZE]; //发送缓存区
u8 txcount; //发送数据长度
}LORA_TYPEDEF;
extern LORA_TYPEDEF lora_slave;
然后是处理函数:
void LORA_Deal(void)
{
if(lora_slave.rxover)
{
lora_slave.rxover=0;
u32 i = 0;
u16 crc_check = 0, rx_crc = 0;
if(UART4_RX_STA<8) //数据长度小于规定长度
{
printf("数据长度不对\r\n");
lora_slave.txbuf[0]=UART4_RX_BUF[0];
lora_slave.txbuf[1]=UART4_RX_BUF[1]|0x80; //发生错误返回对应的功能码+0x80
lora_slave.txbuf[2]=0x05; //异常码
printf("%c",UART4_RX_STA);
for(i=0;i<3;i++)
UART_Sendone(UART4,LORA_BUF[i]);
for(i=0;i<3;i++)
UART_Sendone(UART4,lora_slave.txbuf[i]);