STM32
直播中

李维嘉

7年用户 1414经验值
私信 关注
[问答]

CubeMx生成的代码优化等级调低不能运行怎么解决?

一个简单的测试程序,开发环境:
芯片STM32F103+MDK 5.14+CubeMx 4.25生成一个通过串口2 printf函数打印hello world。
现象:直接生成的代码添加串口重定向,可以打印一切正常。调低自动生成的代码优化等级为level0,不能运行,死在printf函数。
有人遇到类似的问题的么?万分感谢!

回帖(1)

足球上篮

2024-4-25 17:00:05
在这种情况下,我们需要逐步排查问题。以下是一些建议的步骤:

1. 确认优化等级设置:首先,请确保您已正确将优化等级设置为Level 0。在MDK-ARM中,您可以在项目的“Options for Target”对话框中设置优化等级。

2. 检查串口配置:确保串口2的配置与原始生成的代码中的配置相同。这包括波特率、数据位、停止位和奇偶校验位等。

3. 检查printf重定向:在优化等级降低后,确保printf函数的重定向仍然正确。这可能涉及到修改系统启动文件(如system_stm32f10x.c)中的相关代码。

4. 检查中断配置:确保串口2的中断配置正确。这可能涉及到修改NVIC(嵌套向量中断控制器)的设置,以确保串口2的中断被正确处理。

5. 检查代码中的错误处理:在printf函数中添加一些错误处理代码,以便在出现问题时能够及时发现。例如,您可以在printf函数中添加一些调试信息,以帮助确定问题所在。

6. 使用调试器:使用MDK-ARM的调试器逐步执行代码,以确定程序在哪个部分出现问题。这可以帮助您更准确地定位问题。

7. 检查CubeMX配置:重新检查CubeMX中的配置,确保没有遗漏或错误的设置。

8. 寻求社区帮助:如果以上步骤都无法解决问题,您可以尝试在STM32和MDK-ARM相关的论坛或社区中寻求帮助。可能有其他开发者遇到过类似的问题,并能提供解决方案。

9. 考虑升级软件:虽然不是首选方案,但有时软件的更新可能会解决一些已知问题。您可以考虑升级MDK-ARM和CubeMX到最新版本,看看是否能解决问题。

通过以上步骤,您应该能够找到问题所在并解决它。希望这些建议对您有所帮助!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分