1367年,朱元璋平定方国珍后,马上发兵讨伐陈友定。将军胡廷美、何文辉由江西直趋杉关,汤和、廖永忠由明州海路攻取福州,李文忠由浦城攻取建宁,而另派使者前往延平,招降陈友定。陈友定摆设酒宴,大会诸将及宾客,杀死明使者,将其血沥入酒坛,与众人酌饮。值酒酣之时,陈友定当众发誓说:“我们同受元朝厚恩,若有不以死拒敌者,将受磔刑,并杀其妻儿。”陈友定随即到福州巡视,环城而垒。距垒五十步外,筑成一台,严阵以待。不久,陈友定获悉杉关失陷,急忙将军队一分为二,命一军驻守福州,自率一军防守延平,互为犄角。当汤和等率水师抵达福州五虎门时,平章曲出引军迎战失败,明军沿南台纷纷登城而入。守将逃跑,参政尹克仁、宣政使朵耳麻拒降而死,佥院柏帖木儿在楼下堆积柴火,杀死妻妾及两个女儿之后,放火自焚而死。
胡廷美攻克建宁,汤和进攻延平。陈友定想要持久困守,诸将则请求出战,陈友定不同意。诸将仍不断地请求,陈友定怀疑部将要叛变,便处死萧院判,许多士兵因而出城投降。正巧军器局发生火灾,城中炮声震地,明军获悉城中有变,趁机发动猛烈进攻。陈友定向其部属诀别道:“大势已去,我只有以死报国,诸君继续努力啊。”然后退入省堂,整理衣冠,面向北面两拜之后,吞药自杀。所部将士争相打开城门接纳明军。明军入城之后,奔去看陈友定,发现他仍未断气,便将他抬出水东门,正巧遇上大雷雨,陈友定苏醒过来,然后被戴上械锁送往京城。陈友定入宫拜见,朱元璋指责他。陈友定厉声说道:“国破家亡,要杀就杀,不必多言。”朱元璋于是将他与其子陈海一起处死。
此时,中国北部,仍为元朝统治区。但情况复杂,在中央,最高统治集团内部矛盾重重,并日趋激化;在地方,军阀割据,火并不绝,争军权,夺地盘,内战不断。宫廷内阴谋政变频繁与军事将领公开内战形成配合,打得不可开交。朱元璋便乘机开展东征西讨,扩大地盘,增强实力。在解决南方之后,就部署全力北伐了。
对于北上作战的战略部署和进军路线,朱元璋作了审慎的筹划。他首先征求诸将的意见。常遇春提出长驱直入,直捣元朝大都(今北京)的主张。朱元璋不同意这个轻敌冒进的方案。他根据当时元朝在中原、西北的兵力部署以及各部之间的关系和各部内部的政治倾向、军事实力,认为元建都百年,城守必固,若悬师深入,不能即破,屯于坚城之下,粮饷不继,援兵四集,进不得战,退无所据,必然陷入被动之中。为此,他提出稳扎稳打,渐次推进的北伐战略:第一阶段,首先攻取山东,继而转攻河南,占据潼关;第二阶段,攻取河北及元朝大都,消灭元朝;第三阶段,主力由大都南下攻取山西,略定陕甘,完成北方之统一。北伐战争基本上是按照这一战略实施的。
1367年10月,朱元璋命中书右丞相徐达为征虏大将军、平章常遇春为副将军,率军25万,北进中原。北伐中发布《谕中原檄》,文告中提出“驱逐胡虏,恢复中华,立纲陈纪,救济斯民”的纲领,以此感召北方人民起来反元。
1368年(洪武元年),朱元璋于南京称帝,国号大明,年号洪武。大封诸将为公侯,部分追封为王。初封六公,其中以五大将、一大臣为开国元勋,分别为韩国公李善长、魏国公徐达、郑国公常遇春、曹国公李文忠、宋国公冯胜、卫国公邓愈。而后又追封胡大海为越国公、战死的丁德兴为济国公,汤和为信国公、冯国用为郢国公。次年,朱元璋于鸡鸣山立功臣庙,朱元璋亲定功臣位次,以徐达为首,次常遇春、李文忠、邓愈、汤和、沐英、胡大海、冯国用、赵德胜、耿再成、华高、丁德兴、俞通海、张德胜、吴良、吴桢、曹良臣、康茂才、吴复、茅成、孙兴祖凡二十一人。死者像祀,生者虚位。又以廖永安、俞通海、张德胜、桑世杰、耿再成、胡大海、丁德兴七人配享太庙。
为减少北伐阻力,争取人民拥护,出兵之前,朱元璋就特别告诫将士们,师到之处,切勿杀掠。从1367年10月明军主力由江淮北上,至1368年(洪武元年)2月,明军仅用四个多月的时间就攻下了山东。山东的攻克,使元廷失去了左臂,在战略上为北伐造就了更为有利的军事态势。三月,徐达挥军西向,分兵两路进攻河南。一路自济宁溯黄河而上,进攻汴梁(今河南开封);一路由河南永城、归德(今河南商丘)攻许州(今河南许昌)。同时命征南将军邓愈率襄阳、安陆、景陵等处兵马北攻南阳,策应北征主力作战。明军所向披靡,在很短的时间里相继攻克汴梁、洛阳以及嵩(今河南嵩县)、陕(今河南陕县)、陈(今河南淮阳)、汝(今河南临汝)诸州,并不战而据有潼关,基本上完成了北伐第一阶段的战略任务。
元朝大都之屏蔽已撤,外援隔绝,陷入了明军的弧形包围圈中。5月,朱元璋亲抵汴梁,听取前线将领的军事情况汇报,并讨论了下一阶段的战略步骤。根据当时元廷已陷入孤立无援的军事形势,徐达提出由临清(今属山东)直捣大都的主张,朱元璋表示同意。遂决定由征虏右副将军冯胜守汴梁,江西行省左丞何文辉守河南(今河南洛阳),镇国将军郭兴等人镇守潼关,徐达率大军直取大都。
闰七月初一,明军主力自中滦(今河南封丘西南)渡黄河,沿御河(今卫河),经临清、长芦(今河北景县)、通州(今北京通县),向北挺进。一路势如破竹,锐不可当,直逼大都城下。元顺帝见大势已去,遂于二十八日夜三鼓携太子、后妃出建德门,由居庸关逃往上都开平(今内蒙古自治巳多伦西北)。八月二日,徐达率军进占大都,从根本上结束了元朝的统治。
攻克大都之后,北方之山东、河南、河北等地尽入明军之手,尤其是元主北逃,使整个北伐战场发生了根本性变化,困据秦晋的元地主武装集团,完全陷入了群龙无首的境地。朱元璋得到徐达大军攻下大都的消息以后,不失时机地命其转入下一个战略阶段。
八月十五日,朱元璋命都督副使孙兴祖、都督佥事华云龙留守北平府(今北京),徐达、常遇春挥师西向,攻取山西。同时,命冯胜、偏将军汤和由河南渡河向北,以策应攻晋主力。经过近五个月的艰苦作战,明军于洪武二年(1369)正月攻克大同,进而平定山西。这时盘踞在陕甘方面的尚有李思齐、张思道等十余万人。徐达平定山西以后,迅即转攻陕甘,以求彻底完成此次北伐战略任务。自二月徐达派常遇春、冯胜渡河趋陕,至十二月明军击溃扩廓帖木儿反攻兰州之军,历时10个月。明军相继攻克奉元路(明朝改为西安府,即今陕西西安)、凤翔、兰州、临洮、庆阳等重镇,基本上消灭了这一地区元军势力。至此,朱元璋北伐灭元之战宣告结束,中国再次回归到稳定的王朝的统治之下,同时丢失四百年的燕云十六州也被收回。