I made a board with an STM32F103C8T6. I can successfully use the UART to program and verify the on-board flash memory with the built-in bootloader. But then when I reset and I boot into flash, nothing works.
My code just turns on/off a GPIO that I'm monitoring with a scope. I've verified that the external clock is operating properly (8MHz).
It seems by default that it uses the internal oscillator, so I tried to set it to use the external oscillator by uncommenting "#define SYSCLK_FREQ_HSE HSE_Value" but still nothing happens on reset.
edit: This is with an arm gcc 4.5.2. I've used this toolchain successfully on an STR7 board in the past. I've also tried with CodeSourcery's toolchain but still no results.
You can also download my Template project, which includes a couple of different setup routines, which makes it a lot easier to get started: **broken link removed**
One thing -- why do you state that the clock speed when running from the internal oscillator is limited to 36MHz? You can set the multiplier to 16x, and then it'll run at 64MHz. I couldn't find anything in the datasheet that has a different max frequency for internal vs external oscillator. Also in the supply current page, one of the tests they do is for 64MHz internal oscillator.