This commit is contained in:
2026-04-23 10:50:18 +08:00
commit a436fda935
844 changed files with 272643 additions and 0 deletions

View File

@ -0,0 +1,310 @@
#include "sdi12.h"
#include "bsp.h"
Sdi_Fram_Record_Struct Sdi_Fram_Record_Structs;
/***********************/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD> Diable_Usart3_TX(void)
//<2F><><EFBFBD>ܸ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ڣ<EFBFBD>PB10<31><30>Ϊ<EFBFBD><CEAA>ͨIO<49><4F>ʹ<EFBFBD><CAB9>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
void Diable_Usart1_SDI(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_DeInit(USART1); //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>1
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //GPIOBʱ<42><CAB1>
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
//GPIO_SetBits(GPIOB,GPIO_Pin_7);
}
/***********************/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD> Enable_Usart3_TX(void)
//<2F><><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> baund,<2C><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
void Enable_Usart1_SDI(void)
{
USART1_SDI_Configuration(1200);
}
/***********************/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD> Break_Sdi_Sensor(void)
//<2F><><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>break<61><6B><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
void Break_Sdi_Sensor(void)
{
Enable_SdiTX;
GPIO_ResetBits(GPIOB,GPIO_Pin_6);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
delay_ms(20);
GPIO_SetBits(GPIOB,GPIO_Pin_6);
}
void Sdi_StartMeasure(void)
{
u8 i=0;
char temp_sdi[5]={'\0'};
for(i=0;i<9;i++)
{
memset(temp_sdi,0,5);
sprintf(temp_sdi,"%d%s",i,"M!");
Diable_Usart1_SDI();
Break_Sdi_Sensor();// <20><><EFBFBD>Ϳպźʹ<C5BA><CDB4><EFBFBD>
Enable_Usart1_SDI();
u1_printf("%s",temp_sdi);
delay_ms(8);
Enable_SdiRX;
delay_ms(500);
}
/*
Diable_Usart1_SDI();
Break_Sdi_Sensor();// <20><><EFBFBD>Ϳպźʹ<C5BA><CDB4><EFBFBD>
Enable_Usart1_SDI();
u1_printf("0M!");
delay_ms(8);
Enable_SdiRX;
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
}
char Sdi_readaddress(void)
{
char *str;
osMutexAcquire(SDI_MutexID,osWaitForever);
USART_RS232_DEinit();
Enable_SDI_RS232=0;
Diable_Usart1_SDI();
USART1_SDI_CLR_RXBuf();
Break_Sdi_Sensor();// <20><><EFBFBD>Ϳպźʹ<C5BA><CDB4><EFBFBD>
Enable_Usart1_SDI();
u1_printf("%s","?!");
delay_ms(8);
Enable_SdiRX;
delay_ms(500);
osMutexRelease(SDI_MutexID);
if((str=strstr(USART1_SDI_RX_BUF,"\r\n")) !=NULL)
{
str--;
return str[0];
}
return 0x7f;
}
void Sdi_chanegadd(char a,char b)
{
char tempadd_sdi[10]={'\0'};
osMutexAcquire(SDI_MutexID,osWaitForever);
sprintf(tempadd_sdi,"%c%c%c%c",a,'A',b,'!');
USART_RS232_DEinit();
Enable_SDI_RS232=0;
Diable_Usart1_SDI();
USART1_SDI_CLR_RXBuf();
Break_Sdi_Sensor();// <20><><EFBFBD>Ϳպźʹ<C5BA><CDB4><EFBFBD>
Enable_Usart1_SDI();
u1_printf("%s",tempadd_sdi);
delay_ms(8);
Enable_SdiRX;
delay_ms(500);
osMutexRelease(SDI_MutexID);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
u8 Sdi_Readone(char add)
{
char temp_sdi[5]={'\0'};
char *subStringP;
char *subStringN;
USART1_SDI_CLR_RXBuf();
memset(temp_sdi,0,5);
sprintf(temp_sdi,"%c%s",add,"D0!");
USART1_SDI_CLR_RXBuf();
Diable_Usart1_SDI();
Break_Sdi_Sensor();// <20><><EFBFBD>Ϳպźʹ<C5BA><CDB4><EFBFBD>
Enable_Usart1_SDI();
u1_printf("%s",temp_sdi);
delay_ms(8);
Enable_SdiRX;
delay_ms(500);
subStringP=strstr(USART1_SDI_RX_BUF,"+");
subStringN=strstr(USART1_SDI_RX_BUF,"-");
if((subStringP!=NULL)|(subStringN!=NULL))
return 0;
else return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Sdi_Read(void)
{
u8 i=0;
char temp_sdi[5]={'\0'};
for(i=0;i<9;i++)
{
USART1_SDI_CLR_RXBuf();
memset(temp_sdi,0,5);
sprintf(temp_sdi,"%d%s",i,"D0!");
USART1_SDI_CLR_RXBuf();
Diable_Usart1_SDI();
Break_Sdi_Sensor();// <20><><EFBFBD>Ϳպźʹ<C5BA><CDB4><EFBFBD>
Enable_Usart1_SDI();
u1_printf("%s",temp_sdi);
delay_ms(8);
Enable_SdiRX;
delay_ms(500);
Sdi_Par(i);
}
}
//<2F><><EFBFBD><EFBFBD>SDI<44><49><EFBFBD><EFBFBD>
void Sdi_Par(u8 add)
{
char *subStringP;
char *subStringN;
char *subString;
char *subStringNext;
char pos1_data[10],pos2_data[10],pos3_data[10];
Sdi_Fram_Record_Structs.Flag_finish_DATA=0;
if(strstr(USART1_SDI_RX_BUF,"\r\n"))//<2F><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
memset(pos1_data,0,10);
memset(pos2_data,0,10);
memset(pos3_data,0,10);
/***********<2A>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>*************/
subStringP=strstr(USART1_SDI_RX_BUF,"+");
subStringN=strstr(USART1_SDI_RX_BUF,"-");
if(subStringP>subStringN)//POS1
{
subString=subStringP;
}else
{
//-<2D><>ǰ
subString=subStringN;
}
subStringP=strstr(subString+1,"+");
subStringN=strstr(subString+1,"-");
if(subStringP>subStringN)////POS2
{
subStringNext=subStringP;
}else
{
//-<2D><>ǰ
subStringNext=subStringN;
}
memcpy(pos1_data,subString,subStringNext-subString);//<2F><>ȡλ<C8A1><CEBB>1<EFBFBD><31><EFBFBD><EFBFBD>
subString=subStringNext;
subStringP=strstr(subString+1,"+");
subStringN=strstr(subString+1,"-");
if(subStringP>subStringN)////POS3
{
subStringNext=subStringP;
}else
{
//-<2D><>ǰ
subStringNext=subStringN;
}
memcpy(pos2_data,subString,subStringNext-subString);//<2F><>ȡλ<C8A1><CEBB>2<EFBFBD><32><EFBFBD><EFBFBD>
subString=subStringNext;
subStringNext=strstr(subString,"\r\n");
memcpy(pos3_data,subString,subStringNext-subString);//<2F><>ȡλ<C8A1><CEBB>3<EFBFBD><33><EFBFBD><EFBFBD>
/****************************/
// subStringP=strstr(USART1_SDI_RX_BUF,"+");
// subStringN=strstr(USART1_SDI_RX_BUF,"-");
// if(subStringP>subStringN)//+<2B><>ǰ
// {
// subString=subStringP;
// }else
// {
// //-<2D><>ǰ
// subString=subStringN;
// }
// subStringNext=strstr(subString,"\r\n");
switch (add)
{
// case 0: memcpy(Sdi_Fram_Record_Structs.Ch1_RX_BUF, subString, subStringNext - subString);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>
// case 1: memcpy(Sdi_Fram_Record_Structs.Ch2_RX_BUF, subString, subStringNext - subString); break;//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>
// case 2: memcpy(Sdi_Fram_Record_Structs.Ch3_RX_BUF, subString, subStringNext - subString);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>
// case 3: memcpy(Sdi_Fram_Record_Structs.Ch4_RX_BUF, subString, subStringNext - subString);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>
// case 4: memcpy(Sdi_Fram_Record_Structs.Ch5_RX_BUF, subString, subStringNext - subString);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD>
// case 5: memcpy(Sdi_Fram_Record_Structs.Ch6_RX_BUF, subString, subStringNext - subString);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD>
// case 6: memcpy(Sdi_Fram_Record_Structs.Ch7_RX_BUF, subString, subStringNext - subString);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD><36><EFBFBD><EFBFBD>
// case 7: memcpy(Sdi_Fram_Record_Structs.Ch8_RX_BUF, subString, subStringNext - subString);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7<EFBFBD><37><EFBFBD><EFBFBD>
// case 8: memcpy(Sdi_Fram_Record_Structs.Ch9_RX_BUF, subString, subStringNext - subString);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD><EFBFBD>
// default:break;
case 0: sprintf(Sdi_Fram_Record_Structs.Ch1_RX_BUF, "%s,%s,%s", pos1_data,pos2_data,pos3_data);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>
case 1: sprintf(Sdi_Fram_Record_Structs.Ch2_RX_BUF, "%s,%s,%s", pos1_data,pos2_data,pos3_data); break;//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>
case 2: sprintf(Sdi_Fram_Record_Structs.Ch3_RX_BUF, "%s,%s,%s", pos1_data,pos2_data,pos3_data);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>
case 3: sprintf(Sdi_Fram_Record_Structs.Ch4_RX_BUF, "%s,%s,%s", pos1_data,pos2_data,pos3_data);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>
case 4: sprintf(Sdi_Fram_Record_Structs.Ch5_RX_BUF, "%s,%s,%s", pos1_data,pos2_data,pos3_data);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD>
case 5: sprintf(Sdi_Fram_Record_Structs.Ch6_RX_BUF, "%s,%s,%s", pos1_data,pos2_data,pos3_data);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD>
case 6: sprintf(Sdi_Fram_Record_Structs.Ch7_RX_BUF, "%s,%s,%s", pos1_data,pos2_data,pos3_data);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD><36><EFBFBD><EFBFBD>
case 7: sprintf(Sdi_Fram_Record_Structs.Ch8_RX_BUF, "%s,%s,%s", pos1_data,pos2_data,pos3_data);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7<EFBFBD><37><EFBFBD><EFBFBD>
case 8: sprintf(Sdi_Fram_Record_Structs.Ch9_RX_BUF, "%s,%s,%s", pos1_data,pos2_data,pos3_data);break; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD><EFBFBD>
default:break;
}
Sdi_Fram_Record_Structs.Flag_finish_DATA=1;
}
}
void sdi12_buf_clear(void)
{
memset(Sdi_Fram_Record_Structs.Ch1_RX_BUF,0,sizeof(Sdi_Fram_Record_Structs.Ch1_RX_BUF));
memset(Sdi_Fram_Record_Structs.Ch2_RX_BUF,0,sizeof(Sdi_Fram_Record_Structs.Ch2_RX_BUF));
memset(Sdi_Fram_Record_Structs.Ch3_RX_BUF,0,sizeof(Sdi_Fram_Record_Structs.Ch3_RX_BUF));
memset(Sdi_Fram_Record_Structs.Ch4_RX_BUF,0,sizeof(Sdi_Fram_Record_Structs.Ch4_RX_BUF));
memset(Sdi_Fram_Record_Structs.Ch5_RX_BUF,0,sizeof(Sdi_Fram_Record_Structs.Ch5_RX_BUF));
memset(Sdi_Fram_Record_Structs.Ch6_RX_BUF,0,sizeof(Sdi_Fram_Record_Structs.Ch6_RX_BUF));
memset(Sdi_Fram_Record_Structs.Ch7_RX_BUF,0,sizeof(Sdi_Fram_Record_Structs.Ch7_RX_BUF));
memset(Sdi_Fram_Record_Structs.Ch8_RX_BUF,0,sizeof(Sdi_Fram_Record_Structs.Ch8_RX_BUF));
memset(Sdi_Fram_Record_Structs.Ch9_RX_BUF,0,sizeof(Sdi_Fram_Record_Structs.Ch9_RX_BUF));
}
void sdi12_process(void)
{
//u5_printf("start measure......\r\n");
osMutexAcquire(SDI_MutexID,osWaitForever);
//USART_DeInit(USART1);
Diable_Usart1_SDI();
USART_RS232_DEinit();
Enable_SDI_RS232=0;
sdi12_buf_clear();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Sdi_StartMeasure();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
delay_ms(500);
Sdi_Read();//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
osMutexRelease(SDI_MutexID);
// u5_printf(" measure end......\r\n");
}