STM32 物联网 4G CAT1 SIMCOM A7680C 源码

这篇具有很好参考价值的文章主要介绍了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文件文章来源地址https://www.toymoban.com/news/detail-680973.html

#ifndef __BSP_UART1_H
#define	__BSP_UART1_H

void 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 源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32教学——JQ8900语音模块+光照传感器+4G模块数据上传阿里云物联网

    原理图 PCB 实物图 选用EC200U模块,集成4g和GPS以及蓝牙功能 通过串口2与4G模块串口连接,串口传输数据指令。 这个时候4g模块已经成功启动,下一步注册进阿里云物联网平台 然后就是上发数据给阿里云平台 上发了之后阿里云就可以收到这些数据 根据厂家提供的手册资料,可

    2024年03月14日
    浏览(47)
  • STM32 4G学习

    ATK-IDM750C模块可直接与正点原子 MiniSTM32F103开发板板载的ATK模块接口(ATK-MODULE)进行连接。 ATK-IDM750C是正点原子(ALIENTEK)团队开发的一款高性能4G Cat1 DTU产品,支持移动4G、联通4G和电信4G手机卡。 它以高速率、低延迟和无线数传作为核心功能,可快速解决应用场景下的无线数

    2024年02月14日
    浏览(25)
  • STM32:串口(蓝牙/WIFI/4G)

    目录 一 串口介绍 1.常用函数介绍 串口发送/接收函数: 串口中断回调函数: 状态标记变量:  2.串口接收中断流程​编辑 3.串口实验(非中断)  编程实现: 4.串口实验(中断) 编程实现: 二 蓝牙 非中断 中断 连接蓝牙模块  三 Wifi 1.Wifi模块基本接收和使用 2.WiFi连接服务

    2024年02月04日
    浏览(50)
  • STM32+EC20实现4G无线通信

    EC20是一款集成度非常高的4G无线通信模块,支持多种常见通信频段,能满足几乎所有的M2M(MachinetoMachine)应用需求。模块支持TCP/UDP/FTP等一众网络协议,内置多星座高精度定位GNSS接收机,快速提供准确的经纬度信息,UART接口提供AT命令控制和数据传输。 物联网很多的网关设备因

    2024年02月03日
    浏览(49)
  • 物联网开发笔记(59)- 使用Micropython开发ESP32开发板之控制合宙4g Air724U模块

    一、目的         这一节我们学习如何使用我们的ESP32开发板来控制合宙4g Air724U模块。 二、环境         ESP32 + 合宙4g Air724U模块 + Thonny IDE + 几根杜邦线 接线方法: 注意连接方式: ESP32的RX2-----4G模块的TX ESP32的TX2-----4G模块的RX 三、介绍         1,数据流通图 ESP32

    2024年02月08日
    浏览(74)
  • Air700E开发板|移芯EC618|4G Cat.1模组:概述及PinOut

    Air700E文档中心 EVB-Air700E 开发板是合宙通信推出的基于 Air700E 模组所开发的,包含电源,SIM 卡,USB,PCB 天线等必要功能的最小硬件系统。以方便用户在设计前期对 Air700E 模块进 行性能评估,功能调试,软件开发等用途。 内置 PCB 天线 一个下载/调试串口,两个通用串口 IO 口

    2024年02月01日
    浏览(43)
  • 基于 STM32+4G模块+微信小程序的环境监测系统的设计

    最近在做毕业设计,接触到了许多之前没碰过的,在这里写一写,希望能帮上有需要的同学 一        系统整体设计 二        下位机设计 三        阿里云物联网平台 四        上位机设计 五        总结                 先来说一说整体的设计,主要分为上位

    2024年03月15日
    浏览(50)
  • 展锐UIS8310 CAT4物联网模块简介

    1.简介 UIS8310是一个高度集成的应用处理器,支持TDD-LTE、FDD-LTE和WCDMA、GSM/GPRS/EDGE制式,并且支持LPDDR2。它的AP处理器是单核ARM CortexTM A7 1GHz,旨在为物联网提供经济高效、低功耗和高性能的解决方案。 UIS8310经过特别优化的架构可以实现高性能和低功耗应用。为低功耗ASIC设计和

    2024年02月13日
    浏览(35)
  • 基于stm32物联网开发板(1)

      本开发板采用了STM32F103RET6作为核心CPU,72MHZ工作频率,512KB flash,64KB Sram。本开发平台外设模块有ESP8266 WIFI模块、1.3寸LCD彩屏、SYN6288语音模块、MAX30102心率血氧传感器、AD8232心电图监测模块、BH1750环境光传感器、RGB全彩灯和3个按键。本开发平台支持串口自动下载电路和

    2024年02月03日
    浏览(42)
  • 【STM32 物联网】AT指令的介绍

    本系列STM32物联网使用的为esp8266-01S作为通信模块 在物联网(IoT)应用中,通信模块与微控制器之间的串口通信是一种常见的方式。AT 指令集是一种用于控制通信模块的标准指令集,通过发送特定的命令字符串,可以实现对通信模块的配置、数据传输等操作。在 STM32 微控制器

    2024年02月19日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包