Hi, 我自己做了块板子,网上淘了块stm32f446ret,使用cubeMx生成了一个系统时钟为180M的简单工程,开始调试发现没过多久就直接进硬件错误了,奇怪的事168M也会进硬件错误,主循环的LED都没进去,后来看了芯片手册发现除了要设置PWR 的VOS位以外,还要进入over drive 模式,否则时钟只能跑到168M,还要设置ODEN以及ODSWEN。发现VOS能正常置位,但是ODEN和ODSWEN设置都没反应。 之后我用官方代码内部16M RC振荡器产生180M时钟,发现也会在设置打开over drive mode时在等待HAL_OK处死等,原因是返回的HAL_TIMEOUT,查看CR的ODEN位和ODSWEN位都没设置成功。 无奈,手头没有f446开发板,只有一块f746 discovery,用cubeMx随便写个系统时钟216M的工程,发现这两个位能正常置位,说明cubeMx生成的代码是可靠的。 |
那多谢了,附件是我的测试工程,直接用cubeMx生成的,使用内部16M RC作为时钟源,配置系统时钟180M,使用的调试模式是SW模式,调试器是JLINK。我在使能over driver模式后,添加了一个读取PWR的CR与CSR寄存器值的语句,还添加了出错死等流程,防止等待超时后,直接跑到主循环,造成硬件错误。