BG2DVA 2025-12-26 18:07 采纳率: 0%
浏览 3

你们有没有遇到过这样的现象,怎么解决:程序如果断电重新插电就能正常运行,但是只要是通过RESET复位后,就只能运行一小会就卡死了

请问一个问题,你们有没有遇到过这样的现象,怎么解决:
程序如果断电重新插电就能正常运行,但是只要是通过RESET复位后,就只能运行一小会就卡死了,而且出现卡死的时长也不确定,有可能一两秒有可能四五秒。
程序主控是STM32F103C8T6,程序内容主要是串口的收发,接收用的中断。

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2025-12-26 18:07
    关注

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

    解决方案

    根据你的描述,程序在断电重新插电后可以正常运行,但是在通过RESET复位后就卡死了,这通常是由于内存数据未被正确保存或是某些资源未被正确释放导致的。

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

    1. 检查内存数据保存: 确保在RESET复位后,程序正确保存了内存数据,避免了数据丢失或是乱写。
    2. 检查资源释放: 确保在程序退出或是RESET复位后,释放了所有资源,避免了资源泄露。
    3. 检查延时: 检查程序中是否有延时操作,可能导致卡死。
    4. 检查中断: 检查是否有中断未被正确处理,导致程序卡死。
    5. 检查硬件: 检查硬件是否有问题,例如EEPROM或是其他外设是否正常工作。

    核心代码

    void SystemClock_Config(void) {
      // 配置系统时钟
      RCC_OscInitTypeDef RCC_OscInitStruct = {0};
      RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    
      __HAL_RCC_PWR_CLK_ENABLE();
      __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
      __HAL_RCC_PWR_CLK_DISABLE();
    
      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 = 168;
      RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
      RCC_OscInitStruct.PLL.PLLQ = 7;
      if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
        Error_Handler();
      }
    
      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_SYSCLK_DIV1;
      RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
      RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
    
      if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
        Error_Handler();
      }
    }
    
    void Error_Handler(void) {
      // 错误处理函数
      while (1);
    }
    

    注意

    上述代码仅供参考,具体的解决方案需要根据你的程序和硬件进行调整。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月26日