Ответ команды 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;
}
Вот снимок экрана данных в отладке и терминале:
Мои другие команды успешно прочитаны. Только этот ответ имеет такую ошибку. Это единственная причина, по которой я не могу понять, что мне делать. Это какая-то проблема с кодированием или схемой.?
Ответ является важным компонентом, поскольку он определяет, будут ли отправлены мои данные или нет. Который будет далее определять, что мне нужно отправить эти данные снова или нет.