大疆PSDK的mdk_bootloader在stm32f405rgt6上运行时卡死,通过debug调试发现运行SystemClock_Config()时,程序会跑飞进入HardFault_Handler。
问题如下:


后面调试过程中发现只有使用外部晶振HSE时,将SystemClock_Config配置改成内部晶振HSI时,就可以正常运行:


硬件使用示波器测量外部晶振发现时正常的,使用烧写其他程序发现可以正常运行控制IO引脚
大疆PSDK的mdk_bootloader在stm32f405rgt6上运行时卡死,通过debug调试发现运行SystemClock_Config()时,程序会跑飞进入HardFault_Handler。
问题如下:


后面调试过程中发现只有使用外部晶振HSE时,将SystemClock_Config配置改成内部晶振HSI时,就可以正常运行:


阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
根据你的描述,PSDK的mdk_bootloader在stm32f405rgt6上运行时卡死,导致SystemClock_Config()函数运行时程序跑飞进入HardFault_Handle。可能的原因是SystemClock_Config()函数中存在bug或stm32f405rgt6的硬件问题。
以下是一些可能的解决方案:
以下是一个简单的示例代码,用于配置stm32f405rgt6的时钟:
void SystemClock_Config(void)
{
// 设置系统时钟
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 4;
RCC_OscInitStruct.PLL.PLLN = 216;
RCC_OscInitStruct.PLL.PLLP = 2;
RCC_OscInitStruct.PLL.PLLQ = 4;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
/* Initialization Error */
}
// 设置系统时钟源
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct) != HAL_OK)
{
/* Initialization Error */
}
}
请注意,这只是一个简单的示例代码,实际情况中可能需要根据stm32f405rgt6的硬件特性和使用方法进行修改。