27,372
社区成员
发帖
与我相关
我的任务
分享
#define buff_size 7
uint8_t data_dec[buff_size];
uint8_t datax[3],datay[3],dataz[2];
void U1_SendH(uint8_t data)
{
uint8_t OutData;
OutData = data&0xff;
HAL_UART_Transmit(&huart1,&OutData,1,0xff);
}
uint8_t U1_ReceiveH(void)
{
uint8_t OutData;
HAL_UART_Receive(&huart1,&OutData,1,0xff);
OutData = OutData&0xff;
return OutData;
}
void U1_ReceiveData(uint16_t *x,uint8_t *z)
{
uint8_t data[buff_size] = {0,0,0,0,0,0};
uint8_t start,end;
// HAL_UART_Receive(&huart1,data,buff_size,0xffff);
for(uint16_t i=0;i<buff_size;i++){
data[i] = getchar();
// for(uint8_t j = 100;j>0;j--);
data_dec[i] = data[i];
if((data[i]&0xff) == 0x78) start = i;
if((data[i]&0xff) == 0x79) end = i;
}
switch (start)
{
case 0:{
if(end == 6){
datax[0] = data[1]&0xff - 0x30;
datax[1] = data[2]&0xff - 0x30;
datax[2] = data[3]&0xff - 0x30;
dataz[0] = data[4]&0xff - 0x30;
dataz[1] = data[5]&0xff - 0x30;
}
} break;
case 1:{
if(end == 0){
datax[0] = data[2]&0xff - 0x30;
datax[1] = data[3]&0xff - 0x30;
datax[2] = data[4]&0xff - 0x30;
dataz[0] = data[5]&0xff - 0x30;
dataz[1] = data[6]&0xff - 0x30;
}
} break;
case 2:{
if(end == 1){
datax[0] = data[3]&0xff - 0x30;
datax[1] = data[4]&0xff - 0x30;
datax[2] = data[5]&0xff - 0x30;
dataz[0] = data[6]&0xff - 0x30;
dataz[1] = data[0]&0xff - 0x30;
}
} break;
case 3:{
if(end == 2){
datax[0] = data[4]&0xff - 0x30;
datax[1] = data[5]&0xff - 0x30;
datax[2] = data[6]&0xff - 0x30;
dataz[0] = data[0]&0xff - 0x30;
dataz[1] = data[1]&0xff - 0x30;
}
} break;
case 4:{
if(end == 3){
datax[0] = data[5]&0xff - 0x30;
datax[1] = data[6]&0xff - 0x30;
datax[2] = data[0]&0xff - 0x30;
dataz[0] = data[1]&0xff - 0x30;
dataz[1] = data[2]&0xff - 0x30;
}
} break;
case 5:{
if(end == 4)
{
datax[0] = data[6]&0xff - 0x30;
datax[1] = data[0]&0xff - 0x30;
datax[2] = data[1]&0xff - 0x30;
dataz[0] = data[2]&0xff - 0x30;
dataz[1] = data[3]&0xff - 0x30;
}
} break;
case 6:{
if(end == 5)
{
datax[0] = data[0]&0xff - 0x30;
datax[1] = data[1]&0xff - 0x30;
datax[2] = data[2]&0xff - 0x30;
dataz[0] = data[3]&0xff - 0x30;
dataz[1] = data[4]&0xff - 0x30;
}
} break;
}
*x = datax[0]*100 + datax[1]*10 +datax[2];
*z = dataz[0]*10 + dataz[1];
USART1->DR = 1<<5; //clear
start = 0; end = 0;
}