cubemx,固件库都是最新版的。我使用了UART2,就用cubemx做了相应配置。但是在执行UART2初始化,调用下边这个函数的时候就会进入hardfault。
uint32_t HAL_RCC_GetPCLK2Freq(void)
{
/* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
#if defined(RCC_D2CFGR_D2PPRE2)
// return HAL_RCC_GetHCLKFreq(); 本来是应该执行下边那条指令的,为分析问题我简化成这样,还是会进入hardfault
return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2)>> RCC_D2CFGR_D2PPRE2_Pos]) & 0x1FU));
#else
return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE2)>> RCC_CDCFGR2_CDPPRE2_Pos]) & 0x1FU));
#endif
}
看上去是HAL_RCC_GetPCLK2Freq 这个函数导致的,但是如果我把这个函数放到main.c初始化时单独执行,也是可以执行通过的,如下:
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_QUADSPI_Init();
MX_TIM1_Init();
val = HAL_RCC_GetHCLKFreq(); //这样执行就能通过,奇怪
MX_USART2_UART_Init(); |