历史上的今天
返回首页

历史上的今天

今天是:2025年07月23日(星期三)

正在发生

2019年07月23日 | 初学者如何处理STM32创建工程时stm32_eval.h的问题

2019-07-23 来源:eefocus

环境:win10-MDK:5.15-固件库:3.5.0


1.先说对初学者来讲的解决办法

删除main.c中的所有定义和函数。只写上main(){},其他的什么都不用加。并在最后另起一行。(不另起一行会提示“without a newline”的警告。)不知道和Linux里用GCC编译程序的no newline是不是一个原因。因为文件最后表示连接下一行,而如果文件最后一行行尾有,被包含的下一个源文件会被连接。但要是最后一行用的是空行,就可以避免这种情况了。

C99原文:


Each instance of a backslash character ()immediately followed by a new-line character is deleted, splicing physicalsource lines to form logical source lines.Only the last backslash on anyphysical source lineshall be eligible for being part of such a splice. A sourcefile that is not empty shall end in a new-line character, which shall not beimmediately preceded by a backslash character before any such splicing takesplace.


加上空行后,再进行编译就没有问题了。


2.现在大概解释一下EVAL文件的问题

在没有使用工程模板,而是自己按照需要在Keil中添加文件和路径的情况下。使用固件库中一个字都没有更改的mian.c文件,在编译时会提示


..STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Templatemain.c(24):error:  #5: cannot open source input file"stm32_eval.h": No such file or directory


是stm32_eval.h文件的包含出现问题。而课本和教程上并没有说明相关的eval文件和文件夹。


官网上的说明是:


TheSTM3210E-EVAL evaluation board is a complete development platform forSTMicroelectronic's ARM Cortex-M3 core-based STM32F103ZET6 or STM32F103ZGT6microcontroller. The range of hardware features on the board help you toevaluate all peripherals (LCD, SPI Flash, USART, IrDA, USB, audio, CAN bus,smartcard, MicroSD Card, NOR Flash, NAND Flash, SRAM, temperature sensor, audioDAC and motor control) and develop your own applications.


也就是说置于Utilities文件夹下的所有相关eval文件是ST公司的测试评估板的硬件定义。而不同的样板对应不同的文件,所以main中会有


#ifdef USE_STM32100B_EVAL

 #include "stm32100b_eval_lcd.h"

#elif defined USE_STM3210B_EVAL

 #include "stm3210b_eval_lcd.h"

#elif defined USE_STM3210E_EVAL

 #include"stm3210e_eval_lcd.h"

#elif defined USE_STM3210C_EVAL

 #include "stm3210c_eval_lcd.h"

#elif defined USE_STM32100E_EVAL

 #include "stm32100e_eval_lcd.h"

#endif

的定义。


那么,按照错误说明,将eval的C文件加入工程,并在PATH上添加stm32_eval.h文件后再进行编译。


然后错误提示:


“Please select first the STM32 EVAL boardto be used (in stm32_eval.h)”


刚刚没有这样的错误提示,并且根据main.c文件中对eval的定义可知在包含了eval的头文件后,还需要选择对应的评估板。打开stm32_eval.h文件:

即是说,包含头文件就是选择评估板,因为我手头其实没有官方的评估板,就随便选了第一个。将stm32100b.h和其相关文件的路径添加进了PATH,而且在工程中加了相关的C文件。同时,按照ifdef所说,将“USE_STM32100B_EVAL”加进了编译器设置的Preprocessor Symbols的Define中。



经过这些步骤后,再进行编译,就会发现编译已经包含的C文件不会再出现问题。


新的问题出现在linking上,包含文件中声明的各种eval函数和mian里用到的eval函数,都会弹出


".ObjectsLED_Light.axf: Error: L6218E:Undefined symbol 函数名称(referred from 文件名.o)"


这类错误。如果这时你的工程中只包含了main.c和stm32_eval.c文件,那么这类未定义的错误只有6个。但如果你在操作上一步时,将对应版本的评估板所有文件加入工程,并添加进PATH,这个错误数将会飙升到30以上,编译时包含的文件里用到的函数都会蹦出提示。包含多少,蹦多少。


而如果将对应版本的eval的文件(包括Common文件夹下的)按照其他文件的处理方式,添加工程,加入编译器的PATH。就会出现另外两种类型的错误。


一个是“..STM32F10x_StdPeriph_Lib_V3.5.0UtilitiesSTM32_EVALCommonstm32_eval_名称.c(1323):warning:  #223-D: function"函数名" declared implicitly”


一个是“.ObjectsLED_Light.axf: Error: L6200E:Symbol 名称 multiply defined (by 文件名.o).”



两者都需要对相应文件的对应函数进行extern的声明操作才能解决。而且需要一个一个对照,才能找出是哪个函数重复定义,哪个函数没有声明原型。


而就像前面官网上提到的,评估板相应文件的作用是把板子上的每个硬件接口重新进行宏定义。比如这里:

不同文件对应不同的硬件主板。而对于一个初学者来说,手里要么是没有板子,要么也不会是评估板。所以一开始还没上手写程序就试图解决eval的各种文件问题没有什么太大的意义。


但eval相关的文件也有一个很大的用处,就是可以在了解了各种硬件定义后,学着这个文件进行定义自己的开发板。


推荐阅读

史海拾趣

Eurofarad公司的发展小趣事

在追求经济效益的同时,Eurofarad也积极履行社会责任,注重环保和可持续发展。公司采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。同时,Eurofarad还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了基础。

Edcon Components Netherlands Cv公司的发展小趣事

