Question: I mean, if binary code is already generated by PC, wouldn't it be possible to just take this binary code, transfer it to a specific place in flash memory via specific bus, for example Serial Wire, and it would work?

Why is a programmer usually required in an embedded toolchain?

Answer: 
That's what the programmer does.

It takes the binary output from the compiler and stores it in the MCU's Flash EPROM, usually over a serial bus.

Flash EPROM requires a programming algorithm to store data in it, with any erases first. The programmer carries out this algorithm. It's not like writing data to RAM. This is very well documented and explained on the Internet.
Not all microcontrollers *need* to be programmed via protocols and connections designated for a debug probe or programmer device.

As an example, the STM32F446RE microcontroller has two boot pins that control if the microcontroller executes the program stored in its (main) flash memory, if it boots from its SRAM, or it it boots the program from its so-called "system memory". This program overwrites the main Flash content with a new main payload program transmitted via UART, CAN, or SPI (where the ports and pins to be used in each case are fixed and can be looked up in the documentation). In this way, the microcontroller can be programmed with a standard USB-to-UART device, via the CAN bus, and so on.

But during development, you often want to use a debug probe anyway, and using that to also program the microcontroller is often more convenient. For firmware updates in the field, the possibility to program from the system memory program can however be useful. It is not possible to overwrite the system memory program as far as I know, so the MCU cannot be bricked in this way.