Ответ команды httpaction является значением мусора из модуля gsm

MCU USED: STM32F407VGT6
СОВЕТ: STM32F4 Discovery
IDE: TrueStudio
ДОПОЛНИТЕЛЬНО: CubeMx
PERIPHERAL: 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;
}

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

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

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

0 ответов

Другие вопросы по тегам