为了进一步扩大市场份额,Edcon Components Netherlands Cv开始积极拓展国际市场。公司通过对不同国家和地区的市场进行深入分析,制定了精准的市场拓展策略。通过与当地经销商建立合作关系,Edcon的产品逐渐进入国际市场,并在多个国家和地区取得了成功。国际市场的拓展不仅为公司带来了更多的商机,也提升了公司的品牌影响力。

ES Systems公司的发展小趣事

随着公司业务的不断发展壮大,ES Systems开始实施国际化战略。公司先后在海外市场设立了研发中心和销售中心,积极拓展国际市场。通过引入国际先进的管理理念和技术经验,ES Systems不断提升自身的国际化水平。同时,公司还加强了与国际知名企业的合作与交流,共同推动电子行业的发展。

BB公司的发展小趣事

BB公司的创始人是一位电子工程领域的杰出人才,他深知模拟集成电路在电子行业的巨大潜力。1956年,他在图森亚利桑那州的一个车库中创立了BB公司,开始了他的创业之路。尽管初期资金紧张,条件艰苦,但创始人凭借对技术的执着和对市场的敏锐洞察,成功研发出了一系列具有竞争力的模拟集成电路产品。他坚信,只要产品质量过硬,就能赢得市场的认可。正是这种远见和坚持,为BB公司的后续发展奠定了坚实基础。

Esterline Power Systems公司的发展小趣事

Esterline Power Systems公司在其早期阶段就致力于研发创新技术,以满足航空和国防行业对高性能电源系统的需求。一次关键的技术突破发生在公司对一种新型高效能电源控制器的研发上。面对市场上已有的产品性能瓶颈,公司的研发团队经过数月的深入研究与实验,成功开发出了具有更高效率和更稳定性能的电源控制器。这一创新不仅赢得了客户的认可,也为公司赢得了市场份额,奠定了在电源系统领域的领先地位。

Dresden Elektronik公司的发展小趣事

在Dresden Elektronik公司创立之初,其创始人看中了电子行业中嵌入式系统技术的巨大潜力。他们凭借对技术的深刻理解和敏锐的市场洞察力,开发出了一系列高性能、低成本的嵌入式系统解决方案。这些创新产品迅速在市场上获得了认可,为公司赢得了第一桶金,也为后续的发展奠定了坚实的基础。

问答坊 | AI 解惑

几个重要的RedHat Linux内核文件介绍

在网络中,不少服务器采用的是Linux系统。为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核。编译Linux内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的文件。比如对于RedHat Linux,在/boot目录下有一 ...…

查看全部问答>

公交车IC卡电路图,原程序(其实就这么简单)

采用PHILIPS公司的mifare卡作为IC卡,设计以射频为中心,以单片机为控制中心的公交车收费系统,制作的IC卡可以实现制卡、售卡自动收费的功能。…

查看全部问答>

说说你最成功的电子设计

受到liweiliang同学的启发,在他的帖子中想到了很多当初入行时候的辛酸,在日复一日的不断摸索中,不会只有辛酸和磨练,也有获得成功时的喜悦吧,大家说说做什么项目或者设计给你带来第一次成功的感觉,虽然那可能很短暂,但可能影响一生。…

查看全部问答>

根据我利用LM3S8962设计产品开发的需要,今天将研读LM3S8962 I2C英文资料心得分享如下

I2C 内部模块图如下: 从上面模块图可以看出,LM3S8962支持主从两种模式,对应外部I2C总线,本产品设计中利用LM3S8962的I2C模块对数模转换芯片DAC8571进行数目转换。因此本设计中利用I2C 主模式访问外部芯片。问题来了: 1. 怎样选择I2C主从模式?2 ...…

查看全部问答>

ezusb到cyusb的移植

我的问题是从ezusb到cyusb的移植: 以前ezusb的接口函数,比如:IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST, 现在换到cysub都是 IOCTL_ADAPT_XXXXXXXX, 请问大家有没有一个对照表。比如以前的ezusb函数是对应什么cyusb的接口 函数。谢谢! 比如: ...…

查看全部问答>

如何查看摄像头PreviewBuffer的内容?

我有PreviewBuffer的虚拟地址,想用如下方法查看下内存里有什么东西,为什么会崩溃啊?Data Abort了         int k;         PBYTE addr;         addr = (PBYTE)VitualAddr;   ...…

查看全部问答>

嵌入式linux 移植iptables 的问题

曾经在网上看到这样一篇帖子: { Linux下支持netfilter机制的配置工具就是iptables,它也就相当与一个应用程序,可以对netfilter进行配置(包过滤规则,NAT等等)。所以要实现netfilter(iptables)就要从两方面来着手:1)内核支持netfilter;2 ...…

查看全部问答>

如何让USB虚拟出一个串口来,以至于当该设备插入时显示一个USB口和一个虚拟串口

现在在做一网卡项目,实现的功能是当网卡插入Windows XP系统时,显示一个USB口和一个串口,其中USB口实现上网,串口用于走AT命令等,现在在Windows端的驱动程序都已有现成的,USB也可以上网了     但是目前系统只可以检测到USB口,无法 ...…

查看全部问答>

关于IoRegisterDeviceInterface返回的符号链接名

IoRegisterDeviceInterface的第一个参数必须是设备PDO的地址。第二个参数指出与接口关联的GUID,第三个参数指出额外的接口细分类名。只有Microsoft的代码才使用名称细分类方案。第四个参数是一个UNICODE_STRING串的地址,该串用于接收设备对象的符 ...…

查看全部问答>