以下是我用FLlibV3.1建工程遇到的一些问题,希望对你有用
在IAR下新建工程文件后,第一次编译会出现些警告,应为stm32f10x_conf.h的缘故
有的人在未包含stm32f10x_conf.h的所有C文件中包含一遍,通过编译
有的人在工程文件的option 选项中C/C++ Compiler 中的Preprocessor选项中预定义USE_STDPERIPH_DRIVER,编译通过
其实这个USE_STDPERIPH_DRIVER在stm32f10x.h中有定义的,定义如下:
#if !defined USE_STDPERIPH_DRIVER
/*#define USE_STDPERIPH_DRIVER*/
#endif
所以如果用到ST的库函数,需要把这里打开
当然stm32f10x_conf.h,在main.c文件以及其他文件中找不到,为什么编译通过了呢
问题任然在stm32f10x.h,其实它包含了stm32f10x_conf.h,源程序如下:
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
所以新建工程文件时关于stm32f10x_conf.h的问题,只需在stm32f10x.h中打开就OK了
第一次自己建工程文件时,可能会报:
Error[Li006]: duplicate definitions for "__vector_table"
那是启动代码文件重复,有四个或更多启动代码文件在FWLib的CMSIS中,如:
startup_stm32f10x_cl.s
startup_stm32f10x_hd.s
startup_stm32f10x_ld.s
startup_stm32f10x_md.s
根据自己stm32的型号选择相应的就OK,我的是STM32F107,所以选startup_stm32f10x_cl.s
不要的不用包含进来,移除掉也可以,或则在相应文件上右键单击选option,选中exclude,就OK
其余的设置按那些教程配置IAR就OK了
在system_stm32f10x.c中需要完成时钟配置,STM32F107最高时钟72M,所以设置如下:
#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL)
/* #define SYSCLK_FREQ_HSE HSE_Value */
#define SYSCLK_FREQ_24MHz 24000000
#else
/* #define SYSCLK_FREQ_HSE HSE_Value */
/* #define SYSCLK_FREQ_24MHz 24000000 */
/* #define SYSCLK_FREQ_36MHz 36000000 */
/* #define SYSCLK_FREQ_48MHz 48000000 */
/* #define SYSCLK_FREQ_56MHz 56000000 */
#define SYSCLK_FREQ_72MHz 72000000
#endif
|