元朝末年,政治黑暗,经济崩溃,黄河决口,灾害连年。农民无法生活下去了,遂掀起大规模的反抗斗争。当时社会上流传的一首散曲唱道:“堂堂大元,奸佞当权。开河变钞祸根源,①惹红巾万千。”散曲中说的“红巾万千”就是指刘福通和徐寿辉等人领导的红巾军。因起义军头裹红巾,故称红巾军。这两支起义军对元朝的打击最大。
元顺帝至正十二年(1352年),家贫当了和尚的佃农朱元璋到濠州投奔了郭子兴,参加了反元的斗争。由于他勇谋过人,不久便在江南地区迅速崛起,成为红巾军的领导人物。朱元璋吸收地主阶级知识分子李善长、刘基、朱升等充当谋士,他采纳朱升“高筑墙、广积粮、缓称王”的建议,实力不断壮大。至正十六年(1356年),他率军渡过长江,攻占了集庆(今南京)这一江南重镇。至正二十四年(1364年),即吴王位,建百官,立制度,政权初具规模,并相继消灭了陈友谅和张士诚。元顺帝至正二十八年(1368年)初,朱元璋在南京登基当了皇帝,建立明朝,年号洪武,是为明太祖。是年秋天,明军在大将徐达、常遇春的率领下,攻入大都(今北京),元顺帝北逃,统治中国97年的元朝被推翻了。朱元璋又用了近20年的时间,才完成了全国的统一。
元顺帝北逃以后,残元仍保有一定的军事实力,继续统治长城以北的一些地区。且蒙古贵族由中原的城市生活又退回到原来的游牧生活,这种生活方式的退步,时时刺激他们要卷土重来,企图夺回失去的“天堂”。明初,宁夏地区曾一度被残元势力王保保(即扩廓帖木儿)所控制,对刚刚建立起来的明王朝构成了严重威胁。为此,朱元璋曾两次派开国元勋、大将军徐达征剿盘踞甘肃、宁夏的王保保等残元势力。
王保保,元平章察罕帖木儿养子。本姓王,小名保保。河南沈丘人。元顺帝赐名扩廓帖木儿。在元末农民大起义中,王保保随察罕在黄河南北一带镇压农民起义,察罕死,袭父职,驻兵河南,后封河南王,统领天下兵马。明太祖洪武元年(1368年),明军大举北进,攻克大都。旋即徐达又挥师西进,乘王保保率军欲与明军争夺大都之机,攻取太原。王保保还救太原兵败,退据甘肃、宁夏。
洪武二年(1369年)四月,徐达率军向西进入固原地区,一举攻下隆德(今宁夏隆德县)、开城(原安西王府,今固原开城乡),对元豫王驻地西安州(今宁夏海原西安乡)构成进逼态势。豫王慌忙从西安州北逃,明军截获其辎重车辆遂占领西安州,然后又北上攻克红城(今宁夏同心县东南)。五月,明将薛显等领兵攻下鸣沙,俘获元将毛祥、知县尹铎等人,又北上击败王保保于宁夏(今银川市)。徐达进入红城后,遣降将李茂等率千余骑又到隆德、秦安等地捉拿拒降的残元旧将杜伯不花、罗左承等人。虽然明军在宁夏地区的军事行动取得了胜利,但王保保的势力并没有被彻底消灭。这年(即洪武二年)七月,王保保从宁夏派部将韩札儿率领一支骑兵奔袭原州,结果原州被攻陷,明军指挥陈寿等兵败战死。随后韩札儿又被明军右副将军冯胜击败。这是徐达第一次率兵征剿盘踞宁夏的王保保残元势力。洪武三年(1370年)正月,朱元璋因王保保在西北为患甚烈,便决意第二次征剿。命右丞相徐达为征北大将军,率冯胜、邓愈、汤和为西路军,自潼关出西安,直捣定西,以取王保保;命浙江省平章李文忠率东路军,出居庸关,入沙漠,以追击元顺帝。朱元璋说:兵分两路,“使其彼此自救,无暇应援。何况元顺帝远居沙漠,料不到我师突至,如孤豚(tún,猪)之遇猛虎,取之必易。此有一举两得之效。”这次北征以徐达的西路军为主力,原因是盘踞甘肃西北部及宁夏贺兰山以北的残元势力基本保存,必须尽早消灭之。
四月,徐达率军至甘肃定西,王保保退守定西沈儿峪。明军与王保保军隔沟列阵对垒。双方交战数次,不分胜负。正在两军相持不下的时候,王保保暗中派出一支精兵强攻明军东南营寨,明将胡德济惊惶失措,明军乱成一片。这时,徐达率军奋力反击,才将王保保军打退,稳住了阵脚。按军法胡德济当斩,但徐达考虑到胡乃功臣之子,便派人押送京城,由皇上去处理,只斩其部下数人。四月初九日,徐达整顿军队与王保保展开决战,诸将悉力拼杀,在川北乱坟间给王保保以歼灭性打击,擒获元郯(tán)王、文济王及国公阎思孝、平章韩札儿、虎林赤等王公官吏1865人,吏卒84500余人,马15280匹以及驼驴骡牛羊杂畜不计其数。仅王保保带着妻儿数人北逃,以木筏渡黄河,经过宁夏,投奔和林(今属蒙古国)。徐达曾派都督郭英追至宁夏,不及而返。王保保逃入蒙古后,朱元璋曾多次招降,均被拒绝。洪武八年(1375年)八月十七日,王保保病死。李文忠率领的东路军也胜利班师还京。
此次北征,迫使元朝残余势力北撤,明朝西北和北边相对稳定了一些。