1367年十月二十一日,吳王朱元璋正式任命徐達為征虜大將軍、常遇春為副將軍率師二十五萬北取中原。北伐大軍的第一個目標直指駐守山東的元兵。就在徐達等出師后的第二天,吳王朱元璋向中原地區齊魯、河洛、燕薊、秦晉一帶的人民發布了北伐檄文,宣布他派兵北伐的目的在于“逐胡虜,除暴亂,使民皆得其所,雪中國之恥”。這篇檄文的發布,對徐達所率北征將士獲取中原地區士民更廣泛的理解和支持,減少其進軍的阻力,發揮了一定的積極作用。
(一)平息沂州之亂
吳元年十月二十四日,大將軍徐達率軍到達淮安,遂派使者持信前往山東沂州(今山東臨沂市),招降在山東頗具影響的王宣及其子王信所領導的元朝地方武裝。王信收到徐達的招降書后,于二十八日遣使前來請降。但王信父子并不是真心投降,他們表面上服從徐達調遣并派官員到徐達軍中犒勞將士,私下里卻秘密到莒縣、密州募兵,為抵御徐達做準備。十一月初十,王宣在所派犒軍官員回到沂州后,立即派兵乘夜襲擊徐達派駐沂州的將士徐唐臣等,徐唐臣乘亂逃回徐達軍營。徐達在得知王宣降而復叛的消息后,當即率軍直抵沂州城,扎營于北門外。起初,徐達仍想招降王宣,又派人前去勸說。王宣為了拖延時間,等待外出招募兵馬的兒子王信帶兵來援,仍故技重演,答應投降,卻仍是閉門拒戰。徐達大怒,指揮部隊猛攻沂州城,由于王信募兵未歸,王宣自知抵擋不住徐達的進攻,被迫在十二日向徐達投降,并交出了元朝廷授予的沂國公印等。隨后,徐達命令王宣修書一封,派部將前去招降其子王信。但王信拒不從命,并殺害了徐達派去的使者,與其兄王仁逃往山西。徐達因憤恨王宣的陰險狡詐、反復無常,且惱怒王宣之子殺害了其部將,于是下令處死了王宣。
(二)智取山東
徐達平息沂州之亂后不久,受其影響,元山東莒州、沂水、日照等地守將紛紛來降,并遵照吳王朱元璋的諭令命部將韓政扼守黃河要沖,以斷山東援兵。徐達親統大軍向益都(今山東益都市)方向推進。益都守將拒絕招降,徐達對部下說:“益都倚仗的是河上的援兵,現在我已派兵扼守黃河,斷絕了后路,他們還不知道自己已經成了甕中之鱉了。”于是下令填壩攻城。十一月二十九日,徐達攻陷益都,活捉了元益都守將。緊接著,徐達又乘勝出兵,連克壽光、臨淄、昌樂、高苑等縣及濰、膠、博興等州。此役,共計俘獲元軍將士一萬零五百余人,馬騾一千六百余匹,糧十八萬九千余石。十二月初六,大將軍徐達兵至章丘,元守將右丞王成投降。次日,抵達濟南,留守的元將舉城投降,收復濟南,俘虜元軍二千八百五十五人,馬四百二十九匹。隨后徐達率兵進攻山東半島,元軍駐守萊陽、登州、寧海(今山東煙臺市牟平區)的守將紛紛請降。在北伐軍的節節勝利聲中,朱元璋于1368年正月在應天登基稱帝,建國號為大明,建元洪武。徐達被封為中書右丞相、兼太子少傅。
洪武元年二月初四,元濱州守將來到濟南,投降徐達。次日,徐達派遣副將軍常遇春率兵自濟南攻取東昌(今山東聊城市),十二日,東昌被攻克,元守將自殺身亡,其所屬各縣全部投降。至此,山東全境基本平定。
自吳元年十一月至洪武元年三月,徐達所領導的北伐大軍經過約四個月的鏖戰,不僅基本上統一了山東,達到了明太祖朱元璋撤除元朝大都屏障的要求,而且俘虜和收編了大量元朝官兵,繳獲了大量物資。徐達在征戰過程中,不僅能夠充分利用手中的職權,妥善處理有關戰爭善后等問題,而且徐達行軍過程中,軍紀嚴明,對沿途百姓秋毫無犯,并從新收編的元軍將士中挑選精壯者從軍,在補充和擴大北伐隊伍的同時,也解除了后患。徐達的表現,充分展示了他的大將之才,也令坐鎮京師的明太祖大感寬慰,并對其愈加信任。
(三)揮師汴洛
洪武元年三月,徐達統率北伐大軍自山東鄆城出發,經水路逆黃河而上,進取河南汴梁(今河南開封市)。當月二十九日,徐達兵至汴梁陳橋。元汴梁守將李克彝聞訊十分震驚,立即將避難到此,并多次與徐達交鋒的左君弼召來商量對策。李克彝說:“將軍與南朝數次交戰,熟悉他們的陣法。今天我將兵權授予將軍,作為前鋒抵擋徐達,怎么樣?”左君弼一方面因為感激明太祖將被俘虜的年邁母親送回,心中早有降意;另一方面他經過與徐達幾番交鋒后,不僅對徐達心存畏怯,而且在失敗中發現徐達確實精于用兵之道,所以他回答李克彝道:“南朝軍鋒勢不可當,我一看到他們的陣勢就膽怯,所以才投奔到此地。而且南朝徐相國很善于用兵,一直所向無敵,我實不敢受命。”于是,李克彝被迫連夜逃往洛陽,左君弼等率部出城投降,徐達領兵入駐汴梁城。
洪武元年四月初四,徐達命都督僉事陳德駐守汴梁,自己親自統率步兵和騎兵直搗元河南行省省府所在地洛陽。四月初八,徐達率大軍通過虎牢關,還未抵洛陽城,即遭到元將脫因帖木兒領兵五萬,在洛水以北十五公里的地方列陣迎戰。徐達布陣完畢后,副將軍常遇春單騎突入敵陣,遭到敵人二十名騎兵持槊圍攻。常遇春沉著應戰,一箭射殺其前鋒,敵軍為之喪膽。徐達見狀后,指揮大軍趁勢出擊。正在這時,忽然南風驟起,戰場上塵土飛揚,呼喊廝殺聲驚天動地,迎風而戰的元軍陣腳大亂,倉皇敗逃。徐達率兵一路追殺,俘獲戰俘物資無數。脫因帖木兒逃往陜州。徐達旋即率兵進逼洛陽城,在北門外安營扎寨。由汴梁逃到洛陽的元將李克彝逃往陜西。元河南行省平章、梁王阿魯溫勢孤力單,被迫率領洛陽軍民出降,洛陽宣告平定。
在徐達的北伐大軍連克汴梁、洛陽兩大城池后,河南元軍已顯出土崩瓦解之勢。但是大將軍徐達并沒有因此濫用武力,反而采取了極大的克制態度。他派人招降河南各地的元軍殘部,盡可能避免使用武力,力求將戰爭給人民造成的損失降到最低點。在徐達的招撫政策下,元嵩縣、滎陽、登封、鞏縣(今河南鞏義市)、鈞州(今河南禹州市)、汝州等地守臣皆來歸附,而徐達也乘機派兵攻占了中原和西北地區之間的軍事要塞 潼關。
(四)攻克元都
徐達順利攻占汴梁和洛陽并扼守潼關要塞的消息傳到應天后,明太祖朱元璋決定親自北上,與大將軍徐達等會合,共同商議推翻元朝,占領元大都的部署。
洪武元年五月二十一日,明太祖御駕來到汴梁,并詔令改汴梁路為開封府。六月初一,軍務繁忙的大將軍徐達從洛陽趕赴開封,謁見明太祖。明太祖在對徐達一番稱頌和慰勞之后,轉入正題,對徐達說:“朕聞河朔之民,日夕望吾師至,將軍宜與諸將乘時進取而安緝之。朕觀天道人事,元都可不戰而克。大丈夫建功立業,各有其時。揆時之會,不失時機,在將軍等勉之。”明太祖的話正是勉勵徐達等抓住時機,率兵北進,推翻元朝統治,為國建功,為己立業。而徐達也早在心中謀劃過此事,因此,君臣二人不謀而合。于是,兩人開始仔細商討北取元都的具體計劃。明太祖朱元璋雖然認為徐達提出的從河南直取元都的建議不無可行性,但他還是堅持讓徐達按照自己擬定好的渡過黃河經冀南轉而東向,然后由齊魯北上進攻元都的想法進軍。
洪武元年閏七月初二,大將軍徐達從開封啟程,統率大軍北渡黃河,進取豫北州縣。沿途元朝守將大多棄城而逃,衛輝(今河南衛輝市)、彰德(今河南安陽市)等地劃歸明朝版圖。初七,徐達繼續統兵北上,進占河北磁州(今河北磁縣)。次日,師至邯鄲,元守將出逃,縣尹率百姓出降。十一日,徐達遵照明太祖的指令,率軍東向,進入山東臨清,并調派駐扎東昌(今山東聊城)的張興祖前來會師,共同北上。二十三日,在連克長蘆(今河北滄州市)、清州(今河北青縣)后,徐達兵至直沽(今天津市),繳獲元軍七艘海船,并聯結成浮橋,使北伐大軍順利渡過海河。經過幾天的激烈交戰,元大都外圍兵力已被清除,徐達率兵進駐通州城(今北京通州區),兵鋒直指元大都。元順帝得報后,大為恐慌,當晚帶領其后妃、太子等悄悄溜出京城,逃往上都(今內蒙古多倫市西北)。八月初二,徐達親率大軍輕取大都,俘獲元高官數十人,查封元朝府庫及各種圖籍寶物等,并嚴明軍紀,貼出安民告示,使得大都城內秩序井然,百姓交口稱贊,拍手稱快。至此,入主中原半個多世紀,由蒙古族建立起來的元朝政權正式宣告滅亡。八月十三日,徐達攻克元大都。推翻元朝政權的捷報傳到應天,群臣慶賀,明太祖詔令改大都為北平。至此,歷時近一年的北伐戰爭勝利結束。