12-STM32物聯(lián)網(wǎng)開發(fā)WIFI(ESP8266)+GPRS(Air202)系統(tǒng)方案升級(jí)篇(遠(yuǎn)程升級(jí)STM32程序,基于WIFI(AT指令TCP普通通信版),STM32主動(dòng)升級(jí)版)

https://www.cnblogs.com/yangfengwu/p/10875886.html


視頻教程

https://www.bilibili.com/video/av55154287

請(qǐng)先自行補(bǔ)充基礎(chǔ)內(nèi)容 ?

先看上一節(jié),上一節(jié)

https://www.cnblogs.com/yangfengwu/p/6921832.html

https://www.cnblogs.com/yangfengwu/category/1383497.html1-3節(jié)

?監(jiān)控了下數(shù)據(jù)





...........


\r\n\r\n+IPD,1440:



需要去掉這個(gè),,,,,,


問(wèn)題記錄,瘋狂打印起來(lái)...后來(lái)想到了原因,WIFI開啟了回顯模式..發(fā)給他什么,他就會(huì)回什么..所以關(guān)掉這個(gè)模式








一開始為測(cè)試其它問(wèn)題,把這個(gè)數(shù)組調(diào)節(jié)的比較大



?造成用戶程序運(yùn)行不起來(lái)....我親自對(duì)比了所有的下載的數(shù)據(jù),發(fā)現(xiàn)沒(méi)有錯(cuò)誤,后來(lái)一想應(yīng)該是這個(gè)的問(wèn)題.....

程序終于可以了.....


?這一節(jié)的功能和上一節(jié)一樣,就不再演示,主要說(shuō)幾個(gè)注意的地方

主要是更改了AT指令



所以發(fā)送數(shù)據(jù)的方式改變了,因?yàn)樾枰劝l(fā)指令,再發(fā)數(shù)據(jù)



?主要的地方是解析


void USART1_IRQHandler(void)? ? ? ? ? ? ? ? ? ? //′??ú1?D??·t??3ìDò

