明崇禎十三年、清崇德五年(1640年),清主皇太極派軍圍困明朝錦州,命和碩鄭親王濟爾哈朗率大軍築長圍以作持久圍困之計。此番清軍對錦州志在必得,皇太極認識到,錦州正當東北與華北的咽喉要道,戰略位置至為重要,實乃兵家必爭之地。奪取錦州,是皇太極圖謀入關的第一步。第二年四月,明薊遼總督洪承疇、巡撫邱民仰召集八鎮總兵所部,共計步軍十三萬、騎兵四萬,籌措一年的軍糧,從寧遠進發,支援錦州。
駐守錦州的明將祖大壽派人出城,通知洪承疇,清軍勢大,不可輕率與戰。洪承疇亦想採取步步為營之策,徐圖進取。誰知明廷派來的監軍張若麒既不知兵,又好大言,密派使者至京,奏請崇禎帝敕令洪承疇速與清軍決戰。洪承疇無奈,只得先率六萬步騎疾進,屯於松山。清軍來攻,不利而退,是為明清松山大戰前的序戰,明軍先獲小勝。清帝皇太極聞知明廷發軍赴援,也馬上率大軍自瀋陽出發,僅六日便抵達松山,雙方遂在松山擺開陣勢,準備決戰。
時明軍之糧草,皆儲於筆架岡。皇太極偵知後,遣奇兵先進襲洪承疇在塔山的護餉之兵。明軍無備,遂被擊潰。清軍盡獲明軍好不容易籌集起來的一年的糧餉,並佔領杏山截斷了明軍的糧道。明軍松山小勝之後,不意糧道遭敵軍阻斷,形勢立刻急轉直下。
洪承疇知大軍斷糧,不出幾日,必生禍亂,於是積極出戰,欲突破清軍封鎖線,全軍先回山海關,以圖後舉。皇太極此時正運籌帷幄。他料到,明軍斷糧後,出戰不利,必然退兵,乃乘夜遣軍疾行,分別埋伏於塔山、杏山小凌河、高橋、桑格齊保諸險隘處。明軍退回關內,必會經過這些地方,屆時伏兵突起,出敵不意,將穩操勝券。皇太極則指揮主力軍嚴陣以待,密切監視明軍的動向。
果然,第二天,明軍便開始撤退。王樸、吳三桂、馬科、李輔明、唐道、白廣恩六總兵率所部先退。本來,六人約定輪番殿後,嚴陣以退,不料退兵時,王樸所部先行逃遁,吳三桂等五總兵誰也不願殿後,遂爭相奔逃。
至杏山時,遭到清之伏兵襲擊,行伍更亂,不復成軍。清軍據險狙擊,明軍不得西逃,傷亡慘重,王樸逃得最早,敗得也早,乃至全軍覆沒,僅他一人倖免。吳三桂也僅以身免,部下將士全部被殲。其餘各部亦大部被殲,張若麒藏到漁船之中,方得脫身。
此役清軍據險層層設伏,將西逃的明軍消滅殆盡,共殲五萬三千七百八十三人。明軍四個總兵失蹤,喪失戰馬七千四百四十四匹,甲冑九千三百四十六副,其餘輜重器械數以萬計。清軍由於佔據了塔山等地的有利地形,憑藉險隘作戰,故而傷亡極微,僅有十人負傷而已。
赴援錦州的八總兵之中,四人失蹤,二人死裡逃生,曹變蛟和王廷臣沒有與王樸等一起西逃,而是隨洪承疇、邱民仰進入松山城拒守,洪承疇組織了五次突圍,均以失敗告終。
至崇禎十五年(1642年),松山城內糧盡,明廷援軍不至,清軍在明軍副將夏成德的協助下,攻陷松山城,俘獲洪承疇等。洪承疇在皇太極之妃博爾濟吉特氏(即莊妃)的感召下投降。守衛錦州的祖大壽絕望,亦降清廷。至此,清廷勢力直達山海關。即使沒有李自成攻佔北京城,崇禎皇帝的寶座也坐不久矣。
松山之戰,可視為清軍對明軍的最後一戰(不包括對南明作戰)。此役中,明朝的最後一點家底被消耗一空,山海關外諸險隘全部落入敵手。李自成兵至北京時,明廷已無兵可調,崇禎帝束手無策,被迫吊死煤山。與其說明亡於李自成,不如說明亡於清,亡於松山一役。