Hello,
I am trying to use the STM32107VC EVAL board to send a message using a GSM Modem by sending AT commands via the USART.
I have created the following code for the same. The output is showing on the hyper terminal, but it is still not sending messages through the Modem.
Can anyone please help and suggest where I am going wrong?? Thank you!
void init_GSM_Modem(void); const char command_CMGF[]="AT+CMGF=1\r"; //Selecting text mode const char CtrlZ =0x1A; const char command_CMGS[]="AT+CMGS=+91989xxxxxxxx\r"; //Phone number to send message to const char command_AT[]="AT\r"; const char msg01[]="Hello! This is a Test Message via STM32F107"; //Message to be sent /* Leaving out init_serial, SendChar and GetChar Functions for reducing the code length. */ /*---------------------------------------------------------------------------- * init_GSM_Modem : Initialize Modem Commands *---------------------------------------------------------------------------*/ void init_GSM_Modem(void) { delay2(); puts(command_AT); delay2(); puts(command_CMGF); delay2(); puts(command_CMGS); delay2(); puts(msg01); delay2(); while (!(USART2->SR & 0x0080)); USART2->SR & 0x0000; USART2->DR = 0x1A; //sending CtrlZ command } int main(void) { SystemInit(); init_serial(); init_GSM_Modem(); while(1) {;} }
I have a feeling that I am doing something wrong while sending the "CtrlZ command". I wanted to send it when the interrupt flag was raised by hardware and cleared by software.
"I will try to use the AT+CMEE command after every other AT command"
Please read the description of the AT+CMEE command in your AT Commands manual - you don't use it after each command!
"What would be the approximate time gap for sending out the next command (in seconds)??"
I said do not rely upon arbitrary, "blind" delays!
Instead, your application needs to pay attention to the response for each command sent...