我正在尝试使用签名
调用库函数void GPIO_Init(GPIO_InitTypeDef* GPIO_InitStruct)
其中GPIO_InitTypeDef
是typedef
结构。
我尝试过以下操作:
GPIO_InitTypeDef NE1 = {
7, GPIO_Mode_AF, GPIO_Speed_25MHz, GPIO_OType_PP, GPIO_PuPd_UP
};
GPIO_Init(NE1);
但是我收到编译错误
错误:期望'GPIO_Init'的参数1的不兼容类型 'struct GPIO_InitTypeDef *'但参数类型为'GPIO_InitTypeDef'
我还尝试使用struct
关键字:
struct GPIO_InitTypeDef NE1 = {
7, GPIO_Mode_AF, GPIO_Speed_25MHz, GPIO_OType_PP, GPIO_PuPd_UP
};
GPIO_Init(NE1);
但是我得到了编译错误
错误:'NE1'的存储大小未知
我做错了什么,以及拨打GPIO_Init
的正确方法是什么?
答案 0 :(得分:1)
您需要使用:
GPIO_Init (&NE1); // <- Note the '&' indicating pointer-to
该函数需要指针到GPIO_InitStruct
结构,如下所示:
void GPIO_Init (GPIO_InitTypeDef * GPIO_InitStruct)
// ^
// pointer
但是你的NE1
变量是一个真正的结构,所以你必须使用&
来获取它的指针,所以你可以传递它。
因为您试图传递结构而不是指向结构的指针,这就是导致incompatible type
错误的原因。