ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
1271508 Топик полностью
IBAH (28.12.2022 17:57, просмотров: 274) ответил Лaгyнoв на не так всё просто с CRLF в реальной жизни. Вот типовой набор команд отправки письма с вложением. После команды AT+SMTPSEND почти мгновенно получаешь ОК и CRLF. И только секунд через 10 - +SMTRFT:1,1360 и CRLF . И только ПОСЛЕ этого можешь давать команду AT+SMTPFT=100. Там та же картина. Надо дождаться осмысленного выполнения команды. Вплоть до получения +SMTPSEND: 1. Везде задержки до 10 секунд. Любые попытки не дождаться правильного ответа - ERROR.
у меня рядышком функция для двухстрочных команд, таймаут можно поставить хоть 100500 секунд. Я выше написал, над этим автоматом еще автомат который "дождаться осмысленного выполнения команды". Типа так 

if(SostTransmitGSM==30)

{//проверяем регистрацию AT+CREG?

if(SostGetAT==GetATSostReady && TimerTON(&TimZadGSM))

{//отправка команды AT+CREG

#if OTLADKA!=0

putstrfifo0("Сеанс связи. Проверка регистрации в сети. Попытка ");

PutDecuFifo0(ChZapros);putstrfifo0("\r\n");

#endif

putstrfifo2("AT+CREG?\r");

StartGetATKomand();

}

if(SostGetAT==GetATSostBusy)

{//выполнение команды

Get2ATKomand(stroka1,stroka2,TimoutModemCREG);

}

if(SostGetAT==GetATSostError)

{//ошибка

ChZapros++;

if(ChZapros>=KolvoPovtorCREG)

{//ошибка модема

#if OTLADKA!=0

putstrfifo0("Сеанс связи. Нет ответа на AT+CREG\r\n");

#endif

SostTransmitGSM=250;

GlobalD.FlagiErrorGSM|=(1<<NoResponsCREG);

}

SostGetAT=GetATSostReady;

}

if(SostGetAT==GetATSostComplit)

{//команда выполнена

SostGetAT=GetATSostReady;

#if OTLADKA!=0

putstrfifo0("Сеанс связи. Ответ на AT+CREG <");

PutStrFifoM0(stroka1);putstrfifo0(">\r\n");

putstrfifo0("Сеанс связи. Ответ на AT+CREG <");

PutStrFifoM0(stroka2);putstrfifo0(">\r\n");

#endif

if(SravStrok(stroka1,strCREG,20))

{

#if OTLADKA!=0

putstrfifo0("Сеанс связи. Ответ на AT+CREG. Ништяк!\r\n");

#endif

SostTransmitGSM=40;

TimerTONStart(&TimZadGSM,TimoutModemCGATT);

ChZapros=0;//счетчик повторов

}

else

{

#if OTLADKA!=0

putstrfifo0("Сеанс связи. Ответ на AT+CREG. Косяк!\r\n");

#endif

TimerTONStart(&TimZadGSM,TimoutModemCREG);

ChZapros++;// счетчик запросов

if(ChZapros>=KolvoPovtorCREG)

{

SostTransmitGSM=250;

GlobalD.FlagiErrorGSM|=(1<<NoResponsCREG);//Установить флаг ошибки

}

}

}

}