当前位置: 首页 > news >正文

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 */

相关文章:

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…...

ETLCloud制造业轻量级数据中台解决方案

制造业数据处理特点 制造业在业务发展过程中产生大量的业务交易数据以及设备运行过程中的状态数据&#xff0c;但是制造业有别于其他互联网或零售行业&#xff0c;其数据处理具有以下特点&#xff1a; 数据量不大&#xff0c;大部分业务系统的数据库表在1000W以下数据结构复杂…...

解决外接显示器后Edge浏览器地址栏等变得很大的问题

解决外接显示器后Edge浏览器地址栏等变得很大的问题 edge设置里外观——触控模式&#xff0c;把触控模式关了...

k8s 启动和删除pod

k8s创建pod pod的启动流程 流程图 运维人员向kube-apiserver发出指令&#xff08;我想干什么&#xff0c;我期望事情是什么状态&#xff09; api响应命令,通过一系列认证授权,把pod数据存储到etcd,创建deployment资源并初始化。(期望状态&#xff09; controller通过list-wa…...

Jenkins详解(三)

Jenkins详解(三) 目录 Jenkins详解(三) 1、Jenkins介绍2、Jenkins CI/CD 流程3、部署环境 3.1 环境准备3.2 安装GitLab3.3 初始化GitLab3.4 GitLab中文社区版补丁包安装3.5 修改GitLab配置文件/etc/gitlab/gitlab.rb3.6 在宿主机输入 http://192.168.200.26:88 地址就可以访问了…...

【真题解析】系统集成项目管理工程师 2023 年上半年真题卷(综合知识)

本文为系统集成项目管理工程师考试(软考) 2023 年上半年真题(全国卷),包含答案与详细解析。考试共分为两科,成绩均 ≥45 即可通过考试: 综合知识(选择题 75 道,75分)案例分析(问答题 4 道,75分)综合知识(选择题*75)1-10 题11-20 题21-30 题31-40 题41-50 题51-60 …...

开始MySQL之路——MySQL存储引擎概念

一、存储引擎概念 MySQL数据库和大多数的数据库不同, MySQL数据库中有一个存储引擎的概念, 针对不同的存储需求可以选择最优的存储引擎。 ​ 存储引擎就是存储数据&#xff0c;建立索引&#xff0c;更新查询数据等等技术的实现方式 。存储引擎是基于表的&#xff0c;而不是基…...

ant-design 设置Form.Item中的input框的值的方法

ant-design 设置Form.Item中的input中的value值是不知道什么原因是无效的&#xff0c;所以有以下两种方法设置&#xff1a; 1.可以通过 initialValues 属性来为表单设置默认值。具体使用方法如下&#xff1a; 在表单最外层的 Form 组件上加入 initialValues 属性&#xff0c;…...

CS420 课程笔记 P6 - 游戏逆向中的虚拟内存

文章目录 IntroVirtual memoryExample!Static example Intro 在上个视频中&#xff0c;我们知道有些地址在你重进游戏时就会无效&#xff0c;有的有时有效&#xff0c;我们需要了解称为虚拟内存的东西 记住这些信息&#xff1a;当你双击打开 Squally.exe 游戏时&#xff0c;系…...

公信力不是儿戏:政府与非营利组织如何利用爱校对提升信息质量

公信力是政府和非营利组织成功的基础&#xff0c;而这种公信力大多来源于对外发布的信息的准确性和可靠性。在这个方面&#xff0c;“爱校对”展现了它的强大能力和实用性。以下我们将具体探讨这两种组织如何通过使用爱校对来提升他们的信息质量。 政府&#xff1a;公开与透明&…...

Linux内核源码分析 (B.1)内核内存布局和堆管理

Linux内核源码分析 (B.1)内核内存布局和堆管理 文章目录 Linux内核源码分析 (B.1)内核内存布局和堆管理一、Linux内核内存布局二、堆管理 一、Linux内核内存布局 64位Linux一般使用48位来表示虚拟地址空间&#xff0c;45位表示物理地址。通过命令&#xff1a;cat/proc/cpuinfo。…...

Python---函数

函数定义&#xff1a; """ def 函数名(传入参数):函数体return 返回值 """ 函数调用&#xff1a; """ 函数名(传入参数) """ 例子&#xff1a; # 不带参 def check():print("欢迎光临\n请进") che…...

Myvatis关联关系映射与表对象之间的关系

目录 一、关联关系映射 1.1 一对一 1.2 一对多 1.3 多对多 二、处理关联关系的方式 2.1 嵌套查询 2.2 嵌套结果 三、一对一关联映射 3.1 建表 ​编辑 3.2 配置文件 3.3 代码生成 3.4 编写测试 四、一对多关联映射 五、多对多关联映射 六、小结 一、关联关系映射 …...

算法通关村第十四关:黄金挑战-数据流的中位数

黄金挑战-数据流的中位数 1.数据流中中位数的问题 LeetCode295 https://leetcode.cn/problems/find-median-from-data-stream/ 思路分析 中位数的问题&#xff0c;我们一般都可以用 大顶堆小顶堆 来求解 小顶堆&#xff08;minHeap&#xff09;&#xff1a;存储所有元素中…...

【2023集创赛】国家集创中心杯三等奖:不对称轻失配运算放大器

本文为2023年第七届全国大学生集成电路创新创业大赛&#xff08;“集创赛”&#xff09;国家集创中心杯三等奖作品分享&#xff0c;参加极术社区的【有奖征集】分享你的2023集创赛作品&#xff0c;秀出作品风采&#xff0c;分享2023集创赛作品扩大影响力&#xff0c;更有丰富电…...

