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)); } } }
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; } }
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; }
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; }
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)); } } }
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; }