徐达、常遇春攻下大都后,元顺帝逃往上都,朱元璋觉得大都还是不太安全,元顺帝在上都,随时都可能打回来,而且云南、辽东一带还在元朝的控制下,最要紧的是王保保还率领十万大军在山西,王保保这个人很有领兵打仗才能,可不好对付。朱元璋改大都为北平府,让孙兴祖留守,令徐达、常遇春率领大军攻打山西。
常遇春和徐达为先锋,先后攻克保定、中山、真定等地,形势一片大好,照这个局势发展下去,山西很快就归明军所有了,想到很快就能连战连捷,汤和有点大意了,他不知道一个可怕的敌人正在渐渐接近。王保保正在时刻观察着明军的一举一动,明军一路攻克山西的多个城市,他都没有援救,他只是在等机会,现在机会终于来了。王保保早就听说明军的常遇春厉害,每次冲锋陷阵都冲在最前边,而且用兵如神,百战百胜,所以没敢招惹常遇春,他决定从汤和这边下手,率兵在韩店突袭汤和军。汤和率军一路攻城略地从未遇到像样的敌军,以为大都已下,元军自然望风披靡,没想到到了韩店这里突然杀出这么精锐的部队,仓促应战,大败,死伤数千人。这是明军北伐以来第一次大败,这次大败给满是乐观情绪的明军带来了不小的打击,也让徐达冷静下来,重新审视王保保这个人。
韩店之战的胜利也让元顺帝产生了重新收复大都的雄心,他命令王保保率领大军直捣北平府,务必要光复大都。徐达得到消息后,聚集众将商议对策,很多将领都建议回救北平,北平是元朝旧都,如果被王保保占回去,对明朝非常不利,弄不好元朝卷土重来,到时候天下归谁就不好说了。这时候徐达表达了自己的观点,徐达认为北平城池坚固,北平的守将孙兴祖也很有能力,完全可以抵御王保保的进攻。而王保保率领大军攻北平,他自己的老巢太原肯定空虚,现在若是趁机去攻太原,王保保将会陷入进不能胜、退无可守的境地。
众将都觉此计大妙,于是徐达不救北平,率领大军直取太原。王保保到保安(今河北涿鹿)的时候,听说徐达去攻太原了,赶快回救,却不知自己已经中了徐达的计。原来徐达名义上攻打太原,实际却偷偷率领大军去半路等着阻击王保保。当时骑兵跑得快,先到了阻击的地点,但是步兵还没赶到,兵力不太够,如果直接用这些骑兵去阻击王保保,纵然成功,肯定也要付出很大代价,常遇春建议晚上去劫营,这样出其不意,肯定能大获成功,徐达赞同。恰好王保保的部将豁鼻马想投降明军,派人去太原约降,半路碰上徐达大军,于是约定让豁鼻马做内应,徐达、朱元璋夜里去劫营。当晚王保保睡不着,在营帐里边看兵书,忽然听到外边杀声震天,知道被明军偷袭,光着一只脚就跑出来了,营帐外已经乱成一片,到处都是元军的哭叫声,王保保顾不得管手下的大军,自己仓皇上马,带着十八个骑兵就逃走了。
徐达、常遇春趁着这次大胜,直接拿下太原,接着攻下大同,山西各地也都被明军控制。徐达、常遇春又和冯胜一起攻下凤翔,准备继续西进攻打陕西的李思齐、张思道等人。这时候,元将也速率兵攻打通州,进逼北平,朱元璋令常遇春回救,让徐达、冯胜等人继续西进。
常遇春回到北平赶走元军后,为了避免元军再次骚扰北平,朱元璋令常遇春为主将,自己的外甥李文忠为副将,率领步骑一共九万人北伐。常遇春这次出征,将会获得更大的胜利,取得更为辉煌的成就,而这也会是他人生中最后一次出征。
常遇春出征后,发挥自己善于长途奔袭的风格,先败元将江文清于锦州,然后没等元军缓过气来,又败元将也速于全宁,接着继续北上,再败元军于大兴州。常遇春像头发疯的猛兽一般,马不停蹄地一路向北杀去,一直杀到元上都。由于常遇春的进攻速度太快,以至于常遇春打到上都的时候,元顺帝才知道要逃,他是逃出去了,但是宗王庆生、平章鼎住等上万元军将士都成了常遇春的俘虏。除此之外,常遇春还缴获了上万的车辆、三千马匹、五万头牛以及无数的宝货,可谓是大获全胜。元顺帝丢了大都后,现在又丢了上都,只得继续北逃,一直跑到应昌(今内蒙古克什克腾旗西北)才敢停下来。
常遇春大胜而归,率领大军到柳河川的时候,暴疾而死,死时只有四十岁。常遇春自朱元璋南下渡江的路上投靠朱元璋,从军十四年,常为先锋,百战百胜,从未败北。
朱元璋手下猛将如云,若论名将,首推徐达、常遇春,徐达擅长谋略,常遇春擅长突击;徐达治军有方,不扰百姓,而常遇春能冲锋陷阵、当百万之众,两人虽作战方式不同,却相得益彰,常常一同领兵出征,为朱元璋南征北战立下汗马功劳。常遇春的死,对朱元璋来说是重大损失,所以朱元璋听到常遇春的死讯时,既震惊又悲痛,以王礼厚葬常遇春,因常遇春曾攻下元朝上都开平,追封常遇春为开平王。