STM32 物联网 4G CAT1 SIMCOM A7680C 源码

基于状态机编写4G模块驱动函数


#include "bsp.h"  
char LTE_TX[512],LTE_RX[512];
int LTE_TX_length,LTE_RX_length;
char U1_TX_data[512],U1_RX_data[512];
char LTE_DATA_buf[512];
char LTE_COM_buf[512];
char LTE_SEND_buf[512];unsigned char U1_TX_flag,U1_RX_flag;
u16 U1_Tx_Counter,U1_Rx_Counter;
char LTE_AT_state;
char LTE_state;
char LTE_SEND0,LTE_SEND1,LTE_SEND2,LTE_SEND3;
char LTE_Connections;														//LTEÁ¬½Ó±êÖ¾    				0£ºÎ´Á¬½Ó  						
char LTE_TEMP_str[32];void UART1_Config(void)
{		GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef   NVIC_InitStructure;DMA_InitTypeDef    DMA_Initstructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2 , ENABLE); 	
//4G POWER	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure);			GPIO_ResetBits(GPIOE, GPIO_Pin_1);  
//4G_PWRKEY	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 ;	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure);GPIO_SetBits(GPIOE, GPIO_Pin_3);             
//4G_RESET		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_ResetBits(GPIOB, GPIO_Pin_1);    
//4G_RELAY	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure);GPIO_SetBits(GPIOE, GPIO_Pin_8);GPIO_SetBits(GPIOE, GPIO_Pin_9);  /* USART1 GPIO config *//* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);    /* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);	/* USART1 mode config */USART_InitStructure.USART_BaudRate = 115200;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     NVIC_Init(&NVIC_InitStructure);/*uart1 RX DMAÅäÖÃ*/    DMA_Initstructure.DMA_PeripheralBaseAddr =  (u32)(&USART1->DR);    DMA_Initstructure.DMA_MemoryBaseAddr     = (u32)U1_RX_data;    DMA_Initstructure.DMA_DIR = DMA_DIR_PeripheralSRC;    DMA_Initstructure.DMA_BufferSize = 512;    DMA_Initstructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;    DMA_Initstructure.DMA_MemoryInc =DMA_MemoryInc_Enable;    DMA_Initstructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;    DMA_Initstructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;    DMA_Initstructure.DMA_Mode = DMA_Mode_Normal;    DMA_Initstructure.DMA_Priority = DMA_Priority_High;    DMA_Initstructure.DMA_M2M = DMA_M2M_Disable;    DMA_Init(DMA1_Channel5,&DMA_Initstructure);       //Æô¶¯DMA    DMA_Cmd(DMA1_Channel5,ENABLE);USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);     USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);USART_Cmd(USART1, ENABLE);
}struct                                //×÷Òµ²ÉÑù
{    u16 LTE_Head;           u16 LTE_Tail;u16 LTE_Lenght;char LTE_Buf[4][512];int LTE_Len[4];
}LTE_Ring;void LTE_Ring_Init(void)
{LTE_Ring.LTE_Head=0;           LTE_Ring.LTE_Tail=0;LTE_Ring.LTE_Lenght=0;LTE_Ring.LTE_Len[0]=0;LTE_Ring.LTE_Len[1]=0;	LTE_Ring.LTE_Len[2]=0;	LTE_Ring.LTE_Len[3]=0;		
}
unsigned char LTE_Write_Ring(char *data,unsigned int len)
{	if(LTE_Ring.LTE_Lenght >= 4) {return 0;}LTE_Ring.LTE_Len[LTE_Ring.LTE_Tail]=len;memcpy(LTE_Ring.LTE_Buf[LTE_Ring.LTE_Tail],data,len);LTE_Ring.LTE_Tail = (LTE_Ring.LTE_Tail+1)%4;LTE_Ring.LTE_Lenght++;return 1;
}
unsigned char LTE_Read_Ring(char *Data)
{int len;if(LTE_Ring.LTE_Lenght == 0){return 0;}len=LTE_Ring.LTE_Len[LTE_Ring.LTE_Head];memcpy(Data,LTE_Ring.LTE_Buf[LTE_Ring.LTE_Head],len);memset(LTE_Ring.LTE_Buf[LTE_Ring.LTE_Head],0,len);LTE_Ring.LTE_Len[LTE_Ring.LTE_Head]=0;LTE_Ring.LTE_Head = (LTE_Ring.LTE_Head+1)%4;LTE_Ring.LTE_Lenght--;return len;
}struct                                //×÷Òµ²ÉÑù
{    u16 LTE_Head;           u16 LTE_Tail;u16 LTE_Lenght;char LTE_Buf[4][512];int LTE_Len[4];
}LTE1_T_Ring;
void LTE1_T_Ring_Init(void)
{LTE1_T_Ring.LTE_Head=0;           LTE1_T_Ring.LTE_Tail=0;LTE1_T_Ring.LTE_Lenght=0;LTE1_T_Ring.LTE_Len[0]=0;LTE1_T_Ring.LTE_Len[1]=0;	LTE1_T_Ring.LTE_Len[2]=0;	LTE1_T_Ring.LTE_Len[3]=0;		
}
unsigned char LTE1_T_Write_Ring(char *data,unsigned int len)
{	if(LTE1_T_Ring.LTE_Lenght >= 4) {return 0;}LTE1_T_Ring.LTE_Len[LTE1_T_Ring.LTE_Tail]=len;memcpy(LTE1_T_Ring.LTE_Buf[LTE1_T_Ring.LTE_Tail],data,len);LTE1_T_Ring.LTE_Tail = (LTE1_T_Ring.LTE_Tail+1)%4;LTE1_T_Ring.LTE_Lenght++;return 1;
}
unsigned char LTE1_T_Read_Ring(char *Data)
{int len;if(LTE1_T_Ring.LTE_Lenght == 0){return 0;}len=LTE1_T_Ring.LTE_Len[LTE1_T_Ring.LTE_Head];memcpy(Data,LTE1_T_Ring.LTE_Buf[LTE1_T_Ring.LTE_Head],len);memset(LTE1_T_Ring.LTE_Buf[LTE1_T_Ring.LTE_Head],0,len);LTE1_T_Ring.LTE_Len[LTE1_T_Ring.LTE_Head]=0;LTE1_T_Ring.LTE_Head = (LTE1_T_Ring.LTE_Head+1)%4;LTE1_T_Ring.LTE_Lenght--;return len;
}
struct                                //×÷Òµ²ÉÑù
{    u16 LTE_Head;           u16 LTE_Tail;u16 LTE_Lenght;char LTE_Buf[4][512];int LTE_Len[4];
}LTE2_T_Ring;
void LTE2_T_Ring_Init(void)
{LTE2_T_Ring.LTE_Head=0;           LTE2_T_Ring.LTE_Tail=0;LTE2_T_Ring.LTE_Lenght=0;LTE2_T_Ring.LTE_Len[0]=0;LTE2_T_Ring.LTE_Len[1]=0;	LTE2_T_Ring.LTE_Len[2]=0;	LTE2_T_Ring.LTE_Len[3]=0;		
}
unsigned char LTE2_T_Write_Ring(char *data,unsigned int len)
{	if(LTE2_T_Ring.LTE_Lenght >= 4) {return 0;}LTE2_T_Ring.LTE_Len[LTE2_T_Ring.LTE_Tail]=len;memcpy(LTE2_T_Ring.LTE_Buf[LTE2_T_Ring.LTE_Tail],data,len);LTE2_T_Ring.LTE_Tail = (LTE2_T_Ring.LTE_Tail+1)%4;LTE2_T_Ring.LTE_Lenght++;return 1;
}
unsigned char LTE2_T_Read_Ring(char *Data)
{int len;if(LTE2_T_Ring.LTE_Lenght == 0){return 0;}len=LTE2_T_Ring.LTE_Len[LTE2_T_Ring.LTE_Head];memcpy(Data,LTE2_T_Ring.LTE_Buf[LTE2_T_Ring.LTE_Head],len);memset(LTE2_T_Ring.LTE_Buf[LTE2_T_Ring.LTE_Head],0,len);LTE2_T_Ring.LTE_Len[LTE2_T_Ring.LTE_Head]=0;LTE2_T_Ring.LTE_Head = (LTE2_T_Ring.LTE_Head+1)%4;LTE2_T_Ring.LTE_Lenght--;return len;
}
struct                                //×÷Òµ²ÉÑù
{    u16 LTE_Head;           u16 LTE_Tail;u16 LTE_Lenght;char LTE_Buf[4][512];int LTE_Len[4];
}LTE3_T_Ring;
void LTE3_T_Ring_Init(void)
{LTE3_T_Ring.LTE_Head=0;           LTE3_T_Ring.LTE_Tail=0;LTE3_T_Ring.LTE_Lenght=0;LTE3_T_Ring.LTE_Len[0]=0;LTE3_T_Ring.LTE_Len[1]=0;	LTE3_T_Ring.LTE_Len[2]=0;	LTE3_T_Ring.LTE_Len[3]=0;		
}
unsigned char LTE3_T_Write_Ring(char *data,unsigned int len)
{	if(LTE3_T_Ring.LTE_Lenght >= 4) {return 0;}LTE3_T_Ring.LTE_Len[LTE3_T_Ring.LTE_Tail]=len;memcpy(LTE3_T_Ring.LTE_Buf[LTE3_T_Ring.LTE_Tail],data,len);LTE3_T_Ring.LTE_Tail = (LTE3_T_Ring.LTE_Tail+1)%4;LTE3_T_Ring.LTE_Lenght++;return 1;
}
unsigned char LTE3_T_Read_Ring(char *Data)
{int len;if(LTE3_T_Ring.LTE_Lenght == 0){return 0;}len=LTE3_T_Ring.LTE_Len[LTE3_T_Ring.LTE_Head];memcpy(Data,LTE3_T_Ring.LTE_Buf[LTE3_T_Ring.LTE_Head],len);memset(LTE3_T_Ring.LTE_Buf[LTE3_T_Ring.LTE_Head],0,len);LTE3_T_Ring.LTE_Len[LTE3_T_Ring.LTE_Head]=0;LTE3_T_Ring.LTE_Head = (LTE3_T_Ring.LTE_Head+1)%4;LTE3_T_Ring.LTE_Lenght--;return len;
}
void USART1_IRQHandler(void)
{unsigned int i,j;char *buf;if(USART_GetITStatus(USART1,USART_IT_IDLE) == SET)     {                                                 USART1->SR;        USART1->DR;DMA_Cmd(DMA1_Channel5,DISABLE);                        U1_Rx_Counter = 512 - DMA_GetCurrDataCounter(DMA1_Channel5);        if(buf=strstr(U1_RX_data, "RECV FROM:")){if(buf=strstr(U1_RX_data, "114.116.6.187:10000")){if(buf=strstr(U1_RX_data, "+IPD")){for(i=0;i<512;i++){if(buf[i]==0x0d){if((buf[25]==0x70)&&(buf[26]==0x01)&&(buf[29]==0x01))  //+2µÚÒ»¸ö×Ö½Ú{for(j=0;j<30;j++){LTE_IP[j]=buf[j+32];}LTE_PORT=(buf[62]<<8)+buf[63];for(j=0;j<4;j++){local_ip[j]=buf[j+64];}for(j=0;j<4;j++){mask_ip[j]=buf[j+68];}for(j=0;j<4;j++){gateway_ip[j]=buf[j+72];}for(j=0;j<32;j++){Lorawan_EUI[j]=buf[j+83];}for(j=0;j<32;j++){Lorawan_DevAddr[j]=buf[j+115];}LTE_Connections=1;}if((buf[25]==0x70)&&(buf[26]==0x01)&&(buf[29]==0x00)){LTE_Connections=0;}break;}}}				}if(buf=strstr(U1_RX_data, "114.116.6.187:20000")){if(buf=strstr(U1_RX_data, "+IPD")){for(i=0;i<512;i++){if(buf[i]==0x0d){if(i==5)UART2_T_Write_Ring((buf+7),(buf[4]-0x30));//1×Ö½Úif(i==6)UART2_T_Write_Ring((buf+8),(((buf[4]-0x30)*10)+(buf[5]-0x30)));//2×Ö½Úif(i==7)UART2_T_Write_Ring((buf+9),(((buf[4]-0x30)*100)+((buf[5]-0x30)*10)+(buf[6]-0x30)));//3×Ö½Úif(i==8)UART2_T_Write_Ring((buf+10),(((buf[4]-0x30)*1000)+((buf[5]-0x30)*100)+((buf[6]-0x30)*10)+(buf[7]-0x30)));//4×Ö½Úbreak;}}	}}if(buf=strstr(U1_RX_data, "114.116.6.187:30000")){if(buf=strstr(U1_RX_data, "+IPD")){for(i=0;i<512;i++){if(buf[i]==0x0d){if(i==5)UART3_T_Write_Ring((buf+7),(buf[4]-0x30));//1×Ö½Úif(i==6)UART3_T_Write_Ring((buf+8),(((buf[4]-0x30)*10)+(buf[5]-0x30)));//2×Ö½Úif(i==7)UART3_T_Write_Ring((buf+9),(((buf[4]-0x30)*100)+((buf[5]-0x30)*10)+(buf[6]-0x30)));//3×Ö½Úif(i==8)UART3_T_Write_Ring((buf+10),(((buf[4]-0x30)*1000)+((buf[5]-0x30)*100)+((buf[6]-0x30)*10)+(buf[7]-0x30)));//4×Ö½Úbreak;}}	}}if(buf=strstr(U1_RX_data, "114.116.6.187:40000")){if(buf=strstr(U1_RX_data, "+IPD")){for(i=0;i<512;i++){if(buf[i]==0x0d){if(i==5)UART5_T_Write_Ring((buf+7),(buf[4]-0x30));//1×Ö½Úif(i==6)UART5_T_Write_Ring((buf+8),(((buf[4]-0x30)*10)+(buf[5]-0x30)));//2×Ö½Úif(i==7)UART5_T_Write_Ring((buf+9),(((buf[4]-0x30)*100)+((buf[5]-0x30)*10)+(buf[6]-0x30)));//3×Ö½Úif(i==8)UART5_T_Write_Ring((buf+10),(((buf[4]-0x30)*1000)+((buf[5]-0x30)*100)+((buf[6]-0x30)*10)+(buf[7]-0x30)));//4×Ö½Úbreak;}}		}}}else{LTE_Write_Ring(U1_RX_data,U1_Rx_Counter);}DMA1_Channel5->CNDTR = 512;                                    DMA_Cmd(DMA1_Channel5,ENABLE);                       }
}
void U1_SendString(char *buf1)		  
{unsigned int i;unsigned int len;len=strlen(buf1);for(i=0;i<len;i++){while(USART_GetFlagStatus(USART1,USART_FLAG_TC)== RESET);USART_SendData(USART1,buf1[i]);}
}
void USART1_Send(char *buf,unsigned int len)
{unsigned int i;for(i=0;i<len;i++){while(USART_GetFlagStatus(USART1,USART_FLAG_TC)== RESET);USART_SendData(USART1,buf[i]);}
}
void LED1_OPEN(void)
{GPIO_WriteBit(GPIOE, GPIO_Pin_13, Bit_SET);
}
void LED1_CLOSE(void)
{GPIO_WriteBit(GPIOE, GPIO_Pin_13, Bit_RESET);
}
void LTE_ATTR(int time1,int time2,int time3,char * buf1,char * buf2,char * buf3,char * buf4,char * buf5,char * buf6,char r ,char w)
{unsigned int len;switch(LTE_AT_state){case state_idle:if(LTE_Delay_Timer>time1){LTE_Delay_Timer=0;LTE_Timeslimite++;len=strlen(buf1);USART1_Send(buf1,len);LTE_AT_state=state_run;}break;case state_run:LED1_OPEN();LTE_Delay_Timer=0;if(LTE_Read_Ring(LTE_DATA_buf)>0){if((strstr(LTE_DATA_buf, buf2))&&(strlen(buf2)))  //×Ö·û´®±È½Ï²»ÄÜÓÐ00£¬¹Ø±Õ»ØÏÔ±ÜÃâÊý¾ÝÖеÄ00Ó°Ïì±È½Ï{LTE_AT_state=state_right; }else if((strstr(LTE_DATA_buf, buf3))&&(strlen(buf3))){LTE_AT_state=state_right; } else if((strstr(LTE_DATA_buf, buf4))&&(strlen(buf4))){LTE_AT_state=state_wrong; }else if((strstr(LTE_DATA_buf, buf5))&&(strlen(buf5))){LTE_AT_state=state_wrong; } else if((strstr(LTE_DATA_buf, buf6))&&(strlen(buf6))){LTE_AT_state=state_wrong; }}if(LTE_Timeslimite>time2){LTE_AT_state=state_wrong;}if(LTE_overtime>time3){LTE_AT_state=state_wrong;}break;case state_right:LTE_state=r;LTE_AT_state=state_idle;LTE_Delay_Timer=0;LTE_overtime=0;LTE_Timeslimite=0;LED1_CLOSE();memset(LTE_DATA_buf,0,512);break;case state_wrong:LTE_state=w;LTE_AT_state=state_idle;LTE_Delay_Timer=0;LTE_overtime=0;LTE_Timeslimite=0;LED1_CLOSE();memset(LTE_DATA_buf,0,512);break;default:  break;}
}
void LTE_DATATR(int time1,int time2,int time3,char * buf1,int len,char * buf2,char * buf3,char * buf4,char * buf5,char * buf6,char r ,char w)
{switch(LTE_AT_state){case state_idle:if(LTE_Delay_Timer>time1){LTE_Delay_Timer=0;LTE_Timeslimite++;USART1_Send(buf1,len);LTE_AT_state=state_run;}break;case state_run:LED1_OPEN();LTE_Delay_Timer=0;if(LTE_Read_Ring(LTE_DATA_buf)>0){if((strstr(LTE_DATA_buf, buf2))&&(strlen(buf2)))   //×Ö·û´®±È½Ï²»ÄÜÓÐ00£¬¹Ø±Õ»ØÏÔ±ÜÃâÊý¾ÝÖеÄ00Ó°Ïì±È½Ï{LTE_AT_state=state_right; }else if((strstr(LTE_DATA_buf, buf3))&&(strlen(buf3))){LTE_AT_state=state_right; } else if((strstr(LTE_DATA_buf, buf4))&&(strlen(buf4))){LTE_AT_state=state_wrong; }else if((strstr(LTE_DATA_buf, buf5))&&(strlen(buf5))){LTE_AT_state=state_wrong; } else if((strstr(LTE_DATA_buf, buf6))&&(strlen(buf6))){LTE_AT_state=state_wrong; }}if(LTE_Timeslimite>time2){LTE_AT_state=state_wrong;}if(LTE_overtime>time3){LTE_AT_state=state_wrong;}break;case state_right:LTE_state=r;LTE_AT_state=state_idle;LTE_Delay_Timer=0;LTE_overtime=0;LTE_Timeslimite=0;LED1_CLOSE();memset(LTE_DATA_buf,0,512);break;case state_wrong:LTE_state=w;LTE_AT_state=state_idle;LTE_Delay_Timer=0;LTE_overtime=0;LTE_Timeslimite=0;LED1_CLOSE();memset(LTE_DATA_buf,0,512);break;default:  break;}
}
void LTE_POWER(void)
{int i,j;GPIO_WriteBit(GPIOE, GPIO_Pin_1, Bit_SET);for(i=0;i<1000;i++)for(j=0;j<1000;j++);GPIO_WriteBit(GPIOE, GPIO_Pin_1, Bit_RESET);for(i=0;i<1000;i++)for(j=0;j<1000;j++);
}
void LTE_KEY(void)
{int i,j;GPIO_WriteBit(GPIOE, GPIO_Pin_3, Bit_RESET);for(i=0;i<1000;i++)for(j=0;j<1000;j++);GPIO_WriteBit(GPIOE, GPIO_Pin_3, Bit_SET);for(i=0;i<1000;i++)for(j=0;j<1000;j++);
}
void LTE_RST(void)
{int i,j;GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_RESET);for(i=0;i<1000;i++)for(j=0;j<1000;j++);GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);for(i=0;i<1000;i++)for(j=0;j<1000;j++);
}/*********************************************END OF FILE**********************/

.h文件

#ifndef __BSP_UART1_H
#define	__BSP_UART1_Hvoid UART1_Config(void);
void LTE_Ring_Init(void);
unsigned char LTE_Write_Ring(char *data,unsigned int len);
unsigned char LTE_Read_Ring(char *Data);
void LTE1_T_Ring_Init(void);
unsigned char LTE1_T_Write_Ring(char *data,unsigned int len);
unsigned char LTE1_T_Read_Ring(char *Data);
void LTE2_T_Ring_Init(void);
unsigned char LTE2_T_Write_Ring(char *data,unsigned int len);
unsigned char LTE2_T_Read_Ring(char *Data);
void LTE3_T_Ring_Init(void);
unsigned char LTE3_T_Write_Ring(char *data,unsigned int len);
unsigned char LTE3_T_Read_Ring(char *Data);
void U1_SendString(char *buf1);
void USART1_Send(char *buf,unsigned int len);
void LED1_OPEN(void);
void LED1_CLOSE(void);
void LTE_ATTR(int time1,int time2,int time3,char * buf1,char * buf2,char * buf3,char * buf4,char * buf5,char * buf6,char r ,char w);
void LTE_DATATR(int time1,int time2,int time3,char * buf1,int len,char * buf2,char * buf3,char * buf4,char * buf5,char * buf6,char r ,char w);
void LTE_POWER(void);
void LTE_KEY(void);
void LTE_RST(void);
#endif /* __BSP_UART1_H */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/58955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文总结Redis知识点

目录 为什么基于MySQL又出现Redis&#xff1f;Redis的优点&#xff1f;Redis支持的基本命令Redis支持的数据结构1 String2 List3 Set4 Sorted Set5 Hash6 Stream 消息队列7 Geospatial 地理空间8 Bitmap 位图9 Bitfield 位域10 HyperLogLog Redis是单线程还是多线程&#xff1f…

SpringBoot Thymeleaf iText7 生成 PDF(2023/08/29)

SpringBoot Thymeleaf iText7 生成 PDF&#xff08;2023/08/29&#xff09; 文章目录 SpringBoot Thymeleaf iText7 生成 PDF&#xff08;2023/08/29&#xff09;1. 前言2. 技术思路3. 实现过程4. 测试 1. 前言 近期在项目种遇到了实时生成复杂 PDF 的需求&#xff0c;经过一番…

ceph中PGLog处理流程

ceph的PGLog是由PG来维护&#xff0c;记录了该PG的所有操作&#xff0c;其作用类似于数据库里的undo log。PGLog通常只保存近千条的操作记录(默认是3000条&#xff0c; 由osd_min_pg_log_entries指定)&#xff0c;但是当PG处于降级状态时&#xff0c;就会保存更多的日志&#x…

地铁+铁路系统防雷接地应用解决方案

地铁作为城市轨道交通的一种&#xff0c;是一种高效、安全、环保的公共交通方式。然而&#xff0c;地铁也面临着雷电灾害的威胁&#xff0c;尤其是在雷暴多发的地区。 雷电对地铁系统的影响主要有以下几个方面&#xff1a; 直接雷击&#xff1a;雷电直接击中地铁系统的设备或…

RISC-V公测平台发布 · 在SG2042上配置Jupiter+Octave科学计算环境

简介 JupyterHub是一个开源的共享计算平台&#xff0c;它为每个用户管理一个单独的 Jupyter 环境&#xff0c; 可以用于学生班级、企业数据科学小组或科学研究小组。它是一个多用户中心&#xff0c;可以生成、管理和代理多个单用户Jupyter笔记本服务器的实例。 GNU Octave是一…

WebSocket- 前端篇

官网代码 // 为了浏览器兼容websocketconst WebSocket window.WebSocket || window.MozWebSocket// 创建连接 this.socket new WebSocket(ws://xxx)// 连接成功this.socket.onopen (res)>{console.log(websocket 连接成功)this.socket.send(入参字段) // 传递的参数字段}…

zookeeper集群 数据一致性测试

搭建zk集群 准备 3台ubuntu 20机器每台机器提前安装配置好jdk-8apache-zookeeper-3.8.2-bin.tar.gz 开始 # 上传 scp -P 22 -r C:\Users\xcrj\Downloads\apache-zookeeper-3.8.2-bin.tar.gz root192.168.1.102:/root/zk/ # 解压 tar -zxvf apache-zookeeper-3.8.2-bin.tar.…

【前端】 Layui点击图片实现放大、关闭效果

实现效果&#xff1a;点击图片实现放大&#xff0c;点击空白处关闭效果。下图。 实现逻辑&#xff1a;二维码是使用JQ插件生成的&#xff0c;点击二维码&#xff0c;获取图片路径&#xff0c;通过Layui的弹窗显示放大后的图片。 Html <div id"qrcode" class&quo…

Java学习笔记31——字符流

字符流 字符流为什么出现字符流编码表字符串中的编码解码问题字符流写数据的5中方式字符流读数据的两种方式字符流复制Java文件 字符流 为什么出现字符流 汉字的存储如果是GBK编码占用2个字节&#xff0c;如果是UTF-8占用三个字节 用字节流复制文本文件时&#xff0c;文本文…

驱动开发错误汇编

本博文将会不定期更新。以便记录我的驱动开发生涯中的一些点点滴滴的技术细节和琐事。 生成时link找不到导出函数&#xff0c;比如"LNK2019 无法解析的外部符号 _FltCreateCommunicationPort32"。出现这种情况的原因是&#xff0c;驱动的编译环境忽略了所有的默认库&…

基于实例的学习方法

基于实例的学习方法 动机基本概念基于实例的学习基于实例的概念表示 1. 最近邻最近邻的例子理论结果最近邻&#xff08;1- NN&#xff09;:解释问题 K-近邻(KNN)KNN讨论1 &#xff1a;距离度量KNN 讨论2&#xff1a;属性KNN:属性归一化KNN:属性加权 KNN讨论3:连续取值目标函数K…

Python爬虫实战:自动化数据采集与分析

在大数据时代&#xff0c;数据采集与分析已经成为了许多行业的核心竞争力。Python作为一门广泛应用的编程语言&#xff0c;拥有丰富的爬虫库&#xff0c;使得我们能够轻松实现自动化数据采集与分析。本文将通过一个简单的示例&#xff0c;带您了解如何使用Python进行爬虫实战。…

C# 使用NPOI操作EXCEL

1.添加NOPI 引用->管理NuGet程序包->添加NOPI 2.相关程序集 3.添加命名空间 using NPOI.HSSF; using NPOI.XSSF; using System.IO; using NPOI.XSSF.UserModel; using NPOI.HSSF.UserModel; 4.从Excel导入的dgv样例 //NPOI读入dgv private void button1_Click(object s…

内存分析之GCViewer详细解读

文章目录 GCViewer详细解读一&#xff0c;Chart详解二&#xff0c;Event detail三&#xff0c;Summary四&#xff0c;Pause五&#xff0c;相关概念5.1 GC5.1.1 Full GC5.1.2 Minor GC 5.2 垃圾收集器5.2.1 串行收集器&#xff08;Serial&#xff09;5.2.2 **ParNew收集器**5.2.…

Python切换输入法的实战代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

经纬恒润荣获吉利汽车“最佳价值贡献”奖

8月18日&#xff0c;以“全面向新 共创共赢”为主题&#xff0c;吉利汽车在宁波成功举行2023年电子电器核心供应商恳谈会。经纬恒润凭借在项目合作上持续创新、高效协同等优异表现&#xff0c;获得“最佳价值贡献”奖项。 作为国产汽车代表性品牌之一&#xff0c;吉利汽车积极推…

多通道振弦数据记录仪在岩土工程隧洞中的完整解决方案

多通道振弦数据记录仪在岩土工程隧洞中的完整解决方案 隧洞工程是一种非常复杂的工程类型&#xff0c;需要高度的安全性和精确性。而在岩土工程中&#xff0c;振弦是一种非常常用的测试方法&#xff0c;用于测定岩土体的物理性质以及地震波传播特性等&#xff0c;以利于对隧洞…

【深入浅出设计模式--状态模式】

深入浅出设计模式--状态模式 一、背景二、问题三、解决方案四、 适用场景总结五、后记 一、背景 状态模式是一种行为设计模式&#xff0c;让你能在一个对象的内部状态变化时改变其行为&#xff0c;使其看上去就像改变了自身所属的类一样。其与有限状态机的概念紧密相关&#x…

解决Three.js辉光背景不透明

使用此pass canvas元素的background都能看到 不过相应的辉光颜色和背景颜色不相容的地方看起来颜色会怪一些 如图 不过如果是纯色就没什么问题了 //ts-nocheck /** Author: hongbin* Date: 2023-04-06 11:44:14* LastEditors: hongbin* LastEditTime: 2023-04-06 11:49:23* De…

电缆工厂 3D 可视化管控系统 | 智慧工厂

近年来&#xff0c;我国各类器材制造业已经开始向数字化生产转型&#xff0c;使得生产流程变得更加精准高效。通过应用智能设备、物联网和大数据分析等技术&#xff0c;企业可以更好地监控生产线上的运行和质量情况&#xff0c;及时发现和解决问题&#xff0c;从而提高生产效率…