Exemplo n.º 1
0
int main(void) {
	/* Initialize system */
	SystemInit();
	
	/* Init USART2 on pins TX = PA2, RX = PA3 */
	/* This pins are used on Nucleo boards for USB to UART via ST-Link */
	TM_USART_Init(USART2, TM_USART_PinsPack_1, 115200);
	
	/* Say string without DMA */
	TM_USART_Puts(USART2, "Hello via USART2 without DMA\n");
	
	/* Init TX DMA for USART2 */
	TM_USART_DMA_Init(USART2);
	
	/* Send data with DMA */
	TM_USART_DMA_Send(USART2, (uint8_t *)USART_Buffer, strlen(USART_Buffer));
	
	/* Wait till DMA works */
	/* You can do other stuff here instead of waiting for DMA to end */
	while (TM_USART_DMA_Sending(USART2));
	
	while (1) {
		/* If any string arrived over USART */
		/* Expecting "\n" at the end of string from USART terminal or any other source */
		if (TM_USART_Gets(USART2, USART_Buffer, sizeof(USART_Buffer))) {
			/* Send it back over DMA */
			TM_USART_DMA_Send(USART2, (uint8_t *)USART_Buffer, strlen(USART_Buffer));

			/* Wait till DMA works */
			/* You can do other stuff here instead of waiting for DMA to end */
			while (TM_USART_DMA_Sending(USART2));
		}
	}
}
Exemplo n.º 2
0
int8_t	SIM300SendMsg(const char *num, const char *msg,uint8_t *msg_ref)
{
	TM_USART_ClearBuffer(USART1);
	
	char cmd[25];
	
	sprintf(cmd,"AT+CMGS= %s",num);
	
	cmd[8]=0x22; //"
	
	uint8_t n=strlen(cmd);
	
	cmd[n]=0x22; //"
	cmd[n+1]='\0';
	
	//Send Command
	SIM300Cmd(cmd);
	
	Delayms(100);
	
	TM_USART_Puts(USART1,msg);
	
	TM_USART_Putc(USART1,0x1A);
	
	while(   TM_USART_Available(USART1)<(strlen(msg)+5)   );
	
	//Remove Echo
	TM_USART_Gets(USART1,sim300_buffer,strlen(msg)+5);
	
	uint8_t len=SIM300WaitForResponse(6000);
	
	if(len==0)
		return SIM300_TIMEOUT;
	
	sim300_buffer[len-1]='\0';
	
	if(strncasecmp(sim300_buffer+2,"CMGS:",5)==0)
	{
		
		*msg_ref=atoi(sim300_buffer+8);
		
		TM_USART_ClearBuffer(USART1);
		
		return SIM300_OK;
	}
	else
	{
		TM_USART_ClearBuffer(USART1);
		return SIM300_FAIL;	
	}		
}
Exemplo n.º 3
0
int8_t SIM300GetNetStat()
{
	//Send Command
	SIM300Cmd("AT+CREG?");
	
	//Now wait for response
	uint16_t i=0;
	
	//correct response is 20 byte long
	//So wait until we have got 20 bytes
	//in buffer.
	while(i<10)
	{
		if(TM_USART_Available(USART1)<20)
		{
			i++;
			
			Delayms(10);
			
			continue;
		}
		else
		{
			//We got a response that is 20 bytes long
			//Now check it
			TM_USART_Gets(USART1,sim300_buffer,20);	//Read serial Data
			
			if(sim300_buffer[11]=='1')
				return SIM300_NW_REGISTERED_HOME;
			else if(sim300_buffer[11]=='2')
				return SIM300_NW_SEARCHING;
			else if(sim300_buffer[11]=='5')
				return SIM300_NW_REGISTED_ROAMING;
			else
				return SIM300_NW_ERROR;			
		}
	}
	
	//We waited so long but got no response
	//So tell caller that we timed out
	
	return SIM300_TIMEOUT;
	
}
Exemplo n.º 4
0
int8_t SIM300IsSIMInserted()
{
	TM_USART_ClearBuffer(USART1);
	
	//Send Command
	SIM300Cmd("AT+CSMINS?");
	
	//Now wait for response
	uint16_t i=0;
	
	//correct response is 22 byte long
	//So wait until we have got 22 bytes
	//in buffer.
	while(i<30)
	{
		if(TM_USART_Available(USART1)<22)
		{
			i++;
			
			Delayms(10);
			
			continue;
		}
		else
		{
			//We got a response that is 22 bytes long
			//Now check it
			TM_USART_Gets(USART1,sim300_buffer,22);	//Read serial Data
			
			if(sim300_buffer[13]=='1')
				return SIM300_SIM_PRESENT;
			else
				return SIM300_SIM_NOT_PRESENT;
		}
	}
	
	//We waited so long but got no response
	//So tell caller that we timed out
	
	return SIM300_TIMEOUT;
}
Exemplo n.º 5
0
int main(void) {
	/* Init system clock for maximum system speed */
	TM_RCC_InitSystem();
	
	/* Init HAL layer */
	HAL_Init();
	
	/* Init USART, check USART lib description for pinout */
	TM_USART_Init(USART, TM_USART_PinsPack_1, 921600);
	
	/* Say string without DMA */
	TM_USART_Puts(USART, "Hello via USART without DMA\n");
	
	/* Init TX DMA for USART */
	TM_USART_DMA_Init(USART);
	
	/* Enable interrupts for TX DMA */
	TM_USART_DMA_EnableInterrupts(USART);
	
	/* Send data with DMA */
	TM_USART_DMA_Send(USART, (uint8_t *)USART_Buffer, strlen(USART_Buffer));
	
	/* Wait till DMA works */
	/* You can do other stuff here instead of waiting for DMA to end */
	while (TM_USART_DMA_Transmitting(USART));
	
	while (1) {
		/* If any string arrived over USART */
		/* Expecting "\n" at the end of string from USART terminal or any other source */
		if (TM_USART_Gets(USART, USART_Buffer, sizeof(USART_Buffer))) {
			/* Send it back over DMA */
			TM_USART_DMA_Send(USART, (uint8_t *)USART_Buffer, strlen(USART_Buffer));

			/* Wait till DMA works */
			/* You can do other stuff here instead of waiting for DMA to end */
			while (TM_USART_DMA_Transmitting(USART));
		}
	}
}
Exemplo n.º 6
0
int8_t SIM300Cmd(const char *cmd)
{
	TM_USART_ClearBuffer(USART1);
	TM_USART_Puts(USART1,cmd);	//Send Command
	TM_USART_Puts(USART1,"\r\n");	//CR
	//TM_USART_FlushBuffer(USART1);
	TM_USART_ClearBuffer(USART1);
	uint8_t len=strlen(cmd);
	
	len++;	//Add 1 for trailing CR added to all commands
	
	uint16_t i=0;
	
	//Wait for echo
	while(i<10*len)
	{
		if(TM_USART_Available(USART1)<len)
		{
			i++;
			
			Delayms(10);
			
			continue;
		}
		else
		{
			//We got an echo
			//Now check it
			TM_USART_Gets(USART1,sim300_buffer,len);	//Read serial Data
			
			return SIM300_OK;
			
		}
	}
	
	return SIM300_TIMEOUT;
			
}