STM32关于各种头文件No such file&nb

发布者:EnchantedWish最新更新时间:2017-11-22 来源: eefocus关键字:STM32  头文件 手机看文章 扫描二维码
随时随地手机看文章

1.首先,一定要清晰的了解工程设置路径的含义,为什么要设置这个路径而不是别的?出于什么原因设置的?答:工程设置的路径是在搜索*.h文件。

下图是我的工程路径,其中User文件夹是用来存放我自己需要编写或修改的文件。

 

我们再看来一下User路径下的文件。其中3个.c文件和2个.h文件都是在官方库的STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_ExamplesSDIO路径下复制过来的。

STM32_EVAL存放着从官方库里边复制过来的

stm32_eval.c

stm32_eval.h

stm32_eval_sdio_sd.c

stm32_eval_sdio_sd.h

stm3210e_eval.c

stm3210e_eval.h

共6个文件。我们先不管这个文件夹。

此时编译,会提示

..Userstm32f10x_it.c(26): error:  #5: cannot open source input file "stm32_eval_sdio_sd.h": No such file or directory

..Usermain.c(24): error:  #5: cannot open source input file "stm32_eval_sdio_sd.h": No such file or directory 

如下图:

仔细观察会发现,是stm32f10x_it.c和main.c提示找不到stm32_eval_sdio_sd.h。

那为什么是这两个文件提示呢?我们观察到在main.c和stm32f10x_it.c的最上方都引用了stm32_eval_sdio_sd.h这个头文件,见下图:

 

哦,原来是.c文件引用.h文件,而找不到.h文件就会报错。stm32f10x_it.c还引用了stm32f10x_it.h了呢?那为什么不报错呢?原因见下图:

在User路径内我们存放着stm32f10x_it.h,stm32f10x.c能够找到stm32f10x.h所以就不报错。

stm32f10x_it.c引用了stm32f10x.h和stm32_eval_sdio_sd.h。那为什么能够找到stm32f10x.h而找不到stm32_eval_sdio_sd.h呢?

终于引到正题了。这就是我要说的工程设置选项卡C/C++中include path如何设置的问题了。

下图是目前的设置:

从上图可以看到,我们搜索了User目录,而stm32f10x_it.h即存放在该目录下,因此能够搜索到。而我把stm32_eval_sdio_sd.h存放在STM32_EVAL目录内,故搜索不到该文件。所以解决办法就是添加STM32_EVAL这个路径。我们再编译,可以看到上述提示已经解决了。

 

3.这引申出另一个问题来,依然和工程设置有关,我们继续。

仔细观察,编译stm32f10x_it.c这个文件时提示UserSTM32_EVALstm32_eval.h找不到stm3210e_eval/stm3210e_eval.h。

编译main.c这个文件时提示UserSTM32_EVALstm32_eval.h找不到stm3210e_eval/stm3210e_eval.h。

 

原因是这两个文件都引用了"stm32_eval_sdio_sd.h",而"stm32_eval_sdio_sd.h"又引用了stm32_eval.h。

stm32_eval.h提示找不到stm3210e_eval/stm3210e_eval.h。

为什么是这样呢?我们在stm32_eval.h看到了如下代码:

它的含义是相对于stm32_eval.h这个文件,到stm3210e_eval目录内去找stm3210e_eval.h这个文件。显然我没有stm3210e_eval这个路径,因为我是把stm32103_eval.h和stm32_eval.h放在同一个路径下的,都放在了STM32_EVAL这个路径内。所以,也找不到stm3210e_eval.h。

知道问题原因了,也就知道如何解决了。2个办法:

1.创建UserSTM32_EVALstm3210e_eval这个路径,把stm3210e_eval.h存放在此。并且在include path中添加..UserSTM32_EVALstm3210e_eval即可。

2.将代码修改为#include "stm3210e_eval.h"也可。

通常我用第2种方法,目录结构简单一些。


关键字:STM32  头文件 引用地址:STM32关于各种头文件No such file&nb

上一篇:STM32引脚模式GPIOMode_TypeDef
下一篇:arm交叉编译环境配置

推荐阅读最新更新时间:2024-03-16 15:46

