keil 5 宏定义IO口问题

虎仔仔 2024-07-06 18:28:50

#define  DS1_kjiHIGH  {    GPIO_Init_out( LL_GPIO_PIN_2);                                                            //GPIO(PIN脚,输出)
                                        LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2);    }                                //输出高电平

 

..\Inc\Control.h(26): error:  #79: expected a type specifier
                                          LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2);    }                                //输出高电平
..\Inc\Control.h(26): error:  #79: expected a type specifier
                                          LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2);    }                                //输出高电平
..\Inc\Control.h(26): error:  #260-D: explicit type is missing ("int" assumed)
                                          LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2);    }                                //输出高电平
..\Inc\Control.h(26): error:  #147: declaration is incompatible with "void LL_GPIO_SetOutputPin(GPIO_TypeDef *, uint32_t)"  (declared at line 1020 of "..\Drivers\PY32F0xx_HAL_Driver\Inc\py32f0xx_ll_gpio.h")
                                          LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2);    }                                //输出高电平
..\Inc\Control.h(26): error:  #169: expected a declaration
                                          LL_GPIO_SetOutputPin (GPIOA,LL_GPIO_PIN_2);    }                                //输出高电平
..\Inc\Control.h(41): warning:  #12-D: parsing restarts here after previous syntax error

 

这个需要怎么处理?

...全文
517 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
勇敢滴勇 2024-07-10
  • 打赏
  • 举报
回复

你在宏定义中遇到了一些语法错误,导致编译器无法正确解析你的代码。以下是一些可能的问题和解决方案:

问题原因

  1. 宏定义格式错误:宏定义中使用了 {} 可能导致编译器无法正确解析。
  2. **宏定义的多行语句需要使用反斜杠 \**:如果宏定义包含多行语句,需要使用反斜杠 \ 来连接这些行。

修改宏定义

你可以通过以下方式修改你的宏定义:

  1. 使用反斜杠 \ 连接多行语句

    #define DS1_kjiHIGH  do { \
        GPIO_Init_out(LL_GPIO_PIN_2); /* GPIO(PIN脚,输出) */ \
        LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_2); /* 输出高电平 */ \
    } while(0)
    
  2. **避免在宏定义中使用 {}**:
    如果你的宏定义只有一行,可以直接定义成一行:

    #define DS1_kjiHIGH  ( \
        GPIO_Init_out(LL_GPIO_PIN_2), /* GPIO(PIN脚,输出) */ \
        LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_2) /* 输出高电平 */ \
    )
    

完整示例

以下是一个完整的宏定义示例,使用了 do-while 结构以确保宏在使用时的正确性:

#define DS1_kjiHIGH  do { \
    GPIO_Init_out(LL_GPIO_PIN_2); /* GPIO(PIN脚,输出) */ \
    LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_2); /* 输出高电平 */ \
} while(0)

解释

  1. **do { ... } while(0)**:这种方式确保宏在任何地方都能正确使用,避免因为语句末尾的分号或其它原因导致的语法错误。
  2. **反斜杠 \**:用来将宏定义分成多行,以提高可读性。

注意事项

  • 确保 GPIO_Init_outLL_GPIO_SetOutputPin 函数的声明和定义正确。
  • 确保包含了必要的头文件,例如 py32f0xx_ll_gpio.h

通过以上修改,你应该能够解决编译器错误,并正确定义和使用你的宏。

luj_1768 2024-07-07
  • 打赏
  • 举报
回复

void LL_GPIO_SetOutputPin(GPIO_TypeDef *, uint32_t) 是此函数的原始声明。错误提示是:在参数传递声明中使用了泛化传递,调用时需要提供一个类型说明。但是,可能存在其他问题,那两个参数应该是预设的值,正常情况下不应该出问题。应该查一下两个预设值的原始定义,或许需要信息加强。

m0_37959379 2024-07-07
  • 打赏
  • 举报
回复

66666666

608

社区成员

发帖
与我相关
我的任务
社区描述
异构开发技术
社区管理员
  • OpenCL和异构编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