手写Mybatis:第18章-一级缓存

文章目录 一、目标&#xff1a;一级缓存二、设计&#xff1a;一级缓存三、实现&#xff1a;一级缓存3.1 工程结构3.2 一级缓存类图3.3 一级缓存实现3.3.1 定义缓存接口3.3.2 实现缓存接口3.3.3 创建缓存KEY3.3.4 NULL值缓存key 3.4 定义缓存机制、占位符和修改配置文件3.4.1 定…...

哈夫曼编码实现文件的压缩和解压

程序示例精选 哈夫曼编码实现文件的压缩和解压 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《哈夫曼编码实现文件的压缩和解压》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0…...

解决六大痛点促进企业更好使用生成式AI,亚马逊云科技顾凡采访分享可用方案

亚马逊云科技大中华区战略业务发展部总经理顾凡在接受21世纪经济报道记者专访时表示&#xff0c;生成式人工智能将从四个方面为企业带来机遇&#xff1a;第一是创造全新的客户体验&#xff1b;第二是提高企业内部员工的生产力&#xff1b;第三是帮助企业提升业务运营效率&#…...

Qt 定时器放在线程中执行,支持随时开始和停止定时器。

前言&#xff1a;因为项目需要定时检查网络中设备是否能连通&#xff0c;需要定时去做ping操作&#xff0c;若是网络不通&#xff0c;则ping花费时间比较久&#xff08;局域网大概4秒钟才能结束&#xff0c;当然如果设置超时时间啥的&#xff0c;也能很快返回&#xff0c;就是会…...

java 过滤器 接口(API)验证入参,验签(sign) Demo

java 过滤器 接口&#xff08;API&#xff09;验证入参&#xff0c;验签&#xff08;sign&#xff09; Demo 一、思路 1、配置yml文件; 2、创建加载配置文件类; 3、继承 OncePerRequestFilter 重写方法 doFilterInternal; 4、注册自定义过滤器; 二、步骤 1、配置yml文件; ###系…...

独家!微信正在灰测一款全新消金产品

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 「镭射财经」独家获悉&#xff0c;微信将推出一款名为“微信分期”的新消费信贷产品&#xff0c;目前该产品正处于小范围灰测阶段&#xff0c;还未正式上线。上线后&#xff0c;微信将运营微信分付和微信分期两款自营消…...

阿秀C++笔记-学习记录

81.C中的组合和继承相比的优缺点 在C中组合一对象系用描述对象包对象系组一个拥对象例其变合类的含的现。这的量类当有员被创建。 以下一个示例&#xff0c;展示了在C中如何实现组合关系&#xff1a; class Engine {// Engine class definition... };class Car {Engine engi…...

前端入门到入土?

文章目录 前言http和https的区别&#xff0c;https加密的原理是&#xff1f;区别https的加密原理 TCP为什么要三次握手&#xff1f;proxy代理的原理&#xff1f;内存泄漏&#xff1f;什么是内存泄漏&#xff1f;为什么会有内存泄漏&#xff1f;内存泄漏的情况&#xff1f;如何防…...

架构设计基础设施保障IaaS之网络

目录 1 DNS运用1.1 DNS功能作用1.2 DNS配置实践 2 DNS生产最佳实践方案2.1 全球加速功能2.2 不同运营商的加速方案2.3 全球业务高可用方案2.4 跨地域负载均衡 3 DNS域名劫持解决方案4 CDN剖析4.1 CDN原理4.2 缓存过期配置处理流程4.3 缓存配置规则 5 CDN运用6 CDN最佳实践方案6…...

zabbix安装部署

前期准备&#xff1a;安装mysql数据库和nginx 一、下载zabbix rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm yum-config-manager --enable rhel-7-server-optional-rpms yum install epel-release numactl yum install…...

零碎的C++

构造函数和析构函数 构造函数不能是虚函数&#xff0c;而析构函数可以是虚函数。原因如下&#xff1a; 构造函数不能是虚函数&#xff0c;因为在执行构造函数时&#xff0c;对象还没有完全创建&#xff0c;还没有分配内存空间&#xff0c;也没有初始化虚函数表指针。如果构造…...

模糊测试面面观 | 模糊测试是如何发现异常情况的?

协议模糊测试是一种用于评估通信协议、文件格式和API实现系统安全性和稳定性的关键技术。在模糊测试过程中&#xff0c;监视器扮演着关键角色&#xff0c;它们能够捕获异常情况、错误响应、资源利用等&#xff0c;为测试人员提供有价值的信息&#xff0c;有助于发现潜在漏洞和问…...

C#备份数据库文件

c#备份数据库文件完整代码 sqlServer 存储过程&#xff1a; USE [PSIDBase] GO /****** Object: StoredProcedure [dbo].[sp_BackupDB] Script Date: 2023/8/31 16:49:02 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GOALTER procedure [dbo].[sp_BackupDB]…...

行军遇到各种复杂地形怎么处理?

行军遇到各种复杂地形怎么处理&#xff1f; 【安志强趣讲《孙子兵法》第30讲】 【原文】 凡军好高而恶下&#xff0c;贵阳而贱阴&#xff0c;养生而处实&#xff0c;军无百疾&#xff0c;是谓必胜。 【注释】 阳&#xff0c;太阳能照到的地方。阴&#xff0c;太阳照不到的地方。…...

Python Number(数字).............................................

Python Number 数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值&#xff0c;将重新分配内存空间。 以下实例在变量赋值时 Number 对象将被创建&#xff1a; var1 1 var2 10您也可以使用del语句删除一些 Number 对象引用。 del语句…...