{

? ? u8 Res;

? ? if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

? ? {

? ? ? ? Res =USART_ReceiveData(USART1);? ? //?áè??óê?μ?μ?êy?Y


? ? ? ? if(Usart1ReadCnt < 399)

? ? ? ? {

? ? ? ? ? ? Usart1ReadBuff[Usart1ReadCnt] = Res;

? ? ? ? }

? ? ? ? else

? ? ? ? {

? ? ? ? ? ? Usart1ReadCnt=0;

? ? ? ? }

? ? ? ? Usart1ReadCnt ++;? ? //êy?Y??êy

? ? ? ? Usart1IdleCnt = 0;

? ? ? ? /*?óê??üD?3ìDò*/

? ? ? ? if(UpdateStartFlage == 1)

? ? ? ? {

? ? ? ? ? ? if(UpdateOverflow==0)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? //剔除 \r\n+IPD,X: 或 \r\n+IPD,XX: 或 \r\n+IPD,XXX:? 或 \r\n+IPD,XXXX:

? ? ? ? ? ? ? ? if(Res == 0x0D && !IPDFlage)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? IPDFlage = 1;

? ? ? ? ? ? ? ? ? IPDCnt=0;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? if(IPDFlage)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? IPDtemp[IPDCnt]=Res;

? ? ? ? ? ? ? ? ? ? IPDCnt++;

? ? ? ? ? ? ? ? ? ? if(IPDCnt==2 && Res != 0x0A)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? IPDFlage = 0;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else if(IPDCnt==3 && Res != '+')

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? IPDFlage = 0;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else if(IPDCnt==4 && Res != 'I')

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? IPDFlage = 0;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else if(IPDCnt==5 && Res != 'P')

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? IPDFlage = 0;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else if(IPDCnt==6 && Res != 'D')

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? IPDFlage = 0;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else if(IPDCnt==7 && Res != ',')

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? IPDFlage = 0;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else if(IPDCnt==8 && Res <'0' && Res >'9')//確定第一個(gè)是數(shù)字

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? IPDFlage = 0;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else if(IPDCnt>=9 && IPDCnt<=12)//數(shù)據(jù)最長(zhǎng)的也就是? \r\n+IPD,XXXX:

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? if(Res == ':')

? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? IPDFlage=0;

? ? ? ? ? ? ? ? ? ? ? ? ? ? IPDCnt=0;

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else if(IPDCnt>12)//Apache 最大發(fā)送的是1440 應(yīng)該進(jìn)不了這個(gè),

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? UpdateOverflow = 1;//如果進(jìn)入....就默認(rèn)數(shù)組溢出吧

? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? ? ? if(!IPDFlage && IPDCnt>0)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? if(PutData(IPDtemp,IPDCnt) == -1)

? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? UpdateOverflow = 1;

? ? ? ? ? ? ? ? ? ? ? ? }? ?

? ? ? ? ? ? ? ? ? ? ? ? IPDCnt=0;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? if(PutData(&Res,1) == -1)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? UpdateOverflow = 1;

? ? ? ? ? ? ? ? ? ? }? ?

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? else//?y3£êy?Y

? ? ? ? {

? ? ? ? ? ? //HTTP/1.1 200 OK

? ? ? ? ? ? //HTTP/1.1 400 Bad Request

? ? ? ? ? ? if(!Usart1ReadHttpHeadOK)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if(Res=='H' && Usart1ReadHttpHeadCnt==0)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='T' && Usart1ReadHttpHeadCnt==1)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='T' && Usart1ReadHttpHeadCnt==2)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='P' && Usart1ReadHttpHeadCnt==3)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='/' && Usart1ReadHttpHeadCnt==4)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='1' && Usart1ReadHttpHeadCnt==5)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='.' && Usart1ReadHttpHeadCnt==6)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='1' && Usart1ReadHttpHeadCnt==7)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==' ' && Usart1ReadHttpHeadCnt==8)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='2' && Usart1ReadHttpHeadCnt==9)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='0' && Usart1ReadHttpHeadCnt==10)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='0' && Usart1ReadHttpHeadCnt==11)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==' ' && Usart1ReadHttpHeadCnt==12)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='O' && Usart1ReadHttpHeadCnt==13)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='K' && Usart1ReadHttpHeadCnt==14){Usart1ReadHttpHeadOK = 1;Usart1ReadHttpHeadCnt=0;Usart1ReadHttpDataLength=0;}?

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? Usart1ReadHttpHeadCnt=0;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? //Content-Length: XXXXXXXX

? ? ? ? ? ? if(Usart1ReadHttpHeadOK && !Usart1ReadHttpDataLengthOK)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if(Res=='-' && Usart1ReadHttpHeadCnt==0)? ? Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='L' && Usart1ReadHttpHeadCnt==1)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='e' && Usart1ReadHttpHeadCnt==2)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='n' && Usart1ReadHttpHeadCnt==3)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='g' && Usart1ReadHttpHeadCnt==4)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='t' && Usart1ReadHttpHeadCnt==5)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='h' && Usart1ReadHttpHeadCnt==6)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==':' && Usart1ReadHttpHeadCnt==7)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==' ' && Usart1ReadHttpHeadCnt==8)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Usart1ReadHttpHeadCnt>=9 && Usart1ReadHttpHeadCnt<=16 )//êy?Y×?3¤99999999??×??ú,??′ó16?éμ÷???óê?×??ú??êy

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? if(Res!=0x0D)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? Usart1ReadHttpDataLength = Usart1ReadHttpDataLength*10 + Res - '0';

? ? ? ? ? ? ? ? ? ? ? ? Usart1ReadHttpHeadCnt++;


? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? Usart1ReadHttpDataLengthOK = 1;

? ? ? ? ? ? ? ? ? ? ? ? Usart1ReadHttpHeadCnt = 0;


? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? Usart1ReadHttpHeadCnt = 0;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? //0D 0A 0D 0A

? ? ? ? ? ? if(Usart1ReadHttpHeadOK && Usart1ReadHttpDataLengthOK && Usart1ReadHttpDataLength && !Usart1ReadHttpHeadEndOK)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if(Res==0x0D && Usart1ReadHttpHeadCnt==0)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==0x0A && Usart1ReadHttpHeadCnt==1)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==0x0D && Usart1ReadHttpHeadCnt==2)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==0x0A && Usart1ReadHttpHeadCnt==3){Usart1ReadHttpHeadEndOK = 1;}

