Please try my solution which I have been using without any problem:
"M0" command works! But needs a period parameter (in seconds) for my Ender3 Pro after changing my motherboard to a silent one. The syntax of M0 is "M0 Sxxx", where "xxx" is the pause period in seconds.
There are various ways to add the paramter to gcode:
If you are using CURA "Pause at Height at Post-Processing plugin" then CURA creates a gcode BUT I don't know why it does not ask for the period to pause and includes only "M0" line (beside other parameters such as park position, disarm time, standby temprature etc). So the printer's (at least my printer's) firmware does not recognize the pause time and does not pause at all. Normally it should pause with M0 indefinately until you click the control button to resume.
So you should modify the gcode by adding only the pause period in seconds (ie I use 300 seconds which correspond to 5mins, which is enough time to change the filament). By the way, during this pause period the printer is also ready to resume any time if you click the control button without waiting upto 5mins. However, if you miss the pause period then the printer will automatically resume printing. I don't know the upper limit of pause seconds but you can increase the time as much as required, keeping in mind that holding the hotend at high temprature for a long time without any extraction may cause damage or clugs in long term.
If you are using CURA then you can easiy modify the gcode at "Pause at Height" at Post-Processing Plugin - Gcode "before (or "after", it doesn't make any difference) pause command" boxes. You will write only "M0 S300" for a 5min pause (or as much as xxx seconds required). Of course the default M0 line defined by CURA remains in gcode but you add another line (before or after M0 line) as "M0 S300" and don't worry they don't conflict.
Another way in CURA is to use "Search and Replace at Post-Processing" script (after "Pause at Height script, in order), where you will search for the default "M0" command created by "Pause at Height" command and replace it with "M0 S300".
Finally, even if you are using a slicer other than CURA and your gcode pause command does not work due to same reason, then open the gcode by any txt editor and replace all "M0" with "M0 S300". Take care not to over write any other commands or dublicate the "M0" commands.
Hope some of you would benefit from my solution:)
Happy printings...