GPIO的初始化代碼如下:
/*開啟時鐘*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //開啟GPIOA的時鐘,使用外設必須開啟/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure; //定義結構體變量
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,賦值為推挽輸出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIO引腳,賦值為第0號引腳
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度,賦值為50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); //傳遞給GPIO_Init函數
對應相應的GPIO的框圖來理解將更加直觀有效,如下圖:
關于GPIO的內部結構介紹。一共有八種模式,分別是上拉輸入,下拉輸入,浮空輸入,模擬輸入。同時又有推挽輸出,開漏輸出,復用推挽輸出,復用開漏輸出。其中上拉下拉浮空輸入都和上下拉電阻有關,模擬輸入用來測量外部模擬量。推挽輸出強力的控制輸出的高低電平。
開漏模式:N—MOS工作,P—MOS無效,數據寄存器為1時,下管斷開,這是輸出相當于斷開,也就是高阻模式,數據寄存器為0時,下管導通,輸出直接接到VSS,也就是輸出低電平。這種模式下,只有低電平有驅動能力,高電平沒有驅動能力。開漏模式可以作為通信協議的驅動方式,比如i2C的通信引腳就是使用的開漏模式,在多機通信的模式下,這個模式可以避免各個設備的相互干擾,另外開漏模式還可以用來輸出5V的電平信號,在IO口外接一個上拉到5V的電阻,當輸出低電平時,有內部的N—MOS直接接VSS,當輸出高電平時,由外部的上拉電阻上拉到5V,這樣就可以輸出5V的電平信號,兼容5V的設備,注意,此時N—MOS,P—MOS都無效。
關閉模式,就是當引腳配置為輸入模式的時候,此時N—MOS,P—MOS都無效。
配置為復用輸出模式的時候,引腳的高低電平由片上的外設控制。
總結:GPIO的配置首先需要開啟時鐘,同時參數由引腳號,工作模式和輸出輸入速度組成,配置完這些參數后傳遞給結構體初始化函數來完成GPIO的初始化,結構體初始化函數會把這些參數傳遞到相應的寄存器保存下來。以備后用。同時位置設置寄存器,輸出數據寄存器,輸入數據寄存器負責數據的讀出和寫入。