状况:
搭建完Keil工程后进行编译后发生如下的错误:
compiling stm32f4xx_fmc.c...
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(144): error: #20: identifier "FMC_Bank1" is undefined
FMC_Bank1->BTCR[FMC_Bank] = 0x000030DB;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(149): error: #20: identifier "FMC_Bank1" is undefined
FMC_Bank1->BTCR[FMC_Bank] = 0x000030D2;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(151): error: #20: identifier "FMC_Bank1" is undefined
FMC_Bank1->BTCR[FMC_Bank + 1] = 0x0FFFFFFF;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(152): error: #20: identifier "FMC_Bank1E" is undefined
FMC_Bank1E->BWTR[FMC_Bank] = 0x0FFFFFFF;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(191): error: #20: identifier "FMC_Bank1" is undefined
tmpbcr = FMC_Bank1->BTCR[FMC_NORSRAMInitStruct->FMC_Bank];
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(195): error: #20: identifier "FMC_BCR1_MBKEN" is undefined
tmpbcr &= ((uint32_t)~(FMC_BCR1_MBKEN | FMC_BCR1_MUXEN | FMC_BCR1_MTYP | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(195): error: #20: identifier "FMC_BCR1_MUXEN" is undefined
tmpbcr &= ((uint32_t)~(FMC_BCR1_MBKEN | FMC_BCR1_MUXEN | FMC_BCR1_MTYP | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(195): error: #20: identifier "FMC_BCR1_MTYP" is undefined
tmpbcr &= ((uint32_t)~(FMC_BCR1_MBKEN | FMC_BCR1_MUXEN | FMC_BCR1_MTYP | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(196): error: #20: identifier "FMC_BCR1_MWID" is undefined
FMC_BCR1_MWID | FMC_BCR1_FACCEN | FMC_BCR1_BURSTEN | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(196): error: #20: identifier "FMC_BCR1_FACCEN" is undefined
FMC_BCR1_MWID | FMC_BCR1_FACCEN | FMC_BCR1_BURSTEN | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(196): error: #20: identifier "FMC_BCR1_BURSTEN" is undefined
FMC_BCR1_MWID | FMC_BCR1_FACCEN | FMC_BCR1_BURSTEN | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(197): error: #20: identifier "FMC_BCR1_WAITPOL" is undefined
FMC_BCR1_WAITPOL | FMC_BCR1_WRAPMOD | FMC_BCR1_WAITCFG | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(197): error: #20: identifier "FMC_BCR1_WRAPMOD" is undefined
FMC_BCR1_WAITPOL | FMC_BCR1_WRAPMOD | FMC_BCR1_WAITCFG | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(197): error: #20: identifier "FMC_BCR1_WAITCFG" is undefined
FMC_BCR1_WAITPOL | FMC_BCR1_WRAPMOD | FMC_BCR1_WAITCFG | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(198): error: #20: identifier "FMC_BCR1_WREN" is undefined
FMC_BCR1_WREN | FMC_BCR1_WAITEN | FMC_BCR1_EXTMOD | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(198): error: #20: identifier "FMC_BCR1_WAITEN" is undefined
FMC_BCR1_WREN | FMC_BCR1_WAITEN | FMC_BCR1_EXTMOD | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(198): error: #20: identifier "FMC_BCR1_EXTMOD" is undefined
FMC_BCR1_WREN | FMC_BCR1_WAITEN | FMC_BCR1_EXTMOD | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(199): error: #20: identifier "FMC_BCR1_ASYNCWAIT" is undefined
FMC_BCR1_ASYNCWAIT| FMC_BCR1_CBURSTRW | FMC_BCR1_CCLKEN));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(199): error: #20: identifier "FMC_BCR1_CBURSTRW" is undefined
FMC_BCR1_ASYNCWAIT| FMC_BCR1_CBURSTRW | FMC_BCR1_CCLKEN));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(199): error: #20: identifier "FMC_BCR1_CCLKEN" is undefined
FMC_BCR1_ASYNCWAIT| FMC_BCR1_CBURSTRW | FMC_BCR1_CCLKEN));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(253): error: #20: identifier "FMC_Bank1E" is undefined
tmpbwr = FMC_Bank1E->BWTR[FMC_NORSRAMInitStruct->FMC_Bank];
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(256): error: #20: identifier "FMC_BWTR1_ADDSET" is undefined
tmpbwr &= ((uint32_t)~(FMC_BWTR1_ADDSET | FMC_BWTR1_ADDHLD | FMC_BWTR1_DATAST | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(256): error: #20: identifier "FMC_BWTR1_ADDHLD" is undefined
tmpbwr &= ((uint32_t)~(FMC_BWTR1_ADDSET | FMC_BWTR1_ADDHLD | FMC_BWTR1_DATAST | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(256): error: #20: identifier "FMC_BWTR1_DATAST" is undefined
tmpbwr &= ((uint32_t)~(FMC_BWTR1_ADDSET | FMC_BWTR1_ADDHLD | FMC_BWTR1_DATAST | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(257): error: #20: identifier "FMC_BWTR1_BUSTURN" is undefined
FMC_BWTR1_BUSTURN | FMC_BWTR1_ACCMOD));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(257): error: #20: identifier "FMC_BWTR1_ACCMOD" is undefined
FMC_BWTR1_BUSTURN | FMC_BWTR1_ACCMOD));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(269): error: #20: identifier "FMC_Bank1E" is undefined
FMC_Bank1E->BWTR[FMC_NORSRAMInitStruct->FMC_Bank] = 0x0FFFFFFF;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(321): error: #20: identifier "FMC_Bank1" is undefined
FMC_Bank1->BTCR[FMC_Bank] |= BCR_MBKEN_SET;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(326): error: #20: identifier "FMC_Bank1" is undefined
FMC_Bank1->BTCR[FMC_Bank] &= BCR_MBKEN_RESET;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(394): error: #20: identifier "FMC_Bank2" is undefined
FMC_Bank2->PCR2 = 0x00000018;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c: 0 warnings, 30 errors
compiling stm32f4xx_fsmc.c...
就是说一堆的宏没有定义。
原因:
stm32f4xx_fmc.c的在固件库中的一个外设,仅作用于STM32F429_439xx、STM32F446xx、STM32F469_479xx、STM32F427_437xx系列的芯片,如果不是这些芯片的话将不会引用stm32f4xx_fmc.h这个头文件,也就产生了宏没有定义的问题。
具体的说,我们在Option for Target的C++选项卡的Define填写了当前所使用芯片的所属系列。
而这个宏在stm32f4xx_conf.h文件中进入的分支并没有引用stm32f4xx_fmc.h这个头文件。
解决:
不要再Keil的分组中添加stm32f4xx_fmc.c文件,删除后重新编译即可。
参考博客1:https://blog.csdn.net/BobHHH/article/details/81018862
参考博客2:https://blog.csdn.net/Cowena/article/details/49994743