I disagree: reverse engineering of a BIN file for an MCU is not so difficult (using a disassembler).
In order to protect your FW in a device, you need a processor with "Trust Zone":
it will place sensitive code into a region of memory which cannot be read from the outside. Or: this code there can only be accessed, read and executed by a "secure" piece of code.
And any debugger access is prohibited by HW.
Otherwise: everybody can connect a debugger and read out your MCU FW, even reading a QSPI flash.
PCs have some approaches to encrypt the entire hard disc: when reading from it - it has to be decrypted. But for an MCU way too much (and slowing down).
If so: you could think about to encrypt all the code, with a key. A piece of SW in MCU reads such code, as data, from memory, decrypts it and places it into another memory, so that it is executed from there. But still not save: if somebody would trace your instructions done (from the outside) or read the memory content where the decrypted code is located (just stop MCU and read the memory with a debugger) - it can be still being stolen.
A processor with "Trust Zone" seems to me the only reasonable option.
You could also think about to encrypt a little bit of your code. You have to force your users to enter a key. You decrypt now this code, place it into another memory and you jump to it.
So, it makes it harder for "bad guys" to understand what your code will do, but potentially they will see still a lot of code open (read via a debugger).
Or, to make it hard to attackers: you write "self-modifying" code: this is hard to disassemble, to change back to C-code. It needs understanding what happens during runtime (but still possible to figure out).
Or: use a USB dongle, with an encrypted key on: your program just continues when dongle was seen and key was correct.
Everything can be hacked: you can just add barriers to make it harder for attackers to read your code.
Otherwise you have to design a system which has a "red" and a "white" zone. The red is encrypted and no way to access it, to read it out (with external means).
Or: you place your MCU into a shell, an enclosure: if somebody opens it, just to hook up a debugger - you have a switch to realize when it was opened. If so, you erase all your data, maybe also your MCU ROM flash (the code itself).
But it might need an internal battery, self-powered to realize: otherwise, the hacker will disconnect any power, your protection switch does not work anymore and all the time for the hacker to open your device.