cancel
Showing results for 
Search instead for 
Did you mean: 

stm32VL UART problem

marwen_azouzi
Associate II
Posted on May 03, 2012 at 03:14

Hi

i have to communicate with modem using uart via AT command

my pb is when i send the first command and receive the reponse i can't send the next AT using uart

i can post my code if any one can help me 

#uart #adc-stm32-discovery
11 REPLIES 11
rasimoguzturk
Associate III
Posted on October 04, 2012 at 13:51

hi,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++;

}

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

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

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

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

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

Posted on October 04, 2012 at 15:57

The Slash Zero '\0' seems out of place, why would you put a NUL there?

The modem will often echo, turning it off requires ATE0
Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..