Skip to content

Latest commit

 

History

History
77 lines (53 loc) · 1.79 KB

遥控器-温控装置信号传输协议v3.0.md

File metadata and controls

77 lines (53 loc) · 1.79 KB

遥控器-温控装置信号传输协议v3.0

一、下位机与上位机串口通信协议:

上位机遥控器端蓝牙串口做为master,下位机蓝牙串口做slave。串口参数:

  • 波特率:9600
  • 停止位:1
  • 校验方式:偶校验
  • 帧长度:2 byte

每一帧数据有3 byte,分为 起始帧指令帧数据帧,如图:

image-20201213125623302

其中一帧数据分为控制位和数据位,控制位占一帧数据的前4bit,数据位占一帧数据的后12bit。

数据位:

数据位为%3.1f类型的浮点数乘以10之后强制转换成uint16_t的数据,大小为0~999

控制位:

控制位指示数据位的类型,占4bit

Value Note
0x01 数据位为温度设定值
0x02 数据位为温度当前值
0x04 重置温度最低值

二、程序实现示例:

typedef struct
{
    /* 帧头 */
    uint8_t frameheader;
    /* 高位和低位 */
    uint8_t hbit;
    uint8_t lbit;
}UartDataFrame_t;

UartDataFrame_t UartDataFrame = {0xa5, 0x00, 0x00};

合成发送数据帧:

float tempf;
uint8_t tempi= (int16_t)(tempf * 10);
uint8_t construction;

// 合成两个uint8_t数据
UartDataFrame.hbit = (uint8_t)(construction << 4 | tempi >> 8);
UartDataFrame.lbit = (uint8_t)(tempi & 0x00ff);

void BT_Uart_Send(UartDataFrame_t udf)
{
    ES = 0;
    uart_send(udf.frameheader);
    uart_send(udf.hbit);
    uart_send(udf.lbit);
    ES = 1;
}

还原接收数据帧:

uint16_t tempi = ((uint16_t)Hbit << 8 | (uint16_t)Lbit);
uint8_t construction = Hbit >> 4;