cancel
Showing results for 
Search instead for 
Did you mean: 

stm32f100c8 and ublox leon g100 USART communication

rasimoguzturk
Associate III
Posted on October 04, 2012 at 13:20

hi all,i am recently working on a project that sending AT command to gsm module from stm32f100c8  via usart and receiving response with interrupt but i am very confused about usart interfaces.i cant receive response from gsm module.i am using stm32vl discovery and ublox leon g100 gsm module usart1 and usart3 and terminal.It sends me back same string.i send ''AT'' and i want to get ''OK'' response from module.please help where am i wrong?here is my code :

/*----------------------------------------------*/

/*----------------------------------------------*/

#include ''stm32f10x.h''

#include ''stdio.h''

#include ''string.h''

/*----------------------------------------------*/

/*---------function prototypes------------------*/

void RCC_Configuration(void);

void GPIO_Configuration(void);

void NVIC_Configuration(void);

void USART_Configuration(void);

void ResetModule(void);

void USART_SendCommand(unsigned char *s);

/*------------------------------------------------*/

/*-------------global variables-------------------*/

unsigned char command[]=''AT\0\r\n'';

char response[50];

int res_index=0;

unsigned char r;

/*----------------------------------------------*/

/*----------RCC configurations------------------*/

void RCC_Configuration(void){

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

}

/*----------------------------------------------*/

/*----------GPIO configurations------------------*/

void GPIO_Configuration(void){

GPIO_InitTypeDef GPIO_InitStructure;

/* Configuring USART1_Tx as 'alternate function push-pull' */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configuring USART1_Rx as 'input floating' */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configuring USART3_Tx as 'alternate function push-pull' */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

/* Configuring USART3_Rx as 'input floating' */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB, &GPIO_InitStructure);

/* reset the module*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure );

}

/*----------------------------------------------*/

/*----------USART configurations----------------*/

void USART_Configuration(void){

USART_InitTypeDef USART_InitStructure;

USART_InitStructure.USART_BaudRate = 9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_Init(USART1, &USART_InitStructure);

USART_Cmd(USART1, ENABLE);

USART_Init(USART3, &USART_InitStructure);

USART_Cmd(USART3, ENABLE);

USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

}

/*----------------------------------------------*/

/*----------NVIC configurations-----------------*/

void NVIC_Configuration(void){

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

/*----------------------------------------------*/

/*----------RESET module-----------*/

void ResetModule(void){

long int n;

//reset 

GPIO_SetBits(GPIOB,GPIO_Pin_13);

for(n = 0;n < 10000000;n++); 

GPIO_ResetBits(GPIOB,GPIO_Pin_13);

for(n = 0;n < 30000000;n++);

//power

GPIO_SetBits(GPIOB,GPIO_Pin_12);

for(n = 0;n < 10000000;n++);

GPIO_ResetBits(GPIOB,GPIO_Pin_12);

}

/*----------------------------------------------*/

/*----------Main function-----------------------*/

int main(){

RCC_Configuration();

GPIO_Configuration();

USART_Configuration();

NVIC_Configuration();

ResetModule();

USART_SendCommand(command);

while(1){

}

}

/*----------------------------------------------*/

/*----------Send command------------------------*/

void USART_SendCommand(unsigned char *s)

{

while(*s)

{

//while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

//USART_SendData(USART1, *s);

while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);

USART_SendData(USART3, *s++);

}

}

/*----------------------------------------------*/

/*----------Receive character from USART3-------*/

void USART3_IRQHandler(void){ 

r=USART_ReceiveData(USART3);

response[res_index]=r;

res_index++;

}

/*----------------------------------------------*/

/*--------------------------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------------------*/

15 REPLIES 15
rasimoguzturk
Associate III
Posted on October 05, 2012 at 13:24

