2013-12-16 06:12 AM
I have to send a sms with sim900 form my stm32f107 board. I wrote this code, but it does not work. I can't understand why.
/* Includes */#include ''stm32f10x.h''#include ''stm32f10x_gpio.h''#include ''misc.h''#define CR 13#define LF 10void RCC_Configuration(void);void GPIO_Configuration(void);void NVIC_Configuration(void);void sendMessage(char header[23], char message[150]);void Delay(__IO uint32_t nCount);int main(void){ char SendMessageTO[23] = ''AT+CMGS=�?+3473802890�?''; char SendMessageMESSAGE[150] = '' THIS IS A SAMPLE MESSAGE ''; USART_InitTypeDef USART_InitStructure; /* System Clocks Configuration */ RCC_Configuration(); /* NVIC configuration */ //NVIC_Configuration(); /* Configure the GPIO ports */ GPIO_Configuration(); /* USARTx configuration ------------------------------------------------------*/ /* USARTx configured as follow: - BaudRate = 9600 baud - Word Length = 8 Bits - Two Stop Bit - Odd parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ 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_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init( USART1,&USART_InitStructure); sendMessage(SendMessageTO, SendMessageMESSAGE); while(1) { }}void RCC_Configuration(void){ /* Enable GPIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* Enable USART2 Clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);}void GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; /* Configure USART1 Rx as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStructure); /* Configure 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);}void sendMessage(char header[23], char message[150]){ int ctr; for (ctr=0;ctr<23;ctr++) { USART_SendData(USART1,(int)header[ctr] ); Delay(10); } USART_SendData(USART1,CR); Delay(10); USART_SendData(USART1,LF); Delay(10); Delay(1000); for (ctr=0;ctr<150;ctr++) { USART_SendData(USART1,(int) message[ctr] ); } USART_SendData(USART1,CR); USART_SendData(USART1,LF);}void Delay(__IO uint32_t nCount) //in millisecond{ nCount = nCount * 5940 *2;//381; while(nCount--) { }}void NVIC_Configuration(void){ NVIC_InitTypeDef NVIC_InitStructure;#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);#else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);#endif /* Enable the TIM2 global Interrupt */ //NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);}2013-12-18 08:06 AM
Hi
''I think I am talking with the modem, but his response is not what I expect. Not OK or ERROR but some rubbish char. What's going wrong?'' You are trying to debug 2 things at once here. Make life easier for yourself - debug one at a time. Debug the modem first : Connect the modem up to your PC, use hyperterminal (or TeraTerm or what ever terminal program you are familiar with). Try typing in the AT commands that you are sending in your program. You can then check the responses on the terminal program. This will help you understand the SIM900 commands and responses and verify it is working. Once you know the modem is working - debug the STM32 app you are working on. Connect the STM32 to the PC - check it is sending what you think it should be sending.