Ответ команды httpaction является значением мусора из модуля gsm - PullRequest
0 голосов
/ 14 сентября 2018

MCU USED: STM32F407VGT6СОВЕТ: STM32F4 DiscoveryIDE: TrueStudioДОПОЛНИТЕЛЬНО: CubeMxПериферийные: SIM800C GSM Module

H Я пытался связаться с веб-сайтом, используя мой stm32, и пришел к этой проблеме, для которой я не могу найти решение.Я могу отправить данные на веб-сервер, используя метод post.

Вот что я делаю:

Check Modem - AT - OK

Echo Off - ATE0 - OK 

Set Baud - AT+IPR=115200 - OK 

Check Sim - AT+CSMINS? - +CSMINS: 1,1 (if Sim present)

Check Network - AT+CREG?  - +CREG: 0,1 (if Network present)

Attach GPRS - AT+CGATT=1 - OK 

Set Content type - AT+SAPBR=3,1,"CONTYPE","GPRS" - OK

Set APN - AT+SAPBR=3,1,"APN","airtelgprs.com" - OK

Connect GPRS - AT+SAPBR=1,1 - OK

Initiate HTTP - AT+HTTPINIT - OK

Bearer Profile - AT+HTTPPARA="CID","1" - OK

URL - AT+HTTPPARA="URL","myurl.com"

Set Jason - AT+HTTPPARA="CONTENT","application/json" - OK

Place Data - AT+HTTPDATA=<data_len>,<time to input>
eg.  AT+HTTPDATA=124,20000 - wait for DOWNLOAD
Then place the data - OK

send using post - AT+HTTPACTION=1 - +HTTPACTION: 1,200,<response len> (if data sent perfectly)

De-init HTTP - AT+HTTPTERM - OK

GPRS OFF - AT+SAPBR=0,1 - OK

Проблема иногда возникает.Иногда, когда я отправляю данные с помощью команды AT+HTTPACTION=1, я вижу ответ в терминале (Tera Term в моем случае), но MCU пропускает его для чтения.Поэтому после дальнейшей отладки моего кода я обнаружил, что в этой конкретной команде (ответе) я получаю значения мусора в моем приемном буфере.Как я уже сказал, проблема не каждый раз, когда я отправляю данные.В большинстве случаев данные отправляются идеально.Может быть один из 5 или 10 раз, когда mcu получает значения мусора в этом ответе.

Вот код для получения данных:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == huart2.Instance)
    {
        if (GSM_Data >= 32 && GSM_Data < 127)
            GSM_Buffer[GSM_write_pos++] = GSM_Data;
        if (GSM_write_pos >= 255)   {Stablize_Buffer();}
        HAL_UART_Receive_IT(&huart2, (uint8_t*)&GSM_Data, 1);
    }
}

и вот как я отправляю AT+HTPACTION=1 команда:

Status Activate_Send_Method(void)
{
    Stablize_Buffer();
    int timeOut = 0;
    HAL_UART_Transmit(&huart2, (uint8_t*)"AT+HTTPACTION=1\r\n", strlen("AT+HTTPACTION=1\r\n"), 1000);
    HAL_UART_Receive_IT(&huart2, (uint8_t*)&GSM_Data, 1);
    HAL_Delay(100);

    if (strstr((char*)GSM_Buffer, "OK"))
    {
        Stablize_Buffer();
        while (timeOut < 1000)
        {
            HAL_UART_Receive_IT(&huart2, (uint8_t*)&GSM_Data, 1);
            timeOut++;
            if (strstr((char*)GSM_Buffer,"200"))    {Stablize_Buffer(); return OK;}
            if (strstr((char*)GSM_Buffer,"601"))    {Stablize_Buffer(); return ERR;}
            if (strstr((char*)GSM_Buffer,"604"))    {Stablize_Buffer(); return ERR;}
            if (strstr((char*)GSM_Buffer,"603"))    {Stablize_Buffer(); return ERR;}
            if (strstr((char*)GSM_Buffer,"500"))    {Stablize_Buffer(); return ERR;}
            HAL_Delay(86);
        }
    }
    Stablize_Buffer();
    return ERR;
}

Вот снимок экрана данных в отладке и терминале:

enter image description here

Другие мои командыуспешно прочитал.Только этот ответ имеет такую ​​ошибку.Это единственная причина, по которой я не могу понять, что мне делать.Это какая-то проблема с кодированием или схемой ??

Ответ является важным компонентом, поскольку он является единственным, который определяет погоду, когда мои данные отправляются или нет.Который также определит, что мне нужно отправлять эти данные снова или нет.

...