STM32F40xx搭建Keil工程编译错误(stm32f4xx_fmc.c)

状况:

搭建完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_439xxSTM32F446xxSTM32F469_479xxSTM32F427_437xx系列的芯片,如果不是这些芯片的话将不会引用stm32f4xx_fmc.h这个头文件,也就产生了宏没有定义的问题。

具体的说,我们在Option for TargetC++选项卡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

  • 61
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
### 回答1: 是的,stm32f405rgt6芯片可以使用startup_stm32f40xx.s文件。该文件是针对STM32F40xx系列的启动文件,其中包含了初始化向量表、堆栈设置、中断向量表和启动函数等内容,可以用来启动芯片并运行程序。需要注意的是,不同的芯片可能会有不同的启动文件,因此需要根据具体的芯片型号选择相应的文件。 ### 回答2: 是的,STM32F405RGT6可以使用startup_stm32f40xx.s文件。startup_stm32f40xx.s是一个启动文件,用于为STM32微控制器提供必要的启动代码和初始化过程。该文件包含了STM32F40xx系列微控制器的系统初始化代码,包括堆栈设置、中断向量表的初始化、系统时钟源的配置等。因此,当使用STM32F405RGT6微控制器时,可以使用该启动文件来初始化系统并实现正常的功能和操作。 ### 回答3: 可以使用stm32f405rgt6与startup stm32f40xx.s一起使用。 stm32f405rgt6是一款高性能的32位ARM Cortex-M4微控制器,由STMicroelectronics生产。它有许多功能和外设,如多个串口、SPI、I2C、ADC等,适用于各种应用领域。 而startup stm32f40xx.s是一个启动文件,其中包含了处理器的初始化和复位向量表等。它是为STM32F40x系列的微控制器设计的,包括stm32f405rgt6。 启动文件是将处理器从复位状态转移到正常操作状态的一个重要组成部分。在系统初始化时,启动文件负责初始化处理器的外设、寄存器和全局变量等。它还定义了中断和异常处理的向量表,这些表将在系统运行时被处理器用来跳转到对应的中断或异常处理程序。 由于stm32f405rgt6是stm32f40xx系列的一部分,因此startup stm32f40xx.s适用于该芯片。通过将startup stm32f40xx.s与stm32f405rgt6项目结合使用,可以确保处理器正确初始化并能够正常运行。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hrx-@@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值