stm32编译gbd错误
1. stm32编译时出现 error: #35: #error directive: "Please select first the target STM32F10x device used
我以前做工程的时候也出现过这样的错误,我用的MDK3.5,你现在用该是用MDK4.12了吧,不管什么版本的吧,做工程的时候得先选择你的CPU型号,如果没有选择应该会出现如上的错误,选择错误的话,会根绝你的工程弹出不同的提示,比如,ROM 不足,FLASH ERROR等错误。还有一种可能就是你的初始化文件,我指的是MDK里DEBUG的初始化文件选择有问题。你先试试吧,如果不行,可以说一下你的CPU型号,和MDK版本号,以及工程的特殊性,大家也好帮你分析!
2. STM32原子的程序编译时出现问题求解答
首先下载ST-LINK的驱动:,这是网络云下载地址。解压后执行dpinst_x86.exe,若不能用卸载后再执行dpinst_amd64.exe。完成后如图所示。把ST-Link通过usb连接到电脑,然后打开设备管理器,可以看到会多出一个设备将图中的ST-LINK连接到开发板后,再通过usb接口和电脑相连接,之后通过电源线给开发板供电。打开已经编写好的程序,编译一遍确保程序可用。(默认前提:MDK已经下载安装,且添加了stm32的的支持包)根据图中步骤,配置MDK,注意不要错选漏选。点击“SETTING”后出现图中所示,按照途中信息配置(也可根据自己的需求配置)点击“flashdownload”,勾选以框中3项,根据自己使用的stm32芯片配置第二个框中的芯片,确定回到上一界面。(默认前提:MDK已经下载安装,且添加了stm32的的支持包)选择“Utilities”,勾选图中选项,完成后点击确定。配置完成后,确保开发板开启且正常使用,点击“load”下载程序至开发板。完成后会有相应提示。
3. STM32编译错误,初学者求指点
原因:
出现上述错误则是因为变量k重复定义,把你的头文件中的变量定义前加extern(只是变量声明不用初始化),再在某一个你要调用该变量的c文件的程序之前再定义(注意第一个调用的c文件要负责附带初始化该变量,其他调用的c文件就不需要初始化过程啦)一下就可以了。
4. Keil 编译STM32 遇到异常怎么解决
这个问题一般出现在移动库,或者将两个程序合并的时候报错
原因是旧版的库与新版的库发生冲突了,冲突的原因是旧版和新版都定义了同一个东西,比如“s32”,于是就会发生重定义的报错
解决这个问题的方法其实也不难,因为编写程序的时候有一个防止重定义的宏,在新版的库里面添加这样的一个宏就可以消除大部分的错误了
我们先找到从定义的地方,双击错误跟踪到报错的地方我们可以看到这里就是type定义的地方,看到上面有一个“#ifndef
__STM32F10x_TYPE_H”,这个就是旧版的宏,只要将这个宏在新版的相应位置定义一下就好
到新版的库文件中,注意要消除只读的设置,从错误来看,是“s32”发生了重定义,那么就是说,新版的库应该也是有“s32”的定义,于是用搜索功能,找到“s32”定义的地方
然后在这个定义的上方补充定义这个宏就可以解决一部分的问题了,添加这样一段
#ifndef
__STM32F10x_TYPE_H//补充定义旧版的宏
#define
__STM32F10x_TYPE_H
#endif
#47-D:
incompatible
redefinition
of
macro
"SCS_BASE"
的错误解决方法也差不多,补充定义旧版宏即可解决大部分问题,这次是在core_cm3.c文件中,注意解锁
5. STM32编译出错
error: #137: expression must be a modifiable lvalue
描述:表达式必须是一个可以修改的左值
主要出现在这种现象
:a=NUM;
NUM是一个数值或表达式
,a为一个变量
但a被定义为像const这种不可更改的类型导致NUM不能赋值给变量
解决方法要么放弃赋值要么修改变量属性
6. stm32编译时出错问题解决
对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern int i;这一句只是对变量 i 进行声明,在c文件的程序之前必须加上int i进行定义。extern int i=0;这一句声明和定义都做了。
对于大一点的程序,有很多c文件和头文件,这个时候全局变量就必须在头文件中声明(不需要初始化),然后在一个c文件中定义(该初始化的要初始化)。如果在头文件中定义,则编译的时候会出现重复定义的错误。如果只有头文件中声明就会出现没有定义有警告。
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: K
MODULE: 222.obj (222)
出现上述错误则是因为变量k重复定义,把你的头文件中的变量定义前加extern(只是变量声明不用初始化),再在某一个你要调用该变量的c文件的程序之前再定义(注意第一个调用的c文件要负责附带初始化该变量,其他调用的c文件就不需要初始化过程啦)一下就可以了。
另外: 下次最好能把程序贴出来
7. stm32编译问题
项目中同时包含以下启动文件,
startup_stm32f10x_hd.s startup_stm32f10x_md.s startup_stm32f10x_ld.s
应该针对不同的CPU选择不同的启动文件,从项目中删除不相关的启动文件就可以了;分别对应小容量,中容量,大容量;具体看手册.