STM32 J-LINK SW 调试常见问题
STM32 支持 SW 调试,只需用占用两个端口 SWDIO/SWCLK 及 VCC/GND,最多四条线就可以调试。 SWDIO/SWCLK 不需要上拉或下拉电阻。 调试时常见 No Cortex-M SW Device Found 问题,可以尝试以下方法: 1、可能软件设置了JTAG_SW_DISABLE,请将BOOT0接到VCC然后复位 2、VCC电压过低,可以尝试降低 JLINK/JTRACE Cortex-M Driver Setup 中的 Max Clock,找到合适的时钟频率 3、提示找不到J-LINK,检查是否板子是否没有上电
[单片机]
STM32高级开发(11)-使用GDB调试你的工程
在GNU编译器中,GDB无疑起着无足轻重的位置,常言有道:写工程3分靠写,7分靠调。GDB作为GNU编译器下的标准调试工具,在我们的项目编写即调试过程中会被平凡的使用到。而由于我们在IDE环境下娇生惯养出来的习惯,我们可能不太容易上手一个用命令行为主要操作和显示形式的调试器。所以在这篇中我们会为大家详细的讲解GDB工具的使用,来让大家快速的入门。 怎样启动arm-none-eabi-gdb 之前我们在安装和介绍调试器驱动的时候,曾举过例子,来使用指令开启一个操作接口,用以为gdb程序提供连接。这就是嵌入式GDB的工作方式,详细来说就是,使用调试器的驱动软件指令将调试器连接目标板,并将驱动软件的GDB指令接口开启在一个设定的计算
[单片机]
<font color='red'>STM32</font>高级开发(11)-使用GDB调试你的工程
STM32中0x1u 0u的含义
今天见到这种函数,查了一些他们的含义 后缀就是告诉编译器该常数的属性。 默认为有符号INT型,加了u就是无符号的,加了l就是long型。 做下移位就知道结果了。以0x80为例,左移次数过多编译器会提示你符号位被改变,即负数被移位成正数。加个u的话就被编译器识别为无符号数,可以随意移位。不会影响符号位。 例如: C语言里面0x8000000000000000u这样的常数一律默认为int型,不是什么字节。至于int型是4字节还是2字节那就是编译器的问题了。加u尾缀并不会扩展常数占用的字节数,加ul才会从int型长度扩展成long型长度。 个人理解: 也就是说0x00是int型,0x00u是无符号int型,0x00ul长
[单片机]
<font color='red'>STM32</font>中0x1u 0u的含义
STM32 UART串口通讯编程方法
在对通讯时间要求比较高的时候,就需要自己对UART的通讯底层直接进行操作。我以STM32单片机为例,讲一下比较快速的UART编程方法。——其实不止是STM32这么处理,我以前使用过51的单片机,TI的MSP单片机,三菱的16位单片机,都可以采用这种方法。 基本的处理思路如下: 1. UART接收的处理方法 打开UART的接收中断,每收到一个字节就放到接收缓冲区,同时更新接收指针。当连续100ms没有收到接收字符,则认为本次帧接收完毕,置位帧接收完成标志,由主程序进行处理。 2. UART发送的处理方法 将需要发送的数据放到发送缓冲区,设置发送长度。然后发送第一个字节,并打开发送中断。在发送中断中判断是否已经发送
[单片机]
STM32控制4个LED灯循环点亮源程序
电路原理图如下: 单片机源程序如下: #include led.h void Delay(unsigned int count); //延时函数 //int main(void) //{ // // LED_Init(); //初始化与LED连接的硬件接口 // while(1) // { // u32 LED=0x00000001;//设置初始控制码 // //逐一点亮 // for(u8 i=0;i 4;i++) // { // GPIO
[单片机]
<font color='red'>STM32</font>控制4个LED灯循环点亮源程序
STM32外部中断易出错总结
前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark。 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发; 二:外部中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。 STM32 分组和对应中断处理函数分配: 管脚 中断标志 中断处理函
[单片机]
STM32串口接收发送子程序
/*上传STM32串口接收发送子程序,调试验证OK,供参考*/ #include STM32_UartImpl.h static UART_HandleTypeDef* pstm32uart_entry = NULL; int STM32_SendBuffer(const char* pcmd); const char* STM32_GetBuffer(void); #define UART__TIMEOUT 500 void WaitSTM32UartReady() { HAL_UART_StateTypeDef status; do { status = HAL_UART_GetState(pstm
[单片机]
深度解析STM32驱动LCD原理
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 01驱动流程 使用FSMC驱动LCD 关于FSMC,把数据写入相应的地址,FSMC就会把地址从FSMC_A出去,写入的数据会会从FSMC_D发出去。至于片选等信号线都是自动的。读的话,直接读相应的地址,就会拿到改地址上的数据。 FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即RD) 片选信号
[单片机]
深度解析<font color='red'>STM32</font>驱动LCD原理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
502 Bad Gateway

502 Bad Gateway


openresty
设计资源 培训 开发板 精华推荐

502 Bad Gateway

502 Bad Gateway


openresty
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


    openresty
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
502 Bad Gateway

502 Bad Gateway


openresty