版主及各位朋友好:
我在调试105的时候发现不时的出现程序死在了HardFault_Handler中断里,经单步调试后发现可能是由于RCC->CFGR2的值不是我设置的值了,导致频率高于72MHz,我很疑惑,为什么CFGR2的值会自己变化呢?
在SetSysClockTo72函数中我修改了相关参数以配合外部8MHz晶振,
我单步走到清空CFGR寄存器相关位时(RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE....)发现CFGR2的低4位由3变成了2,由此4分频变成了3分频导致主频超过72MHz,可是为什么会变呢? 请各位指教。 相关部分代码如下:(外部晶振采用8MHz)
#ifdef STM32F10X_CL
/* Configure PLLs ------------------------------------------------------*/ /* PLL2 configuration: PLL2CLK = (HSE / 2) * 8 = 32 MHz */ /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 4 = 8 MHz */
RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV2 | RCC_CFGR2_PLL2MUL8 |
RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV4);
/* Enable PLL2 */ RCC->CR |= RCC_CR_PLL2ON;
/* Wait till PLL2 is ready */ while((RCC->CR & RCC_CR_PLL2RDY) == 0)
{ }
/* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */
RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
RCC_CFGR_PLLMULL9);
#else[/mw_shl_code]
|