I'm building an arm-based (stm32F7) hardware device which will have a USB port. I would like to be able to update the firmware and distribute it such that customers with my device can easily install new firmware without having to install an IDE or do anything complex. I am writing a computer side program that communicates over USB serial, so I would like this to also function as an update utility.
STM32 has a bootloader built in called Device Firmware Update. There are a couple of app notes that detail its operation. AN3156 explains the protocol, and AN2606 details the operation and hardware considerations. ST provides a PC tool that users could use to update firmware, alternatively a DLL that could be built into a PC application.