20260324
This commit is contained in:
310
IAPV1.1/Driver/sdi12/sdi12.c
Normal file
310
IAPV1.1/Driver/sdi12/sdi12.c
Normal 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");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user