1.启动KEIL,创建工程以后,先用创建文件,然;到你的工程文件夹下面,命名为main.c(其他也;然后输入以下几行代码:;#include"stm32f10x.;voidmain(void);}然后点击Build,会有以下报错信息:;C:KeilARMIncSTSTM32;这是说stm32f10x.h中要求工程在预编译时;解决办法:请点
1. 启动KEIL,创建工程以后,先用创建文件,然后什么也不干,直接点击保存,保存
到你的工程文件夹下面,命名为main.c(其他也可以,命名为main.c是为了方便你同其他的C文件快速区分开来)。
然后输入以下几行代码:
#include "stm32f10x.h"
void main(void)
{
} 然后点击Build,会有以下报错信息:
C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #errordirective: "Please select first the target STM32F10x device used inyour application (in stm32f10x.h file)"
这是说stm32f10x.h中要求工程在预编译时通过一个字符串,来识别所用的芯片FLASH大小,然后确定头文件中哪些语句有效。ST把STM32按FLASH大小尺寸来归类的,具体在STM32参考手册里面有。
解决办法:请点击
中的
打开的界面中选到选项,然后Define里面输入STM32F10X_MD(因为这个实验板上用的STM32F103C8T6对应这个“中等容量的FLASH”,换做其他芯片不一定是这个字符串),如图:
然后点击OK。 再,然后会出第二个错误:
C:KeilARMIncSTSTM32F10xstm32f10x.h(8297): error: #5:cannot open source input file "stm32f10x_conf.h": No such file ordirectory
这说明文件包含的路径没有设置好。
解决办法: 按上面所述选到选项。然后在
下选择,再点击,然后打开目录找到固件库里面的
这个文件(最好能把
这个文件夹复制出来保存到一个纯英文路径的目录下),然后选择中里面的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 (referredfrom startup_stm32f10x_md.o).
出现这个错误是因为SystemInit这个符号没有定义,这个其实是一个函数,定义在system_stm32f10x.c中,但是这个文件却在Keil的安装路径下。
|