回答:
システムメモリから起動すると、オンチップフラッシュに何かをプログラムする前に、工場から直接チップにあるオンチップブートローダーが呼び出されます。これにより、UARTやUSBなどの外部インターフェイスからデバイスにコードをロード(プログラム)できます。これはマニュアルで詳細に説明されています。
メインフラッシュメモリは、コードが通常置かれる場所です。通常の動作では、コードはフラッシュに常駐し、パワーオンリセット(POR)で、CPUはリセットベクタと初期スタックポインタ(SP)をフラッシュからフェッチします。JTAG、オンチップブートローダー(上記)などを介してフラッシュをロードできます。
最後に、コードをRAM(JTAG、ランタイム)にロードして、そこからブート/実行できます。これは頻繁には使用されません。通常、一時的なブートローダーなどのトリッキーなことをしています。