고려 말의 왜구(倭寇) 침범은 1350년(충정왕 2)부터 본격적으로 시작되어 공민왕(恭愍王) 대를 거쳐 우왕(禑王) 때에 가장 극심하였다. 우왕 즉위 이후 왜구는 수도 개경(開京)을 노리다가 저지당하고서는 양광도(楊廣道) 연안을 공격하였다. 1376년(우왕 2)에는 금강(錦江)을 따라 올라오며 부여(扶餘), 공주(公州) 지역을 약탈하였다. 그해 7월에는 목사(牧使) 김사혁(金斯革)이 이들을 저지하다가 패배하여 공주가 함락되었다. 왜구는 다시 연산(連山, 지금의 충청남도 논산시 연산읍)의 개태사(開泰寺)로 쳐들어왔으며, 이를 맞아 싸우던 원수(元帥) 박인계(朴仁桂)가 전사하였다. 이 소식을 들은 최영(崔永)은 출정을 자청하였다. 당시 우왕과 조정의 대신들은 그가 이미 61세로 나이가 많다는 점을 들어 출전을 만류하였으나, 최영은 굳이 출정하기를 요청해 마침내 허락을 받았다.
당시 왜구는 장차 돌아가려는 것처럼 내보이면서도 여전히 약탈을 자행하고 있었다. 고려 측에서 맞서는 상대가 없었기에 홍산에 머물던 왜구들의 기세는 극에 달해 있었다. 이때 최영은 양광도 도순문사(楊廣道都巡問使) 최공철(崔公哲), 조전원수(助戰元帥) 강영(康永), 병마사 박수년(朴壽年) 등과 함께 전장에 나섰다.
양측 군사가 교전한 곳은 3면이 모두 절벽이고 오직 길 하나만 통할 수 있는 험하고 좁은 지형이었다. 최영이 이끈 고려군이 당도하기에 앞서 왜구가 먼저 이곳에 자리 잡고 있었다. 여러 장수들이 겁을 내어 나아가지 못하였는데, 최영이 선두에 나서 돌진하기 시작하였다. 이때 숲속에 숨어있던 적이 쏜 화살이 최영의 입술에 맞아 피가 흘렀는데도 최영은 당황하지 않고 적을 쏘아 맞춘 이후에야 화살을 뽑았다고 한다. 최영을 중심으로 한 고려군은 더욱 치열하게 싸워 적을 거의 섬멸하였다.
이어서 8월에 최영이 개경으로 개선하자 조정은 황제의 사신을 맞이하는 예와 같이 성대하게 이들을 맞이하였다고 한다. 우왕은 최영을 철원 부원군(鐵原府院君)으로 봉하고 나머지 군사들도 포상하였다.
홍산 전투의 구체적인 전황이나 양측 병력의 규모는 알 수 없다. 최영은 개선한 후 우왕이 적의 수효를 묻자, 많지 않았다고 대답하였다고 한다. 다만 그에 앞서 금강 유역의 여러 고을을 침입한 왜구의 수는 상당한 규모였을 것으로 추측된다.
홍산 전투 이후 왜구들은 늘 “우리가 두려워하는 자는 백발(白髮)의 최만호(崔萬戶)뿐이다.”라고 할 정도로 최영을 두려워하였다고 한다. 이 전투를 통해 왜구의 세력은 일시적이나마 위축되는 모습을 보였다.
현재 홍산의 전투 장소로 비정되는 장소는 충청남도 부여군 홍산면에 있는 태봉산성(胎峰山城)이며, 산성 내부에 조성되어 있는 태봉산 체육공원에 홍산대첩비가 세워져 있다. 한편 최근에는 홍산 전투의 전장이 태봉산이 아니라 비홍산(飛鴻山)일 가능성이 제기되기도 하였다.