|
@@ -343,7 +343,6 @@ uint8_t* Uart_Receive_func(Uart_Receive_Type Uart_Receive_Msg,uint8_t* Uart_Rece
|
|
|
if (isRecvComplete == true)
|
|
|
{
|
|
|
#ifdef USING_PRINTF
|
|
|
- printf("isRecvComplete true\n");
|
|
|
#endif
|
|
|
isRecvComplete = false;
|
|
|
CRC_Rece_buffer =*(Uart_Rece_buffer+Data_Len-1)<<8|*(Uart_Rece_buffer+Data_Len-2);
|
|
@@ -354,7 +353,7 @@ uint8_t* Uart_Receive_func(Uart_Receive_Type Uart_Receive_Msg,uint8_t* Uart_Rece
|
|
|
{
|
|
|
printf("%x ",*(Uart_Rece_buffer+i));
|
|
|
}
|
|
|
- printf("crcchk:%x,%x ",CRC_chk_buffer,CRC_Rece_buffer);
|
|
|
+ printf("crcchk:%x,%x\n ",CRC_chk_buffer,CRC_Rece_buffer);
|
|
|
#endif
|
|
|
if (CRC_Rece_buffer == CRC_chk_buffer)//满足校验
|
|
|
{
|
|
@@ -387,8 +386,7 @@ static void Uart_Task(void* arg)
|
|
|
ARM_USART_STOP_BITS_1 |
|
|
|
ARM_USART_FLOW_CONTROL_NONE, 9600);
|
|
|
int Rece_index = 0;
|
|
|
- uint8_t Data_Len;
|
|
|
- uint8_t *Uart_Reve_Point = NULL;
|
|
|
+ volatile uint8_t Data_Len;
|
|
|
Uart_Receive_Type Uart_Receive_Msg;
|
|
|
memset(&battbuffer[0],0x00,100);
|
|
|
PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
|
|
@@ -410,6 +408,7 @@ static void Uart_Task(void* arg)
|
|
|
}
|
|
|
case PROCESS_UART_STATE_CHECK:
|
|
|
{
|
|
|
+ Uart_Rece_buffer = (uint8_t *)malloc(Uart_Rece_LEN);
|
|
|
Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
Uart_Receive_Msg.Reg_Begin_L= 0x02+Batt_Cell_Num;
|
|
|
Uart_Receive_Msg.Reg_Num_H = 0x00;
|
|
@@ -417,11 +416,12 @@ static void Uart_Task(void* arg)
|
|
|
Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
memset(Uart_Rece_buffer,0x00,Data_Len);
|
|
|
Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
- Uart_Rece_BattI = *(Uart_Reve_Point+0)<<8 |*(Uart_Reve_Point+1);
|
|
|
+ Uart_Rece_BattI = *(Uart_Rece_buffer+3+0)<<8 |*(Uart_Rece_buffer+3+1);
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("Check_Current!\n");
|
|
|
#endif
|
|
|
PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
|
|
|
+ free(Uart_Rece_buffer);
|
|
|
break;
|
|
|
}
|
|
|
case PROCESS_UART_STATE_WORK:
|
|
@@ -433,32 +433,100 @@ static void Uart_Task(void* arg)
|
|
|
{
|
|
|
switch (Rece_index)
|
|
|
{
|
|
|
- case 0:
|
|
|
+ case 0://current
|
|
|
{
|
|
|
Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
Uart_Receive_Msg.Reg_Begin_L= 0x02+Batt_Cell_Num;
|
|
|
Uart_Receive_Msg.Reg_Num_H = 0x00;
|
|
|
Uart_Receive_Msg.Reg_Num_L = 0x01;
|
|
|
Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
- memset(Uart_Rece_buffer,0xff,Data_Len);
|
|
|
+ memset(Uart_Rece_buffer,0x00,Data_Len);
|
|
|
Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
Uart_Rece_BattI = *(Uart_Rece_buffer+3+0)<<8 |*(Uart_Rece_buffer+3+1);
|
|
|
break;
|
|
|
}
|
|
|
- case 1:
|
|
|
+ case 1://cell votage
|
|
|
{
|
|
|
Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
Uart_Receive_Msg.Reg_Begin_L = 0x02;
|
|
|
Uart_Receive_Msg.Reg_Num_H = Batt_Cell_Num>>8;
|
|
|
Uart_Receive_Msg.Reg_Num_L = Batt_Cell_Num;
|
|
|
Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
- Uart_Rece_buffer = (uint8_t *)malloc(Data_Len);
|
|
|
- memset(Uart_Rece_buffer,0xff,Data_Len);
|
|
|
+ memset(Uart_Rece_buffer,0x00,Data_Len);
|
|
|
Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
battbuffer[30] = Batt_Cell_Num;
|
|
|
memcpy(&battbuffer[31],Uart_Rece_buffer+3,Batt_Cell_Num_2);
|
|
|
break;
|
|
|
}
|
|
|
+ case 2://temprature
|
|
|
+ {
|
|
|
+ Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Begin_L = 0x06+Batt_Cell_Num;
|
|
|
+ Uart_Receive_Msg.Reg_Num_H = Batt_Temp_Num>>8;
|
|
|
+ Uart_Receive_Msg.Reg_Num_L = Batt_Temp_Num;
|
|
|
+ Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
+ memset(Uart_Rece_buffer,0x00,Data_Len);
|
|
|
+ Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
+ battbuffer[31+Batt_Cell_Num_2] = Batt_Temp_Num;
|
|
|
+ for (int i = 0; i < Batt_Temp_Num; i++)
|
|
|
+ {
|
|
|
+ battbuffer[32+Batt_Cell_Num_2+i] = *(Uart_Rece_buffer+3+2*i+1);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case 3://batt votage
|
|
|
+ {
|
|
|
+ Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Begin_L = 0x18+Batt_Cell_Num+Batt_Temp_Num;
|
|
|
+ Uart_Receive_Msg.Reg_Num_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Num_L = 0x01;
|
|
|
+ Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
+ memset(Uart_Rece_buffer,0x00,Data_Len);
|
|
|
+ Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
+ battbuffer[19] = *(Uart_Rece_buffer+3+0);//Link U
|
|
|
+ battbuffer[20] = *(Uart_Rece_buffer+3+1);
|
|
|
+ battbuffer[21] = *(Uart_Rece_buffer+3+0);//Pack U
|
|
|
+ battbuffer[22] = *(Uart_Rece_buffer+3+1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case 4://soc,soh
|
|
|
+ {
|
|
|
+ Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Begin_L = 0x09+Batt_Cell_Num+Batt_Temp_Num;
|
|
|
+ Uart_Receive_Msg.Reg_Num_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Num_L = 0x04;
|
|
|
+ Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
+ memset(Uart_Rece_buffer,0x00,Data_Len);
|
|
|
+ Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
+ battbuffer[23] = *(Uart_Rece_buffer+3+0)>>1;//mos状态
|
|
|
+ battbuffer[24] = *(Uart_Rece_buffer+3+5);//SOC
|
|
|
+ battbuffer[25] = *(Uart_Rece_buffer+3+7);//SOH
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case 5://均衡
|
|
|
+ {
|
|
|
+ Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Begin_L = 0x06+Batt_Cell_Num+Batt_Temp_Num;
|
|
|
+ Uart_Receive_Msg.Reg_Num_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Num_L = 0x02;
|
|
|
+ Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
+ memset(Uart_Rece_buffer,0x00,Data_Len);
|
|
|
+ Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
+ memcpy(&battbuffer[26],Uart_Rece_buffer+3,4);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case 6:
|
|
|
+ {
|
|
|
+ Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Begin_L = 0x19+Batt_Cell_Num+Batt_Temp_Num;
|
|
|
+ Uart_Receive_Msg.Reg_Num_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Num_L = 0x02;
|
|
|
+ Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
+ memset(Uart_Rece_buffer,0x00,Data_Len);
|
|
|
+ Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
+ memcpy(&battbuffer[34+Batt_Cell_Num_2+Batt_Temp_Num],Uart_Rece_buffer+3,4);
|
|
|
+ break;
|
|
|
+ }
|
|
|
default:
|
|
|
{
|
|
|
PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
|