? ? ? ? ? ? ? ? else Usart1ReadHttpHeadCnt = 0;

? ? ? ? ? ? }

? ? ? ? }


? ? ? ? if(Usart1ReadHttpHeadEndOK == 1)//?a??μ?httpí·êy?Yμ??22?

? ? ? ? {

? ? ? ? ? ? Usart1ReadHttpHeadEndOK=0;

? ? ? ? ? ? Usart1ReadHttpHeadCnt = 0;

? ? ? ? ? ? Usart1ReadHttpDataLengthOK=0;

? ? ? ? ? ? if(Status==2)//·¢?íμ?ê??ˉ?ê3ìDò

? ? ? ? ? ? {

? ? ? ? ? ? ? ? UpdateStartFlage = 1;//??′?μ?êy?YD′è?á′±í

? ? ? ? ? ? ? ? SysTickIdleTime = 2000;//空閑時(shí)間改為2S,,注意不要改到3S以上,因?yàn)閭鬏斖陻?shù)據(jù)http 大約3S后會(huì)自動(dòng)斷開,WIFI會(huì)發(fā)斷開信息,,,防止把信息寫入flash

? ? ? ? ? ? }

? ? ? ? }

? ? }

}


?操作和上一節(jié)一樣,不再做重復(fù)的工作





?由于我的底層方案比較完善,所以即使再怎么改也不會(huì)動(dòng)底層,其實(shí)所有的只是配合底層,所以無(wú)論怎么升級(jí),用什么升級(jí),只要配合底層寫連接,寫發(fā)送就好,

如果需要特定的解析,只需要在這里修改就好

學(xué)任何東西底子(基礎(chǔ))很重要,知識(shí)是用來(lái)靈活運(yùn)用的,前提是需要學(xué)透,否則只能是用,而不是靈活運(yùn)用





?有沒(méi)有理解到那句話: 爛程序員關(guān)心的是代碼,好程序員關(guān)心的是數(shù)據(jù)結(jié)構(gòu)和它們之間的關(guān)系


注意:自己寫的用戶程序里面別有printf("\r\n+IPD,XXX:") ? 因?yàn)檫h(yuǎn)程更新的時(shí)候會(huì)剔除掉....


這一節(jié)的程序其實(shí)也支持上一節(jié)透?jìng)鞯哪莻€(gè)AT模式,因?yàn)閷?shí)際上只是剔除\r\n+IPD,XXX: ?透?jìng)髂J较聸](méi)有這個(gè),現(xiàn)在的解析程序影響不到





https://www.cnblogs.com/yangfengwu/p/10888037.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慈格,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蚜枢,更是在濱河造成了極大的恐慌擂错,老刑警劉巖拣宰,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宇葱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡属铁,警方通過(guò)查閱死者的電腦和手機(jī)守呜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門型酥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人弛饭,你說(shuō)我怎么就攤上這事冕末。” “怎么了侣颂?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵档桃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我憔晒,道長(zhǎng)藻肄,這世上最難降的妖魔是什么蔑舞? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮嘹屯,結(jié)果婚禮上攻询,老公的妹妹穿的比我還像新娘。我一直安慰自己州弟,他們只是感情好钧栖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著婆翔,像睡著了一般拯杠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啃奴,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天潭陪,我揣著相機(jī)與錄音,去河邊找鬼最蕾。 笑死依溯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瘟则。 我是一名探鬼主播黎炉,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼壹粟!你這毒婦竟也來(lái)了拜隧?” 一聲冷哼從身側(cè)響起宿百,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤趁仙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后垦页,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雀费,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年痊焊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盏袄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡薄啥,死狀恐怖辕羽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垄惧,我是刑警寧澤刁愿,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站到逊,受9級(jí)特大地震影響铣口,放射性物質(zhì)發(fā)生泄漏滤钱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一脑题、第九天 我趴在偏房一處隱蔽的房頂上張望件缸。 院中可真熱鬧,春花似錦叔遂、人聲如沸他炊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)佑稠。三九已至,卻和暖如春旗芬,著一層夾襖步出監(jiān)牢的瞬間舌胶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工疮丛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幔嫂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓誊薄,卻偏偏與公主長(zhǎng)得像履恩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呢蔫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容