可信的品牌網(wǎng)站建設(shè)病毒營銷案例
? ? ? ? 清晨一大早起來開始撰寫STM32 10個例程篇的第一章即串口IAP遠程升級,雖然網(wǎng)絡上有很多免費和付費的STM32教程,但是仍然不斷地說服自己沉住氣、靜下心寫一份獨一無二的,這份獨一無二中也凝聚了一名MCU工程師5年間不斷地項目迭代積累,這時突然想到FPGA特權(quán)同學書序言里面一句話:沒有人會記得你做過多少項目,但是一定會有人記得你寫過一本好書,這句話從側(cè)面說明了一個不爭的事實:有價值的教程和文檔確實太少了,所以可能一本好書或者一個博客能被人所傳頌吧!
? ? ? ? 關(guān)于IAP遠程升級筆者打算多寫幾篇博客,其本身確實是項目當中必備的一個開發(fā)要點,當我們的產(chǎn)品最后批量轉(zhuǎn)產(chǎn)封裝到密閉的容器或者結(jié)構(gòu)內(nèi),這時再想著去拆機用STLINK或者JLINK下載器更新程序是非常不現(xiàn)實的,那么自然而然地就需要PC端上位機通過RS232、LAN、USBTMC等接口把APP的BIN文件打包發(fā)送到下位機,下位機STM32在接收后再把二進制碼自己寫入對應的FLASH空間里實現(xiàn)不用下載器遠程升級程序的目標。
? ? ? ?這時可以假設(shè)一個真實的場景,比如大家去參加公司技術(shù)面試,面試官上來就拋出一個問題:在項目中用過IAP升級嗎,可以介紹介紹具體的實施細節(jié)嗎?
? ? ? ?也都是從學生時代過來筆者本科剛畢業(yè)只知道有串口這個名詞,碩士剛畢業(yè)知道有串口助手和波特率玩過STM32開發(fā)板demo,當然面試官問這個問題,心里自然有一個期待答案,那么嚴格要求的話,這道題回答知道波特率和串口助手只能得10分;
? ? ? ?如果有的朋友可能在校玩過原子或者野火的STM32開發(fā)板里面也有IAP升級demo,用心跑了一遍然后知道大概流程回答上位機整個BIN文件發(fā)送,下位機串口中斷接收環(huán)形隊列寫入那么這道題可得30分;
? ? ? ?但是市場上開發(fā)板demo和網(wǎng)絡上泛濫成災的demo改寫版顯然不是面試官最后期待的答案,如果實際工作過積累了兩年以上經(jīng)驗回答我們用Labview或者C#做了個上位機,按照每包1024字節(jié)或者512字節(jié)打包發(fā)送給下位機,下位機接到以后環(huán)形隊列寫入,加入了CRC校驗和上位機重發(fā)機制,那么考慮到了串口收發(fā)的不確定性重發(fā)機制的引入、上位機下位機聯(lián)調(diào)經(jīng)驗這題可得50分;
? ? ? ?如果工作真的實際用心做過IAP升級,回答采用了串口空閑中斷DMA收發(fā)減輕MCU負擔,寫入前APP后續(xù)FLASH扇區(qū)全部擦除,程序里加入了對HAL庫底層FLASH扇區(qū)刪除和寫入返回值等判斷等,數(shù)據(jù)收發(fā)CRC校驗錯誤,FLASH擦除寫入錯誤都會告訴上位機,上位機接到后會重新發(fā)包那么已經(jīng)非常接近完美了,這題可得90分;
? ? ? ?直到你告訴面試官產(chǎn)品外掛了一個Eeprom,用了Eeprom固定地址的一位作為APP和BOOT的標志位,產(chǎn)品上電跳入BOOT立刻讀出Eeprom固定地址的值,默認跳入APP,上位機有控件APP跳入和BOOT跳入,下位機對應寫入Eeprom不同的值后,再NVIC_SystemReset()軟件復位重啟,這題可以得100分如同教科書般的經(jīng)典回答;
? ? ? ?這時候如果再補充說明,為了節(jié)約物料沒有外掛Eeprom,而是把STM32內(nèi)部FLASH分成了BOOT、APP、存儲校準標志數(shù)據(jù)等,展開細節(jié)說明等,那么面試官真的是120分滿意了。
? ? ? ? 如圖1所示是筆者用Labview編寫的IAP升級助手,借助這個上位機可以實現(xiàn)任何MCU的IAP升級功能,并且可以實現(xiàn)BOOT和APP之間隨意跳轉(zhuǎn)。
? ? ? ?在第一章即串口IAP遠程升級中,筆者會把STM32CubeMX配置、串口DMA空閑中斷收發(fā)、CRC校驗裸機代碼結(jié)構(gòu)、HAL庫擦除寫入FLASH、上位機下位機聯(lián)調(diào)、BUS Hound抓包下位機聯(lián)調(diào)等詳細說明吧!
圖1 IAP升級助手上位機