踢桃的脚 2025-07-10 15:39 采纳率: 0%
浏览 43

大疆PSDK SystemClock_Config卡死

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

问题如下:

img

img

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

img

img


硬件使用示波器测量外部晶振发现时正常的,使用烧写其他程序发现可以正常运行控制IO引脚

  • 写回答

7条回答 默认 最新

  • 阿里嘎多学长 2025-07-10 15:39
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    大疆PSDK SystemClock_Config卡死解决方案

    根据你的描述,PSDK的mdk_bootloader在stm32f405rgt6上运行时卡死,导致SystemClock_Config()函数运行时程序跑飞进入HardFault_Handle。可能的原因是SystemClock_Config()函数中存在bug或stm32f405rgt6的硬件问题。

    以下是一些可能的解决方案:

    1. 检查SystemClock_Config()函数代码:检查SystemClock_Config()函数中的代码是否正确,是否存在语法错误或逻辑错误。
    2. 检查stm32f405rgt6的硬件设置:检查stm32f405rgt6的硬件设置是否正确,是否存在硬件问题。
    3. 使用stm32f405rgt6的官方文档:查看stm32f405rgt6的官方文档,了解该芯片的硬件特性和使用方法。
    4. 使用debug调试工具:使用debug调试工具,例如Keil MDK或ST-Link,来调试SystemClock_Config()函数,了解函数中的执行路径和变量值。

    以下是一个简单的示例代码,用于配置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的硬件特性和使用方法进行修改。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月10日