stm32_eval.h转载:https://blog.csdn.net/hughkirk/article/details/52692723

2024-01-24 13:38

本文主要是介绍stm32_eval.h转载:https://blog.csdn.net/hughkirk/article/details/52692723,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境: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.0\Project\STM32F10x_StdPeriph_Template\main.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函数,都会弹出

".\Objects\LED_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.0\Utilities\STM32_EVAL\Common\stm32_eval_名称.c(1323):warning:  #223-D: function"函数名" declared implicitly”

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



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

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


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


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

这篇关于stm32_eval.h转载:https://blog.csdn.net/hughkirk/article/details/52692723的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/639864

相关文章

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu