写第1个STM32程序常见错误及解决方法.doc
文本预览下载声明
启动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,你会发现第二个错误已经解决了,但是出现了一个新错误,这个错误我们先不管。
我们先添加下面这么一段代码:
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)
{
}
}
然后点击
显示全部