[STM32F1] Keil软件编译报错解决方法(STM32F103C8T6)

[复制链接]
222|43
晓伍 发表于 2025-12-13 11:20 | 显示全部楼层 |阅读模式
大家学习STM32F103C8T6的过程中,如果程序编写完全符合逻辑,但总是编译出现报错情况,一直排查不掉,那很可能是Keil软件没有设置好导致的。下面谈一点粗浅看法,仅供参考。设置Keil软件的时候,可以关注以下2个方面的问题:

(1)点击Options for Target ‘Target 1’按钮,进入如下界面,在Target菜单页面下,将Code Generation中的ARM Compiler 从默认的Use default compiler version 6修改为Use default compiler version 5;

11727693b7c93009db.png

(2)在C/C++菜单页面下,Language/Code Generation处勾选C99 Mode。

55754693b7c8a58f5a.png

如果不勾选C99 Mode的话,当程序中的变量(包括结构体)没有定义在程序的最前面的话,编译会报错,比如下面程序中的结构体定义在中间的情况,编译就通不过。解决的方法有2种:把定义的结构体放在程序的开头;或者勾选C99 Mode。个人认为勾选C99 Mode方法简便,可增加程序编写的灵活性,而且还能够一劳永逸地解决编译报错的问题。

23335693b7c8a6537b.png

————————————————
版权声明:本文为CSDN博主「sandywonderful」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sandywonderful/article/details/155539569

updownq 发表于 2025-12-14 08:12 | 显示全部楼层
基于老版的ARM编译技术。它对C语言的语法检查相对“宽松”,兼容性极好
geraldbetty 发表于 2025-12-14 12:58 | 显示全部楼层
头文件路径、预定义宏这两项也经常被忽略,导致“明明代码没问题却编译不过”的情况。
cemaj 发表于 2025-12-14 13:27 | 显示全部楼层
能直接编译通过              
vivilyly 发表于 2025-12-14 13:53 | 显示全部楼层
卡在“逻辑没错却编不过”的困境,往往就是这些环境配置细节导致的
maudlu 发表于 2025-12-14 14:15 | 显示全部楼层
Keil 编译报错但代码逻辑正确时,优先检查编译器版本
albertaabbot 发表于 2025-12-14 16:01 | 显示全部楼层
把定义的结构体放在程序的开头。              
qiufengsd 发表于 2025-12-14 17:04 | 显示全部楼层
Keil 编译报错但代码逻辑正确时,优先检查编译器版本
robertesth 发表于 2025-12-14 17:32 | 显示全部楼层
可解决部分因编译器特性差异导致的编译错误。
mikewalpole 发表于 2025-12-14 18:00 | 显示全部楼层
C89标准要求变量必须在函数或代码块的起始处声明,若结构体定义位于代码中间
febgxu 发表于 2025-12-14 19:05 | 显示全部楼层
变量 / 结构体定义位置导致的报错,核心解决方法是开启C99 Mode,无需调整代码结构
loutin 发表于 2025-12-14 20:07 | 显示全部楼层
Keil MDK 中编译器 V6 对语法兼容性、路径规则要求更严格,而 STM32F103 的标准库 / 工程模板大多基于 V5 开发,这是新手最常遇到的编译报错原因之一。
pentruman 发表于 2025-12-14 21:25 | 显示全部楼层
经验非常有价值!              
598330983 发表于 2025-12-15 15:24 | 显示全部楼层
解决方法是开启C99 Mode
xinxianshi 发表于 2025-12-16 12:06 | 显示全部楼层
是Keil软件没有设置好导致的
alvpeg 发表于 2025-12-16 16:13 | 显示全部楼层
强烈建议所有新项目都勾选C99 Mode。
bartonalfred 发表于 2025-12-16 17:10 | 显示全部楼层
切换为 Use default compiler version 5 后重新编译,可规避部分兼容性问题。
elsaflower 发表于 2025-12-16 17:49 | 显示全部楼层
勾选 C99 Mode现代C语言编程的基石。
jkl21 发表于 2025-12-16 20:27 | 显示全部楼层
首要目标是让程序跑起来,理解原理
burgessmaggie 发表于 2025-12-16 21:57 | 显示全部楼层
为什么Keil默认不开启?              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

164

主题

4582

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0