野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18813|回复: 17

程序编译出错

[复制链接]
发表于 2014-1-10 10:29:21 | 显示全部楼层 |阅读模式
.\Output\EXTI.axf: Error: L6218E: Undefined symbol EXTI_PE5_Config (referred from main.o).
.\Output\EXTI.axf: Error: L6218E: Undefined symbol GPIO_ReadOutputDateBit (referred from stm32f10x_it.o).
.\Output\EXTI.axf: Error: L6218E: Undefined symbol NCIV_PriorityGroupConfig (referred from exit.o).


回复

使用道具 举报

发表于 2014-1-10 10:30:22 | 显示全部楼层
楼主是没有把定义了这些函数的c源文件添加到工程里吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 10:30:29 | 显示全部楼层
main.c


#include "stm32f10x.h"
#include "led.h"

int main(void)
{
        LED_GPIO_Config();        //初始化led端口
        LED1( ON );
       
        EXTI_PE5_Config();
       
  while (1)
  {
  }
}


回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 10:31:13 | 显示全部楼层
exti.c文件

#include "stm32f10x.h"


/*        函数名: NVIC_Configuration
*                描述        : 配置嵌套向量中断控制器NVIC
*                 输入        : 无
*                输出        : 无
*/
static void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
       
        //设置中断优先组为第一组
        NCIV_PriorityGroupConfig( NVIC_PriorityGroup_1);
       
        //配置PE5为中断源
        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;       
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;        //抢占优先级为 0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级为 0
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
/*
* 函数名: EXIT_PE5_Config
* 描述        : 配置 Pe5为 线中端口 并设置中断优先级
* 输出        : 无
* 输入        : 无
*/

void EXIT_PE5_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
       
        //开启PE5的时钟
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
       
        NVIC_Configuration();        //初始化NVIC
       
        //初始化中断线Pe5
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        //上拉输入
        GPIO_Init(GPIOE, &GPIO_InitStructure);
       
        //配置中断线Pe5
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);        //配置PE5中断输入线

        EXTI_InitStructure.EXTI_Line = EXTI_Line5;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        //中断请求
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;        //下降沿触发
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;       
       
        EXTI_Init(&EXTI_InitStructure);
       
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 10:32:10 | 显示全部楼层
在stm32f10x_it.c文件最后面加了
void EXTI9_5_IRQHandler(void) // PE5Io中断
{
        if(EXTI_GetITStatus(EXTI_Line5) != RESET)        //判断是否产生中断
        {
                //LED取反
                GPIO_WriteBit(GPIOC, GPIO_Pin_3,(BitAction)(1-GPIO_ReadOutputDateBit(GPIOC, GPIO_Pin_3)));
                EXTI_ClearITPendingBit(EXTI_Line5);        //清除中断标志
        }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 10:36:22 | 显示全部楼层
随风 发表于 2014-1-10 10:30
楼主是没有把定义了这些函数的c源文件添加到工程里吧?

添加了啊 自己写的文件都添加到user文件夹了  stm32h10x.conf.h 里面也添加了那四个头文件
回复 支持 反对

使用道具 举报

发表于 2014-1-10 10:39:53 | 显示全部楼层
|~~練^習_. 发表于 2014-1-10 10:36
添加了啊 自己写的文件都添加到user文件夹了  stm32h10x.conf.h 里面也添加了那四个头文件

不只是添加到文件夹的目录,还要在添加到keil的工程项目里边,


如图:确保你的文件也在这一栏
`JU3PHDGAV3NEOGT4E.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 10:41:36 | 显示全部楼层
随风 发表于 2014-1-10 10:39
不只是添加到文件夹的目录,还要在添加到keil的工程项目里边,

也添加进去了 不行
回复 支持 反对

使用道具 举报

发表于 2014-1-10 10:43:30 | 显示全部楼层
你的main文件和it文件没有包含按键的头文件,没有包含到声明
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 10:51:37 | 显示全部楼层
随风 发表于 2014-1-10 10:43
你的main文件和it文件没有包含按键的头文件,没有包含到声明

哪个按键的头文件?
回复 支持 反对

使用道具 举报

发表于 2014-1-10 10:53:09 | 显示全部楼层
肯定是你没有添加声明才找不到的,你对比一下火哥的程序
回复 支持 反对

使用道具 举报

发表于 2014-1-10 10:54:04 | 显示全部楼层
|~~練^習_. 发表于 2014-1-10 10:51
哪个按键的头文件?

exti的头文件,文件里要包含exti里函数的声明
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 11:17:00 | 显示全部楼层
随风 发表于 2014-1-10 10:54
exti的头文件,文件里要包含exti里函数的声明

很奇怪 一开始我添加了exti的头文件之后还是报错,然后我发现我自己定义那个配置Pe5为中断线的那个函数写成了EXIT_PE5_Config 声明 也是这样,后来我把两个都改成EXTI_PE5_Config就可以了,这是自己定义的函数,声明也对应了,为什么会报错的? 而且即使改了还有另外两个错误,然后我把错误的那两行复制了火哥的程序对应的那两行之后,现在编译通过了,这是什么回事?
回复 支持 反对

使用道具 举报

发表于 2014-1-10 11:20:05 | 显示全部楼层
|~~練^習_. 发表于 2014-1-10 11:17
很奇怪 一开始我添加了exti的头文件之后还是报错,然后我发现我自己定义那个配置Pe5为中断线的那个函数写 ...

因为你main里调用的是EXTI_PE5_Config函数,你调用的函数与你定义的不一样,就找不到了。火哥程序对应的那两行 是extern xxx的外部函数声明吧。   这些错误都是声明的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 11:36:21 | 显示全部楼层
随风 发表于 2014-1-10 11:20
因为你main里调用的是EXTI_PE5_Config函数,你调用的函数与你定义的不一样,就找不到了。火哥程序对应的那 ...

不是,就是函数内部的,而且我也是复制那两行覆盖到我报错的那两行,而且我对了一下发现是一样的,然后我把它们都删了,重新写这两行,又可以了
回复 支持 反对

使用道具 举报

发表于 2014-1-10 11:41:03 | 显示全部楼层
|~~練^習_. 发表于 2014-1-10 11:36
不是,就是函数内部的,而且我也是复制那两行覆盖到我报错的那两行,而且我对了一下发现是一样的,然后我 ...

好奇怪的错误,但还是被你解决了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 12:18:24 | 显示全部楼层
fire 发表于 2014-1-10 11:41
好奇怪的错误,但还是被你解决了。

可能是软件的问题吧,弄了一天,终于弄好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 12:18:57 | 显示全部楼层
随风 发表于 2014-1-10 11:20
因为你main里调用的是EXTI_PE5_Config函数,你调用的函数与你定义的不一样,就找不到了。火哥程序对应的那 ...

终于解决了,还是要谢谢大哥你了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-17 22:00 , Processed in 0.034659 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表