徐達在車道峴大敗王保保,李文忠於應昌掃蕩故元巢穴,沉重打擊了元朝殘餘勢力。但是,元順帝之子愛猷識理答剌逃離應昌後,又在和林即帝位,其部下的殘餘兵力依然不可小覷。他們隨時有可能重整旗鼓,縱兵南下掠奪。而明朝政府統一北方後,部署在北部邊沿地區的駐防官兵及防禦體係還非常脆弱,非常需要一個有膽有識、有勇有謀的人前去鎮守。徐達再次成為明太祖的最佳人選。
洪武四年(1371年)正月初三,在徐達第一次北征回京後不到兩個月,明太祖為了加強北部邊防,命中書右丞相魏國公徐達前往北平負責操練軍馬,修繕城池,鎮守北平。半年多後,再次被派轉鎮山西。同年十二月,徐達自山西回到京城。
徐達在鎮守北平期間,先後三次遷徙山西、河北等地農民到北平屯田種地,以加強北平的防禦力量。徐達將他們分散到長城沿線各衛所,按其戶籍服役課稅。屬籍軍戶的,發給衣服、糧食,使應軍差;屬籍民戶的,分給田地、牛、種子,使納租稅。前後移民三萬五千多戶,十九萬餘人,建立屯田點二百五十餘個,墾田一千三百多頃。徐達的這些措施大大減輕了北方軍隊的糧餉供應問題,使明朝北部邊疆日趨穩定。同時,徐達嚴格訓練士卒,修繕城池,加強守備,謹嚴烽燧,時時防備元朝殘餘軍隊的侵擾。徐達因此被明太祖視為“塞上長城”。
王保保逃到和林後,重被元順帝之子愛猷識理答剌委以重任,王保保的權勢又日漸膨脹。明朝君臣對此極為關注,擔心王保保卷土重來,為害大明北部邊境。洪武五年正月十七日,明太祖召見魏國公徐達、曹國公李文忠、宋國公馮勝,分別賞賜交趾弓、彤弓,並對他們說:“古者諸侯有四夷之功,則賜之弓矢……”徐達等知道明太祖心中不忘北元,估計朝廷會再度興師北征。雖然他們對朝廷連年征戰有不同意見,但在正月二十二日明太祖召集諸將商討邊境事宜的時候,中書省右丞相、魏國公徐達還是主動請纓,說:“今天下大定,庶民已安,北虜歸附者相繼,唯王保保出沒邊境,今複遁居和林,臣願鼓率將士以剿絕之。”但這時,老謀深算的朱元璋並沒有急於說出自己的想法,他為了了解將軍們的態度,故意說:“彼朔漠一窮寇耳,終當絕滅,但今敗亡之眾,遠處絕漠,以死自衛,困獸猶鬥,況窮寇乎?姑置之。”這時,在場的將軍們紛紛表示:“王保保狡猾奸詐,使其在,終必為寇,不如取之,永清沙漠。”明太祖見眾將領都讚成出兵,便趁機問道:“卿等必欲征之,需兵幾何?”徐達自信地回答:“得兵十萬足矣。”明太祖認為兵分三路同時出擊,十萬兵力不夠,於是他以不容置疑的口氣道出了自己胸中的計劃,說:“兵需十五萬,分三道以進。”隨即,明太祖仿效洪武三年北征殘元時的辦法,任命徐達為征虜大將軍,總帥由左副將軍李文忠負責的東路軍、征西將軍馮勝負責的西路軍以及由徐達親自統領的中路軍三路兵馬,中、東、西三路,各為五萬兵馬。
在三路北征官兵中,以徐達親自指揮的中路軍進軍最為迅速。二月二十九日,大將軍徐達率部進入山西。隨即,都督藍玉奉命為先鋒,率兵馬先出雁門關。藍玉兵至野馬川時,遇到了一股北元遊騎,北元兵不戰而逃。藍玉率部追至亂山,敵軍返身迎戰,結果被藍玉打得大敗。三月二十日,徐達率軍至土剌河一帶,與王保保發生遭遇戰,藍玉等勇往直前,再敗王保保軍。擴廓敗逃後,與賀宗哲部合為一軍,在嶺北布下陣勢阻擊徐達部隊。五月初六,徐達統兵進至嶺北,與北元軍隊對壘。由於明朝官兵連續作戰,得不到休整,將士深感疲憊,加之徐達所率的中路軍自出征以來連戰告捷,進軍頗為順利,軍隊中產生了驕傲輕敵情緒,而王保保、賀聯軍拚死進攻,明軍受挫,死傷數萬人。幸虧徐達處變不驚,收縮戰線,堅守營壘,才免遭大敗。然後,徐達整軍而還,斂兵守塞。王保保軍隊見此未敢貿然追擊。中路軍剛敗,東路軍在李文忠率領下長驅直入,王保保在阿魯渾河(今鄂爾渾河)、稱海(和林偏北)布置兩道防線層層防禦。李文忠率部苦戰,損失慘重,宣寧侯曹良臣、驍騎左衛指揮使周顯、振武衛指揮同知常榮、神策衛指揮使張耀等高級將領戰死,無奈之下,也撤兵南返。三路大軍之中,隻有馮勝所率西路軍完成了作戰任務,在西涼州(今甘肅武威)、永昌(今甘肅永昌)、掃林山(今甘肅省肅北縣境)、瓜州(今甘肅安西)、沙州(今甘肅敦煌)擊敗北元軍,占領甘州(今甘肅張掖)和亦集乃路。這一次北伐,收獲遠少於損失,明太祖朱元璋不得不承認失敗。同年十月,征西將軍馮勝等因北方天氣日漸寒冷,先從甘肅班師回到了京城。十一月,征虜大將軍徐達、左副將軍李文忠也因塞上苦寒,撤駐山西、北平等近邊地區休整後,也奉詔回到了京師。