TI MSPM0蓝牙串口通信数据包制作
int ret = snprintf(buffer, sizeof(buffer), "%.2f\r", yaw);// 检查格式化结果if(ret > 0 && ret < sizeof(buffer)){uart0_send_string(buffer);} else {// 发送错误标记,方便调试uart0_send_string("Err\r");}
格式化问题可以参考上期
发送格式化数据:
// 存储格式化后的yaw字符串char yaw_str[20];int str_len = snprintf(yaw_str, sizeof(yaw_str), "%f", yaw);// 检查字符串格式化是否成功if(str_len > 0 && str_len < sizeof(yaw_str)){// 计算数据包总长度:帧头(1) + 数据长度 + 校验位(1) + 帧尾(1)int packet_len = 1 + str_len + 2;char packet[packet_len];uint8_t checksum = 0;int i = 0;// 1. 添加帧头packet[i++] = 0xA5;// 2. 添加数据并计算校验和for(int j = 0; j < str_len; j++){packet[i++] = yaw_str[j];checksum += yaw_str[j]; // 累加所有数据字节}// 3. 添加校验位(只取低8位)packet[i++] = checksum & 0xFF;// 4. 添加帧尾packet[i++] = 0x5A;// 发送完整数据包for(int j = 0; j < packet_len; j++){uart0_send_char(packet[j]);}} else {// 发送错误标记数据包const char err_packet[] = {0xA5, 'E', 'r', 'r', 0x03, 0x5A}; // 0x03是"Err"的校验和for(int j = 0; j < sizeof(err_packet); j++){uart0_send_char(err_packet[j]);}}
发送字节数据
// 定义数据包:帧头(1) + float数据(4) + 校验位(1) + 帧尾(1),共7字节uint8_t packet[7];uint8_t checksum = 0;int i = 0;// 1. 添加帧头packet[i++] = 0xA5;// 2. 将float拆分为4个字节并添加到数据包// 使用指针将float转换为字节数组(注意大小端问题)uint8_t* yaw_bytes = (uint8_t*)&yaw;for(int j = 0; j < 4; j++){packet[i++] = yaw_bytes[j];checksum += yaw_bytes[j]; // 累加数据字节计算校验和}// 3. 添加校验位(只取低8位)packet[i++] = checksum & 0xFF;// 4. 添加帧尾packet[i++] = 0x5A;// 发送完整数据包(共7字节)for(int j = 0; j < 7; j++){uart0_send_char(packet[j]);}
蓝牙单字节遥控
// //将保存的数据再发送出去
// uart0_send_char(uart_data);//static int speed = 600;
// if(uart_data == 'A'){
//motor(speed,speed);
//}else if(uart_data == 'Z'){
//motor(0,0);
//}else if(uart_data == 'C'){
//motor(speed,-speed);
//}else if(uart_data == 'G'){
//motor(-speed,speed);
//}else if(uart_data == 'E'){
//motor(-speed,-speed);
//}else if(uart_data == 'B'){
//motor(speed,speed - 200);
//}else if(uart_data == 'H'){
//motor(speed - 200,speed);
//}else if(uart_data == 'F'){
//motor(-speed + 200,-speed);
//}else if(uart_data == 'D'){
//motor(-speed,-speed + 200);
//}else if(uart_data == 'X'){
//speed += 100;
//}else if(uart_data == 'Y'){
//speed -= 100;
//}else if(uart_data == 'a'){
//DL_GPIO_setPins(GPIOB, TRACE_PIN_BEEP_PIN);
//delay_ms(200);
//DL_GPIO_clearPins(GPIOB, TRACE_PIN_BEEP_PIN);
//}