四月初八,王保保為了打破僵局,暗中派兵一千餘名,從小路繞到徐達陣後,出其不意地向徐達部署在陣東南的兵營發動突然襲擊。東南營官兵既疏於防範,又沒有充分的思想準備,因此麵對突如其來的敵人,頓時驚慌失措,亂成一團,主將左丞胡德濟倉促之中更是不知如何進退。幸虧徐達在得報後親自率兵趕來,殺退了來犯之敵,才不致釀成大禍。為了嚴肅軍紀,徐達下令斬殺東南營指揮及將校數人示眾,其餘官兵均不敢有半點疏忽怠慢。第二天,徐達整兵再戰,他身先士卒,在主帥徐達的帶動下,明朝官兵無不爭先恐後,奮勇衝殺,以一當十,衝進敵陣,大敗王保保,俘獲王保保將校士卒八萬餘名,繳獲馬匹一萬五千餘匹及大批駱駝、驢騾等牲畜。王保保僅帶著妻子、兒子等數人倉皇北逃,在黃河中抱住河麵上順流漂浮的樹木,勉強泅水渡過黃河,經寧夏直奔和林而去。
(二)解圍興元城,晉封魏國公
五月初一,徐達統領大軍離開定西,向陝南進發,準備奪取尚在北元兵控製之下的興元路(今陝西漢中市)。兵抵徽州(今甘肅徽縣)後,徐達與都督馮勝、參政傅友德、左丞李思齊等一道,率領大隊人馬南下,直逼略陽(今陝西略陽縣),生擒元略陽守臣。接著,徐達等又轉出東南,占領了沔州(今陝西勉縣),準備由此東攻興元。與此同時,鳳翔守將金興旺則奉徐達之命迅速率部前往鳳縣,自北向南,通過天險連雲棧,直趨興元,以配合大軍的行動。五月二十三日,元興元守將在大軍壓境的形勢下,被迫出城投降。徐達後命金興旺等留守興元,自己隨即回師西安。
徐達在統兵離開定西,進取興元的同時,又利用其軍隊大敗王保保的聲威,派遣部將鄧愈率部前往吐蕃,加強了與吐蕃的聯係。
洪武三年七月三十日,曾向明朝稱臣的四川夏政權在將軍吳友仁的統領下北侵陝西興元,奉徐達之命留守該城的將領金興旺派兵出擊,打退了敵人的進攻。第二天,吳友仁又率兵來攻,金興旺親自帶兵出城迎戰。激戰中,金興旺的麵部不幸被亂箭射中,流血不止,疼痛異常,但他毫不畏懼,拔出箭頭後,繼續堅持戰鬥。在他的帶動和鼓舞下,明朝官兵奮勇殺敵,殲敵數百人。由於考慮到自己的守城官兵總共隻有三千人,而吳友仁的軍隊多達三萬人,繼續硬拚下去於己無利,金興旺一麵下令收兵入城,保存實力,與敵人展開持久戰,一麵立即派人從小路趕赴寶雞,求取援兵。正在西安休整的大將軍徐達在得知興元告急的消息後,親自率軍還駐益門鎮(今陝西寶雞市南),命令傅友德先率兵一千沿褒水南下,夜襲木槽關,進攻鬥山寨。在奪取鬥山寨後,傅友德又遵照徐達的吩咐,下令軍中“人持十炬燃於山上”。圍攻興元城的吳友仁見到西北方上忽然升起的上萬支火炬,以為明朝增援大軍已經趕到,大驚失色,當晚就乘黑拔營,倉皇逃跑。興元之圍得以解除。
在徐達的西路軍順利擊敗王保保,並順勢招撫沿途吐蕃各部,解除興元之圍的同時,左副將軍李文忠指揮的東路軍也於洪武三年五月十六日順利攻克應昌,抓獲元順帝嫡孫及其後妃、宮人並北元諸王和貴族數千人,並繳獲宋、元兩朝玉璽及大批珍貴的珠寶玉器,加上大批的駱駝、馬匹、牛羊等牲口,東路軍也獲得了全勝。
洪武三年十月初六,明太祖下令征虜大將軍徐達、左副將軍李文忠等班師。同年十一月,徐達等班師回朝,朱元璋親自到龍江迎接北伐將士。隨後,大封功臣,徐達因功授開國輔運推誠宣力武臣,特晉光祿大夫、左柱國、太傅、中書右丞相參軍國事,封魏國公,歲祿五千石,子孫世襲。
(三)首鎮北塞,再討北元