According to the reference manual, you are _forbidden_ from writing 00 to the VOS[1:0] bits in PWR_CR. Writing a 00 is automatically turned into range 2, or, 10. Attempting to then |= the bits for range 1 (01) results in the final result of choosing voltage range 3 (11). This has fairly catastrophic effects if you then attempt to switch to PLL clock at 32Mhz. Oddly, the existing code was working fine on STM32L151C6 revision W, but failing with revision V silicon. Regardless, the existing code was wrong and not following the reference manual. Further, attempting to change any power voltage range settings without the RCC enabled will have no effect, so all the higher level helper routines have added peripheral enable lines before attempting to set the range.
12 KiB
12 KiB