加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

stm32f10x_conf.h错误解决办法

(2015-03-07 12:43:51)
分类: Embedded
14写第一个STM32程序常见错误及解决方法

1.启动KEIL,创建工程以后,先用创建文件,然;到你的工程文件夹下面,命名为main.c(其他也;然后输入以下几行代码:;#include"stm32f10x.;voidmain(void);}然后点击Build,会有以下报错信息:;C:\Keil\ARM\Inc\ST\STM32;这是说stm32f10x.h中要求工程在预编译时;解决办法:请点


1. 启动KEIL,创建工程以后,先用创建文件,然后什么也不干,直接点击保存,保存

到你的工程文件夹下面,命名为main.c(其他也可以,命名为main.c是为了方便你同其他的C文件快速区分开来)。

然后输入以下几行代码:

#include "stm32f10x.h"

void main(void)

{

} 然后点击Build,会有以下报错信息:

C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"

这是说stm32f10x.h中要求工程在预编译时通过一个字符串,来识别所用的芯片FLASH大小,然后确定头文件中哪些语句有效。ST把STM32按FLASH大小尺寸来归类的,具体在STM32参考手册里面有。

解决办法:请点击

中的

打开的界面中选到 选项,然后Define里面输入STM32F10X_MD(因为这个实验板上用的STM32F103C8T6对应这个“中等容量的FLASH”,换做其他芯片不一定是这个字符串),如图:

然后点击OK。 再,然后会出第二个错误:

C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(8297): error: #5: cannot open source input file "stm32f10x_conf.h": No such file or directory

这说明文件包含的路径没有设置好。

解决办法: 按上面所述选到选项。然后在

下选择,再点击,然后打开目录找到固件库里面的

这个文件(最好能把

这个文件夹复制出来保存到一个纯英文路径的目录下),然后选择中里面的inc文件夹,然后再如法炮制选中里面的src文件夹。然后点击确定。效果如图:

点击OK,然后出现下图,再点OK保存

再点击OK。然后再Build,你会发现第二个错误已经解决了,但是出现了一个新错误,这个错误我们先不管。

2. 我们先添加下面这么一段代码:

void RCC_Config(void)

{

ErrorStatus HSEStartUpStatus;

RCC_DeInit();

RCC_HSEConfig(RCC_HSE_ON);

HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS)

{

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

FLASH_SetLatency(FLASH_Latency_2); /

RCC_HCLKConfig(RCC_SYSCLK_Div1);

RCC_PCLK2Config(RCC_HCLK_Div1);

RCC_PCLK1Config(RCC_HCLK_Div2);

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /

RCC_PLLCmd(ENABLE);

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

{

}

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

while(RCC_GetSYSCLKSource() != 0x08)

{

}

}

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA

|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);

}

先不解释这上面代码的意义。在main函数中调用:

void main(void)

{

RCC_Config();

while(1)

{

}

}

然后点击Build,会出现15处错误。

之所以会出现如此多错误,是因为上面代码中用到的一些函数没有被声明或者定义过。这些函数来自于STM32的标准外设库函数(通常称之为固件库),在stm32f10x_conf.h这个头文件中包含了所有外设的头文件.h,每个外设头文件都有一个对应的.c源文件与之对应。 解决办法:

右键点击

然后Add Group,重命名文件夹为比如lib_src。再右击该文件夹,出现:

选择

件夹下的src文件夹,添加以下几个文件:

,然后打开STM32F10x_StdPeriph_Driver文

然后重新Build以后,还会出现一个错误:

.\LED.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).

出现这个错误是因为SystemInit这个符号没有定义,这个其实是一个函数,定义在system_stm32f10x.c中,但是这个文件却在Keil的安装路径下。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有