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);
//}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值