자는 원양(元讓). 의주 출신. 선조 때 무과에 급제하고, 광해군 때 형조좌랑을 거쳐 훈련판관에 이르렀다.
김응하(金應河)와 함께 이름이 알려진 용장으로, 1629년(인조 7) 청군(淸軍)이 침입하여 오자 의주에서 장사 장응림(張應林)과 함께 출전하였다.
통군정(統軍亭)에서 적병 수십명을 죽이고, 거짓 적진에 투항하여 당시 가도(椵島)에 주둔중인 명나라의 좌도독 모문룡(毛文龍)과 내통, 모문룡으로 하여금 적을 공격하도록 정보를 제공한 다음 적진을 탈출하여 청량산(靑梁山)에 들어가 장사를 모아 적을 방어하였다.
1636년 병자호란이 일어나자 의주부윤 임경업(林慶業)의 휘하에 들어가 압록강에서 적과 싸워 전공을 세우고 많은 군용품을 노획하였다.
청나라의 임금을 죽여 명나라의 위기를 구하고 원수를 갚을 계획으로 역사(力士) 차예량(車禮亮), 의주부윤 황일호(黃一皓), 절도사 임경업 등과 약속하고 등주(登州)로 건너가 진홍범(陳洪範)에게 청나라를 치자고 건의하였으나 거절당하였다.
다시 영원(寧遠)으로 가서 명장(明將) 오삼계(吳三桂)와 함께 금주(錦州)에서 청병과 싸워 여러 번 공을 세웠다. 1644년 적장 이자성(李自成)의 침입으로 연경(燕京)이 함락되고 명나라가 망하자 오삼계는 항복하고, 그는 죽은 명주(明主) 의제(義帝)의 빈소에서 10일 동안 통곡하면서 단식하다가 죽었다.
숙종 때에 병조판서에 추증되고, 의주 백마산성사(白馬山城祠, 일명 顯忠祠)에 배향되었다. 시호는 충장(忠壯)이다.