接著徐達與常遇春會師,平定河南。明太祖聽說後,親自來到汴梁。徐達與常遇春等人覲見,太祖慰勞一番之後,開始商議攻取元都的計劃。徐達道:“臣一路攻過來,見擴廓鐵木兒觀望不前,張良弼、李思齊等人毫無謀略,想必元都已經沒有援兵了。如果現在進兵,必克無疑!”太祖指著地圖提醒他:“你說得不錯,但北方土地平曠,作戰以騎兵為主。現在應該先選驍勇善戰的騎兵作為先鋒。將軍率水陸兩軍作為後應,帶著山東的糧草補給糧餉,直搗元都,到那時都城就可以不戰而降了。”接著又對馮勝說:“你發兵進攻潼關,潼關得手後,派些人留守在那裏。你馬上轉回汴梁,接應大將軍,不得有誤!”徐達與馮勝領命而出。馮勝即日出師,直攻潼關。此時,元將李思齊、張良弼都已經帶兵逃到關外。馮勝派人偷偷溜到張良弼的營前,放了一把火,整個軍營火光四起。張良弼從夢中驚醒,以為是敵人來偷襲,當即披甲上馬,出營迎戰。誰知殺了一場,發現都是自己的人馬,連忙收兵,退入關內。李思齊聽到這消息,也驚慌起來,馬上移軍葫蘆灘。兩軍還沒有紮營,馮勝已經率兵殺來,奪下了潼關。李思齊逃到鳳翔,張良弼逃到鄜城。馮勝入關後,命指揮使於光、金興旺等人留守,自己帶兵返回汴梁。
太祖聽說潼關這邊得手,北伐軍已經沒有後顧之憂,就回到應天。命徐達等人進攻元都,並告誡他們不要大開殺戒。徐達進兵通州,在河東岸紮營。常遇春在河西岸紮營。諸將都想趁著銳氣攻城。指揮郭英說:“我軍遠道而來,敵軍居守城內,一勞一逸,不宜急攻。”第二天清晨,天降大霧。郭英命一千士兵埋伏在道旁,自己帶著三千精兵,直達城下。元知樞密院事卜顏鐵木兒率一萬多名勇士,分兩路攻出。郭英假裝敗退。卜顏鐵木兒率兵去追,中途遇到埋伏,隊伍被衝成兩截。郭英又轉身殺回來,卜顏鐵木兒猝不及防,被郭英刺落馬下,接著被綁走了。元軍沒了主帥,頓時潰散四逃。郭英乘勝追擊,又殺了幾千人。等到收兵回來,統帥徐達已經引兵入城,卜顏鐵木兒被斬首示眾。休息數天之後,徐達準備攻打元都。不料元順帝已經逃走,元都隻剩淮王鐵木兒不花以及左丞相慶童等人。