第二次北征失败后,明朝改变了作战战略,由主动进攻改为积极防御,但防御不代表被动挨打。朱元璋通过这次战役认识到,要想一鼓作气灭掉北元暂时是不可能的,于是朱元璋又回到了惯用的迂回战略上。自从元昭宗打赢了这一仗后着实有点飘了,接连整合云南、辽东各方势力,定下了“三年训练,五年反攻”的计划,以求打回中原去过年,将元顺帝重新迎进大都太庙。基于此朱元璋认识到必须要切断北元与各方势力的联系,各个击破,才能取得最终胜利。北元军队为什么不断南下,道理很简单,草原物资少,不到明朝边界抢点东西根本养不活那么多人,别看元昭宗整天叫嚣要反攻中原,但在明军严密防守下平时能抢点东西就谢天谢地了。于是朱元璋采取了第一步,坚壁清野,将边地地区的居民内迁,没人了看蒙古骑兵还能抢到啥。
但边民都内迁以后,出现了新问题,边地地区的土地就这么白白浪费了吗,于是乎朱元璋走出第二步,在边地地区强化卫所制度,并让卫所的兵士在当地屯田,平时种地,有战事的时候就出战,寓兵于农、兵农合一,所以后来朱元璋得意地说自己养兵百万不费百姓一粒米。稳固边地以后,朱元璋又开始军事、政治、外交等手段并用,意图瓦解北元政府。洪武十三年(公元1380年)二月、洪武十四年(公元1381年)正月、洪武二十年(公元1387年)正月,朱元璋先后组织第三、第四、第五次北征,不过这几次作战不再是直扑北元中央政府,转而蚕食北元军事要地,招降北元军政大员,不断消耗北元有生力量。特别是第五次北征,盘踞在辽东近二十年的北元重臣纳哈出在明朝的恩威并施下出降,北元一下子损失了二十万大军,加上此前洪武十五年(公元1382年)明朝已经平定云南,北元朝廷左膀右臂被切断,使得形势发生了巨大变化。
朱元璋决定趁热打铁,认为“肃清沙漠,在此一举”。洪武二十年(公元1387年)朱元璋以蓝玉为征虏大将军(主帅),发动规模浩大的第六次北征。当时元昭宗已经病逝,他的弟弟(也有说是儿子)继位为帝,是为天元帝。天元帝觉得明军前不久才与纳哈出作战,粮草匮乏,不会深入北方再战,因此没有作迎敌的准备,只是将自己的老营远远迁到捕鱼儿海(今贝尔湖)之畔,每天吃好喝好,想等明军师老兵疲后主动退兵。应该说天元帝想得很好,但他忘了他的对手是蓝玉,洪武五年蓝玉曾经败于王保保之手,他做梦都想打败王保保来证明自己,虽然现在王保保已死,但蓝玉不会放弃复仇的机会,他将用北元的灭亡来证明自己的军事才能,证明他蓝玉才是如今最优秀的将领。洪武二十一年(公元1388年)四月风尘仆仆的蓝玉赶到捕鱼儿海,元军的松懈出乎他的意料,蓝玉没有多想立即对北元发起猛烈进攻,突如其来的袭击打得天元帝措手不及,除了他与长子天保奴等几十人逃脱以外,剩下的人马全部被明军俘虏,这一次北元将老底全丢光了,复兴大业再无从谈起。
天元帝逃脱以后也只是多活了几个月,他和其子天保奴在逃亡过程中被其部将(忽必烈的弟弟阿里不哥的后裔)缢杀,其部将自立为蒙古大汗,成为自忽必烈以来首位非忽必烈后裔的蒙古大汗。天元帝死后蒙古大汗不再有庙号、谥号、年号,可以说捕鱼儿海一战北元政府彻底崩溃。在此之前,北元的统治者一直以正统王朝自居,相信有朝一日能重新入主中原,而在此之后蒙古的统治者完全去除了身上的汉化痕迹,显示出他们已经彻底放弃了对中原地区主权的占有。明朝与北元经过二十余年的反复拉锯战,朱元璋终于取得了他想要的胜利,在这以后明朝与蒙古的作战再也不是新政权与前政权之间争夺合法性的战争,而降级为统一王朝应对北方游牧民族攻扰的反击。况且经过蓝玉一战,蒙古元气大伤,就连扰边都是心有余而力不足了。然而朱元璋北征的脚步并没有停止,并且北征的意义也开始发生变化。
洪武二十三年(公元1390年)正月朱元璋开始第七次北征,然而这一次北征的主帅人选却很有意思,是朱元璋的两个儿子燕王朱棣和晋王朱棢。此前的几次出征,徐达也好,李文忠、冯胜、蓝玉也罢,不是开国元勋就是百战功臣,而这一次却派了朱元璋两个儿子,虽然他们也曾跟随徐达等人出征过,但终究没有独立作战的经验,难道朱元璋不怕重蹈第二次北征的覆辙吗?一点也不怕。此次出征晋王朱棢从山西出塞,一路上压根没发现蒙古军队,转了几圈,无功而返;燕王朱棣倒是打赢了几场小仗,但也没达成什么战略性目标,总的来说第七次出征收获不大,但朱元璋还是组织了这次北征,因为自从第六次北征彻底打废北元后,朱元璋北征的目的就已经发生了质的变化。
之前几次作战每次都是名将往上怼,然而随着时间的推移,开国老将们在逐渐凋零,到第七次北征的时候,徐达、李文忠等人都已经过世,没有过世的诸如冯胜、蓝玉等人也因为功高震主受到朱元璋的猜忌,虽然现在蒙古已经降级成边患了,但也不能放任不管。功臣信不过,那就得靠自己的儿子了,于是朱元璋自洪武十年(公元1377年)其陆续在边地地区设立镇守边地的藩王,即九大塞王,相比于内地的王爷们,这九位王爷兵强马壮、守备要隘,并且在前几次北征中多有跟随元老名将们出战,学习经验。到了第七次北征,朱元璋终于将身为塞王的晋王和燕王任命为主将,令他们率军出征,其实找不找得到敌人,打不打嬴都不是最重要,能赢最好,退一步说只要不输就是嬴,此次出战的主要目的便是锻炼一下这几个儿子,树立塞王们的军威,使军事统帅权从功臣名将手中转移到明朝宗室手里。
此后几年随着最后的一批老臣名将,或病死,或被朱元璋诛灭,边地地区的防务大权彻底落到了九大塞王的肩上,洪武二十九年(公元1396年)朱元璋最后一次组织北伐,这次是燕王朱棣单独领兵出征,目的比较明确,就是消灭在大宁(今内蒙古自治区宁城)一带活动的蒙古军队,因为此地离朱棣的封地近,就是他的菜了,与上次一样小胜蒙古军队,收编了一些蒙古人,燕王朱棣为此还得到了朱元璋的嘉奖,可见朱元璋此时的目的已经不再是彻底消灭残元势力了,而是有计划地扶持自己的儿子们。