朱元璋的侄子朱文正率領將士堅守八十五天。至正二十三年(公元1363年)七月,朱元璋統兵二十萬,進發洪都,陳友諒獲悉後,撤出圍軍,迎戰朱元璋,雙方在鄱陽湖展開決戰。
鄱陽湖水戰,從八月二十九日開始,至十月三日結束,進行了三十六天。朱元璋的軍隊充分發揮小船靈活的長處,火攻****,最終取勝,陳友諒被亂箭射死。
1364年元旦,朱元璋稱吳王,建百官司屬,仍以龍鳳紀年,以“皇帝聖旨,吳王令旨”的名義發布命令。因1363年張士誠早已自立為吳王,故曆史上稱張士誠為東吳,朱元璋為西吳。
至正二十四年三月,朱元璋再次到武昌督兵攻城,陳理最終出城投降。在吞並了陳友諒後,朱元璋的下一個目標就是張士誠。
張士誠是泰州(今屬江蘇大半)人,早年販賣私鹽為業。元末發動鹽徒起義,於1354年在高郵稱誠王,建國號為周,建元天。1356年,建都平江(今蘇州)。消滅陳友諒父子後,朱元璋於至正二十五年十月進攻張士誠,一舉攻下通州、興化、鹽城、泰州、高郵、淮安、徐州、宿州、安豐諸州縣,將東吳的勢力趕出江北地區。
至正二十六年五月,朱元璋發表檄文聲討張士誠。檄文列舉了張士誠八大罪狀,除了第四款和第八款與西吳有關外,其餘的全都是指責張士誠背叛元朝。不看開頭和結尾,非常容易使人誤以為是元朝的討伐令。這表明朱元璋已經以順承天命的王自居,準備繼承王朝的正統。
朱元璋的軍隊攻勢迅猛,至正二十六年十一月,杭州、湖州先後投降,平江成為孤城。於是朱元璋以重兵包圍平江,發動平江戰役。
在圍城的同時,朱元璋派廖永忠去滁州接小明王韓林兒到應天來,但在瓜州渡江時悄悄將船底鑿漏,小明王沉於江底。接著,朱元璋宣布不再以龍鳳紀年,稱1367年為吳元年。平江戰役開始時,朱元璋築牆圍城,並造有三層的木塔樓,高過城牆,以弓弩、火銃向城內射擊,還設襄陽炮日夜轟擊。城內一片恐慌,張士誠幾次突圍都以失敗告終。張士誠反複無常,貪圖享受,對部下也十分放縱。平江被圍困的最後一天,張士誠弟弟張士信在城頭督戰,仍不忘享樂,坐在銀椅上飲酒,左右侍奉的人遞桃子給他,結果桃子還沒到口,恰好一炮打來,腦袋被打得粉碎。朱元璋曾多次派人勸降,都被張士誠拒絕。張士誠死守平江,糧盡後,便以老鼠、枯草為食;箭盡了,便以屋瓦為彈。
直至正二十七年(公元1367年)九月初八,朱元璋率軍攻入平江城,張士誠則展開巷戰相抵抗。最後,張士誠被俘,解往應天。朱元璋問話,他不搭理;李善長問他,他則破口謾罵。朱元璋氣極,命手下衛士以亂棍打死張士誠,連屍骨都燒成灰。當時張士誠47歲,東吳滅亡。
消滅東吳張士誠後,朱元璋大體上占據了今天的湖北、湖南、河南東部、江西、安徽、江蘇和浙江,這些是全國最富庶、人口最稠密的地區。因此,進行大規模南征北伐的時機成熟了。
當時南方的形勢是方國珍占據浙東、陳友定據有福建、明玉珍控製著四川,廣東和廣西則仍處在元朝統治中。在平江戰役快結束之時,朱元璋已派參政朱亮祖率兵進攻方國珍,然後又命湯和為征南將軍,從寧波進攻方國珍,方國珍於至正二十七年(公元1367年)十二月歸降。與此同時,朱元璋與劉基細細商定了北伐計劃。此時常遇春提議:直取大都,以其精兵消滅元朝的疲卒,占領大都後,分兵出擊,則大功告成。為此,朱元璋不讚成,他認為大都是元朝經營了上百年的都城,防禦工事堅固,孤軍深入進攻,太過危險,應先取山東,再占河南,折攻潼關,取得東西南三方麵的軍事要點,然後再攻取大都,必將成功。諸將對此表示讚同。