吃~鱼 2024-05-31 16:49 采纳率: 75%
浏览 29
已结题

stm32f0单片机程序启动失败

问题:单片机程序启动失败
详细:使用stm32f030芯片,keil编写。
同一程序,两个设备(1号,2号),1号可运行,2号不能运行--未成功启动,卡死在Reset_Handler的 RX R0 处,如图

img


,2号设备,当分别对程序进行如两种改动是皆可运行:
1、屏蔽看门狗初始化,可运行;
2、屏蔽初始化处,外部中断使能操作(//EXTI->IMR |= (EXTI_Line5);//EXTI->IMR |= (EXTI_Line6);)(此处使能位于外中中断初始化以前),可运行;

大家有何见解,望多多提出

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-31 16:49
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的信息,您的STM32F030单片机在2号设备上遇到程序启动失败的问题,具体表现为程序在Reset_HandlerRX R0处卡死。然而,当屏蔽看门狗初始化或屏蔽外部中断使能操作时,程序能够正常运行。这表明问题可能与看门狗或外部中断的初始化有关。

    首先,我们来分析Reset_Handler的代码。Reset_Handler是启动时执行的初始化程序,它负责设置系统时钟、初始化堆栈指针、调用SystemInit函数和主函数main。您提供的代码片段显示了Reset_Handler的大致流程:

    ; Reset_Handler 程序
    Reset_Handler PROC
        EXPORT Reset_Handler [WEAK]
        IMPORT SystemInit
        IMPORT main
        LDR RO, =SystemInit
        BLX RO
        LDR RO, =main
        BX RO
    ENDP
    

    这段代码首先调用SystemInit函数,然后跳转到main函数。如果程序在RX R0处卡死,可能是在调用SystemInitmain之前发生了某些问题。

    可能的原因及解决方案:

    1. 看门狗初始化问题

      • 如果屏蔽看门狗初始化后程序可以正常运行,可能是因为看门狗被错误地配置或触发了。
      • 确保看门狗的配置正确,包括时钟源、分频器、预分频器和刷新窗口。
      • 检查看门狗是否在初始化之前被正确地关闭或配置。
    2. 外部中断初始化问题

      • 如果屏蔽外部中断使能后程序可以正常运行,可能是因为外部中断被错误地触发或配置。
      • 确保外部中断的配置正确,包括中断源、优先级和触发条件。
      • 检查是否有其他硬件或软件问题导致外部中断被错误触发。

    代码实现建议:

    • 看门狗初始化

      void Watchdog_Init(void) {
          // 配置看门狗时钟源
          // 配置看门狗分频器
          // 配置看门狗预分频器
          // 配置看门狗刷新窗口
          // 启动看门狗
      }
      
    • 外部中断初始化

      void EXTI_Init(void) {
          // 使能外部中断时钟
          // 配置外部中断优先级
          // 配置外部中断触发条件
          // 使能外部中断
      }
      

    参考资料:

    其他建议:

    • 确保2号设备的硬件连接和配置与1号设备相同。
    • 检查是否有硬件故障,如看门狗或外部中断相关的引脚问题。
    • 使用调试器逐步跟踪程序执行,查看在Reset_Handler之前是否有任何异常行为。

    希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便进一步分析。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 创建了问题 5月31日