i think you mean that..not to send command in the code,send it from terminal.here is my code but the result is the same:(..

/*----------------------------------------------*/

/*----------------------------------------------*/

#include ''stm32f10x.h''

#include ''stdio.h''

#include ''string.h''

/*----------------------------------------------*/

/*---------function prototypes------------------*/

void RCC_Configuration(void);

void GPIO_Configuration(void);

void NVIC_Configuration(void);

void USART_Configuration(void);

void USART3_IRQHandler(void);

void USART1_IRQHandler(void);

void ResetModule(void);

/*-----------------------------------------------*/

/*-------------global variables------------------*/

unsigned char r;

unsigned char c;

/*----------------------------------------------*/

/*----------RCC configurations------------------*/

void RCC_Configuration(void){

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

}

/*----------------------------------------------*/

/*----------GPIO configurations-----------------*/

void GPIO_Configuration(void){

GPIO_InitTypeDef GPIO_InitStructure;

/* Configuring USART1_Tx as 'alternate function push-pull' */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

  

/* Configuring USART1_Rx as 'input floating' */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configuring USART3_Tx as 'alternate function push-pull' */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

  

/* Configuring USART3_Rx as 'input floating' */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB, &GPIO_InitStructure);

/* reset the module*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure );

}

/*----------------------------------------------*/

/*----------USART configurations----------------*/

void USART_Configuration(void){

USART_InitTypeDef USART_InitStructure;

USART_InitStructure.USART_BaudRate = 9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_Init(USART1, &USART_InitStructure);

USART_Cmd(USART1, ENABLE);

USART_Init(USART3, &USART_InitStructure);

USART_Cmd(USART3, ENABLE);

USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); //usart3 receive interrupt

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);// usart1 receive interrupt

}

/*----------------------------------------------*/

/*----------NVIC configurations-----------------*/

void NVIC_Configuration(void){

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //usart3 priority=0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; 

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //usart1 priority=1

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

/*----------------------------------------------*/

/*----------RESET module------------------------*/

void ResetModule(void){

long int n;

//reset 

GPIO_SetBits(GPIOB,GPIO_Pin_13);

for(n = 0;n < 10000000;n++);

GPIO_ResetBits(GPIOB,GPIO_Pin_13);

for(n = 0;n < 30000000;n++);

//power

GPIO_SetBits(GPIOB,GPIO_Pin_12);

for(n = 0;n < 10000000;n++);

GPIO_ResetBits(GPIOB,GPIO_Pin_12);

}

/*----------------------------------------------*/

/*----------Main function-----------------------*/

int main(){

  RCC_Configuration();

  GPIO_Configuration();

NVIC_Configuration();

ResetModule();

USART_Configuration();

  

while(1){

}

}

//usart1 receive character from terminal

void USART1_IRQHandler(void){

while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

c=USART_ReceiveData(USART1);

//send character to usart3 TX

while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);

USART_SendData(USART3, c);

}

/*----------------------------------------------*/

/*----------Receive character from USART3-------*/

void USART3_IRQHandler(void){ 

r=USART_ReceiveData(USART3); //receive character from usart3 RX

 

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //send to usart1 for display in terminal

USART_SendData(USART1, r);

}

/*----------------------------------------------*/

/*-----------------------------------------------------*/

/*-------------------------------------------------------------*/

/*------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------------------*/

Posted on October 05, 2012 at 18:02

Not the software.

You need to examine how you have the GSM module hooked up, and that it's powered up, or turned on, communicating with the SIM, etc. I would suggest you break a scope out and probe the critical pins.

If the module has an evaluation board connect that to a PC and test that.

Perhaps you can provide something like a schematic or circuit diagram?

Remember that the STM32 USARTs operate at CMOS levels, and NOT RS232 levels.
Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
rasimoguzturk
Associate III
Posted on October 06, 2012 at 10:27

i think connections are true,because i took GPS sentences and parsed them with same module and mechanism,now i  screw up GSM part and AT commands

Posted on October 07, 2012 at 17:37

i think connections are true,because i took GPS sentences and parsed them with same module and mechanism,now i  screw up GSM part and AT commands

Great, but no one here has any concrete information to work from

You need to provide much more specific detail of how you have this wired up.
Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
msamcaleb
Associate
Posted on December 13, 2012 at 08:50

rasimoguzturk
Associate III
Posted on December 14, 2012 at 19:17

hi chi,

try this command,i solved the problem now i am receiving response:

AT&k0E0+IPR=115200

115200 is here baud rate