STM32
直播中

徐磊

7年用户 939经验值
私信 关注
[问答]

HAL库模板下添加新的.c .h文件出现identifier的原因?怎么解决?

根据HALcubeF1创建一个工程模板,不添加其他文件下是可以编译不报错的。
可添加了自己写的BSP.C和BSP.H后报错identifier。

看了一下,这是一个枚举类型,在STM32f1xx_hal_def.h中定义。
可我的bsp.h中已经包含了这个头文件,我自己的BSP文件中也没有用这个枚举。
库中的其他外设文件都是这样写的,也没问题,不添加自己写的BSP.c时也能正常编译,添加了后就报错。
可BSP编译列表中也有这个头文件,依然报错,不知如何解决。恳请大佬教我。工程文件在最后。


  • /* Define to prevent recursive inclusion -------------------------------------*/

  • #ifndef __BSP_H

  • #define __BSP_H



  • /* Includes ------------------------------------------------------------------*/

  • #include "stm32f1xx_hal_def.h"



  • /* Exported types ------------------------------------------------------------*/



  • /* Exported define -----------------------------------------------------------*/



  • /* 端口引脚定义 */

  • //R 红色灯

  • #define R_LED_PIN                  GPIO_PIN_5

  • #define R_LED_GPIO_PORT            GPIOA

  • //G 绿色灯

  • #define G_LED_PIN                  GPIO_PIN_6

  • #define G_LED_GPIO_PORT            GPIOA

  • //B 蓝色灯

  • #define B_LED_PIN                  GPIO_PIN_7

  • #define B_LED_GPIO_PORT            GPIOA

  • //打开LED的IO的时钟

  • #define LED_GPIO_CLK_ENABLE()    __HAL_RCC_GPIOA_CLK_ENABLE()



  • /* Exported constants --------------------------------------------------------*/



  • /* Exported variables --------------------------------------------------------*/



  • /* Exported macro ------------------------------------------------------------*/



  • /* 定义单独控制RGB的宏 */

  • //红绿蓝开灯

  • #define R_LED_ON                HAL_GPIO_WritePin(R_LED_GPIO_PORT,R_LED_PIN,GPIO_PIN_SET)

  • #define G_LED_ON                HAL_GPIO_WritePin(G_LED_GPIO_PORT,G_LED_PIN,GPIO_PIN_SET)

  • #define B_LED_ON                HAL_GPIO_WritePin(B_LED_GPIO_PORT,B_LED_PIN,GPIO_PIN_SET)

  • //红绿蓝关灯

  • #define R_LED_OFF                HAL_GPIO_WritePin(R_LED_GPIO_PORT,R_LED_PIN,GPIO_PIN_RESET)

  • #define G_LED_OFF                HAL_GPIO_WritePin(G_LED_GPIO_PORT,G_LED_PIN,GPIO_PIN_RESET)

  • #define B_LED_OFF                HAL_GPIO_WritePin(B_LED_GPIO_PORT,B_LED_PIN,GPIO_PIN_RESET)

  • //红绿蓝反转

  • #define R_LED_TOGGLE                HAL_GPIO_TogglePin(R_LED_GPIO_PORT, R_LED_PIN)

  • #define G_LED_TOGGLE                HAL_GPIO_TogglePin(G_LED_GPIO_PORT, G_LED_PIN)

  • #define B_LED_TOGGLE                HAL_GPIO_TogglePin(B_LED_GPIO_PORT, B_LED_PIN)



  • /* 定义基本混色的宏*/

  • //红

  • #define LED_RED

  •                                         R_LED_ON;

  •                                         G_LED_OFF;

  •                                         B_LED_OFF

  • //绿

  • #define LED_GREEN

  •                                         R_LED_OFF;

  •                                         G_LED_ON;

  •                                         B_LED_OFF

  • //蓝

  • #define LED_BLUE

  •                                         R_LED_OFF;

  •                                         G_LED_OFF;

  •                                         B_LED_ON

  • //黄(红+绿)

  • #define LED_YELLOW

  •                                         R_LED_ON;

  •                                         G_LED_ON;

  •                                         B_LED_OFF

  • //紫(红+蓝)

  • #define LED_PURPLE

  •                                         R_LED_ON;

  •                                         G_LED_OFF;

  •                                         B_LED_ON

  • //青(绿+蓝)

  • #define LED_CYAN

  •                                         R_LED_OFF;

  •                                         G_LED_ON;

  •                                         B_LED_ON

  • //白(红+绿+蓝)

  • #define LED_WHITE

  •                                         R_LED_ON;

  •                                         G_LED_ON;

  •                                         B_LED_ON

  • //黑(全部关闭)

  • #define LED_RGBOFF

  •                                         R_LED_OFF;

  •                                         G_LED_OFF;

  •                                         B_LED_OFF





  • /* Exported functions prototypes----------------------------------------------*/

  • void GPIO_Congfig(void);







  • #endif /* __BSP_H */


  • /**

  •   ******************************************************************************

  •   * @file    NAME

  •   * @author  WHO

  •   * @brief   DO WHAT

  •   ******************************************************************************/



  • /* Includes ------------------------------------------------------------------*/

  • #include "BSP.h"



  • /* Private typedef -----------------------------------------------------------*/

  • /* Private define ------------------------------------------------------------*/

  • /* Private macro -------------------------------------------------------------*/

  • /* Private constants ---------------------------------------------------------*/

  • /* Private variables ---------------------------------------------------------*/

  • /* Private function prototypes -----------------------------------------------*/

  • /* Private functions ---------------------------------------------------------*/

  • /**

  •   * @brief  初始化按键和LED的GPIO

  •   * @param  None

  •   * @retval None

  •   */

  • void GPIO_Congfig(void)

  • {

  • /*定义一个GPIO_InitTypeDef类型的结构体*/

  •     GPIO_InitTypeDef  GPIO_InitStruct;



  •     /*开启LED相关的GPIO外设时钟*/

  •                 LED_GPIO_CLK_ENABLE();



  •     /*选择要控制的GPIO引脚*/

  •     GPIO_InitStruct.Pin = R_LED_PIN;



  •     /*设置引脚的输出类型为推挽输出*/

  •     GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;



  •     /*设置引脚为上拉模式*/

  •     GPIO_InitStruct.Pull  = GPIO_PULLUP;



  •     /*设置引脚速率为高速 */

  •     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;



  •     /*调用库函数,使用上面配置的GPIO_InitStructure初始化GPIO*/

  •     HAL_GPIO_Init(R_LED_GPIO_PORT,  GPIO_InitStruct);



  •     /*选择要控制的GPIO引脚*/

  •     GPIO_InitStruct.Pin = G_LED_PIN;

  •     HAL_GPIO_Init(G_LED_GPIO_PORT,  GPIO_InitStruct);



  •     /*选择要控制的GPIO引脚*/

  •     GPIO_InitStruct.Pin = B_LED_PIN;

  •     HAL_GPIO_Init(B_LED_GPIO_PORT,  GPIO_InitStruct);



  •     /*关闭RGB灯*/

  •     LED_RGBOFF;



  • }









  • /*********************************************END OF FILE**********************/


回帖(1)

李丽

2024-4-9 17:58:45
这个问题通常是由于编译器无法找到对应的标识符引起的。解决方法如下:

1. 确保你的BSP文件中没有使用到未定义的标识符。可能是你的BSP文件使用了某些未包含的枚举类型或函数。

2. 检查你的BSP头文件中是否正确包含了所有需要的头文件。确认头文件路径正确。

3. 确保编译器可以找到正确的HAL库文件。检查你的编译器设置,确认HAL库路径正确。

4. 在编译之前,尝试清除编译缓存。有时候,缓存的一些临时文件可能会导致问题。

如果上述解决方法都不起作用,可以参考以下建议:

1. 尝试在添加BSP文件之前,编译并运行一个最简单的HAL库示例程序,确认你的环境设置没有问题。

2. 尝试单独编译BSP文件,以确认是不是BSP文件本身的问题。

3. 缩小问题范围,逐个注释掉你的代码,看看是否还会出现相同的问题。以此确定具体是哪段代码引起了问题。

最后,请将你的工程文件作为参考提供,这样会更方便我们来帮助你解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分