2012-03-15 85 views
0

問題,我試圖調用庫函數與簽名與結構

void GPIO_Init(GPIO_InitTypeDef* GPIO_InitStruct) 

其中GPIO_InitTypeDeftypedef結構。

我曾嘗試做如下:

GPIO_InitTypeDef NE1 = { 
    7, GPIO_Mode_AF, GPIO_Speed_25MHz, GPIO_OType_PP, GPIO_PuPd_UP 
}; 
GPIO_Init(NE1); 

但我得到一個編譯器錯誤

error: incompatible type for argument 1 of 'GPIO_Init' expected 'struct GPIO_InitTypeDef *' but argument is of type 'GPIO_InitTypeDef'

我也使用struct關鍵字嘗試:

struct GPIO_InitTypeDef NE1 = { 
    7, GPIO_Mode_AF, GPIO_Speed_25MHz, GPIO_OType_PP, GPIO_PuPd_UP 
}; 
GPIO_Init(NE1); 

但他們我得到編譯器錯誤

error: storage size of 'NE1' isn't known

我做錯了什麼,以及什麼是正確的方法叫GPIO_Init

回答

1

您需要使用:

GPIO_Init (&NE1); // <- Note the '&' indicating pointer-to 

這個函數需要指針GPIO_InitStruct結構,與指示:

void GPIO_Init (GPIO_InitTypeDef * GPIO_InitStruct) 
//        ^
//       pointer 

但你NE1變量是一個實際結構,所以你必須使用&來得到它的指針,所以你可以通過它。

因爲您試圖傳遞結構而不是指向結構的指針,這就是導致您的incompatible type錯誤的原因。

+0

謝謝。我想這整個混亂來自我不正確理解我在做什麼。你能解釋一下嗎? – Randomblue 2012-03-15 09:01:23

+0

@Randomblue,當然,我已經添加了一些額外的信息,希望更清楚。 – paxdiablo 2012-03-15 09:03:54