我使用LORA模块通过串口给测试模块发送JSON数据,将LORA模块接上串口助手,发送数据为{"frame":"LunxunData","code":2005,"SN":"2405NT00100"},测试模块就会给我的LORA模块返回数据,证明它已经收到数据。但是将LORA模块接到开发板上,自己在lvgl上写的程序进行发送测试数据,数据应该有发送出去,但是不知道是不是发送正确的,没有收到测试模块返回的数据,请问这是什么原因,我猜想有可能数据是被拆成几个小包发送出去的
以下是我的串口代码:
#define PORT "/dev/ttyS2" // 假定串口设备路径
#define BAUDRATE B115200
int serial_port;
//初始化串口函数
void init_serial(void)
{
serial_port = open(PORT, O_RDWR | O_NOCTTY | O_NDELAY);
if (serial_port == -1)
{
perror("Error opening serial port");
return;
}
struct termios options;
tcgetattr(serial_port, &options);
cfsetispeed(&options, BAUDRATE);
cfsetospeed(&options, BAUDRATE);
options.c_cflag &= ~PARENB; // 无奇偶校验
options.c_cflag &= ~CSTOPB; // 1停止位
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8; // 8位数据
options.c_cflag &= ~CRTSCTS; // 无硬件流控
options.c_iflag &= ~(IXON | IXOFF | IXANY); // 禁用软件流控
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // 非规范模式
options.c_oflag &= ~OPOST;
tcflush(serial_port, TCIFLUSH);
tcsetattr(serial_port, TCSANOW, &options);
}
//读串口函数
void read_from_serial(void)
{
char buffer[256] = {0};
ssize_t bytes_read = read(serial_port, buffer, sizeof(buffer) - 1);
if (bytes_read > 0)
{
buffer[bytes_read] = '\0';
printf("%s",buffer);
}
}
//写串口函数void send_data_to_ubuntu(const char *data)
{
write(serial_port, data, strlen(data));
}
//打包测试数据函数
void write_data_w(void)
{
char start_json_buffer[1024];
snprintf(start_json_buffer, sizeof(start_json_buffer),
"{\"frame\":\"LunxunData\",\"code\":2005,\"SN\":\"2405NT00100\"}\n");
send_data_to_ubuntu(start_json_buffer);
lv_obj_set_style_bg_color(windows[0][0],lv_color_hex(0xff0000),LV_PART_MAIN);
}
//主函数
int main(void)
{
init_serial();
write_data_w();
/*Handle LitlevGL tasks (tickless mode)*/
while(1) {
lv_timer_handler();
read_from_serial();
usleep(5000);
}