GPIO功能描述_第1頁
GPIO功能描述_第2頁
GPIO功能描述_第3頁
GPIO功能描述_第4頁
GPIO功能描述_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、GPIO功能描述每個GPI/O端口有兩個32位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個32位數(shù)據(jù)寄存器(GPIOx_IDR,GPIOx_ODR),一個32位置位/復位寄存器(GPIOx_BSRR),一個16位復位寄存器(GPIOx_BRR)和一個32位鎖定寄存器(GPIOx_LCKR)。 GPIO端口的每個位可以由軟件分別配置成多種模式。輸入浮空輸入上拉輸入下拉模擬輸入開漏輸出推挽式輸出推挽式復用功能開漏復用功能 每個I/O端口位可以自由編程,然而I/0端口寄存器必須按32位字被訪問(不允許半字或字節(jié)訪問)。GPIOx_BSRR和GPIOx_BRR寄存器允

2、許對任何GPIO寄存器的讀/更改的獨立訪問;這樣,在讀和更改訪問之間產(chǎn)生IRQ時不會發(fā)生危險。 下圖給出了一個I/O端口位的基本結構。   復位期間和剛復位后,復用功能未開啟,I/O端口被配置成浮空輸入模式(CNFx1:0=01b,MODEx1:0=00b)。復位后,JTAG引腳被置于輸入上拉或下拉模式:PA15:JTDI置于上拉模式PA14:JTCK置于下拉模式PA13:JTMS置于上拉模式PB4: JNTRST置于上拉模式 當作為輸出配置時,寫到輸出數(shù)據(jù)寄存器上的值(GPIOx_ODR)輸出到相應的I/O引腳??梢砸酝仆炷J交蜷_漏模式(當輸

3、出0時,只有N-MOS被打開)使用輸出驅(qū)動器。輸入數(shù)據(jù)寄存器(GPIOx_IDR)在每個APB2時鐘周期捕捉I/O引腳上的數(shù)據(jù)。所有GPIO引腳有一個內(nèi)部弱上拉和弱下拉,當配置為輸入時,它們可以被激活也可以被斷開。 當對GPIOx_ODR的個別位編程時,軟件不需要禁止中斷:在單次APB2寫操作里,可以只更改一個或多個位。這是通過對“置位/復位寄存器”(GPIOx_BSRR,復位是 GPIOx_BRR)中想要更改的位寫1來實現(xiàn)的。沒被選擇的位將不被更改。  復用功能(AF)使用默認復用功能前必須對端口位配置寄存器編程。對于復用的輸入功能,端口必須配置成輸入模式(浮空

4、、上拉或下拉)且輸入管腳必須由外部驅(qū)動注意:也可以通過軟件來模擬復用功能輸入管腳,這種模擬可以通過對GPIO控制器編程來實現(xiàn)。此時,端口應當被設置為復用功能輸出模式。顯然,這時相應的管腳不再由外部驅(qū)動,而是通過GPIO控制器由軟件來驅(qū)動。對于復用輸出功能,端口必須配置成復用功能輸出模式(推挽或開漏)。對于雙向復用功能,端口位必須配置復用功能輸出模式(推挽或開漏)。這時,輸入驅(qū)動器被配置成浮空輸入模式。如果把端口配置成復用輸出功能,則引腳和輸出寄存器斷開,并和片上外設的輸出信號連接。如果軟件把一個GPIO腳配置成復用輸出功能,但是外設沒有被激活,它的輸出將不確定。 軟件重新映射I/O復

5、用功能為了使不同器件封裝的外設I/O功能的數(shù)量達到最優(yōu),可以把一些復用功能重新映射到其他一些腳上。這可以通過軟件配置相應的寄存器來完成(參考AFIO寄存器描述)。這時,復用功能就不再映射到它們的原始引腳上了。 輸入配置當I/O端口配置為輸入時:輸出緩沖器被禁止施密特觸發(fā)輸入被激活根據(jù)輸入配置(上拉,下拉或浮動)的不同,弱上拉和下拉電阻被連接出現(xiàn)在I/O腳上的數(shù)據(jù)在每個APB2時鐘被采樣到輸入數(shù)據(jù)寄存器對輸入數(shù)據(jù)寄存器的讀訪問可得到I/O狀態(tài)    輸出配置當I/O端口被配置為輸出時:輸出緩沖器被激活開漏模式:輸出寄存器上的0激活N-MOS,而輸

6、出寄存器上的1將端口置于高阻狀態(tài)(P-MOS從不被激活)。推挽模式:輸出寄存器上的0激活N-MOS,而輸出寄存器上的1將激活P-MOS。施密特觸發(fā)輸入被激活弱上拉和下拉電阻被禁止出現(xiàn)在I/O腳上的數(shù)據(jù)在每個APB2時鐘被采樣到輸入數(shù)據(jù)寄存器在開漏模式時,對輸入數(shù)據(jù)寄存器的讀訪問可得到I/O狀態(tài)在推挽式模式時,對輸出數(shù)據(jù)寄存器的讀訪問得到最后一次寫的值。   模擬輸入配置當I/O端口被配置為模擬輸入配置時:輸出緩沖器被禁止;禁止施密特觸發(fā)輸入,實現(xiàn)了每個模擬I/O引腳上的零消耗。施密特觸發(fā)輸出值被強置為0;弱上拉和下拉電阻被禁止;讀取輸入數(shù)據(jù)寄存器時數(shù)值為0。

7、60;      例程(1)  本例展示了如何通過設置GPIO BSRR寄存器(Port bit set/reset registe)和GPIO BRR寄存器 (Port bit reset register)來翻轉(zhuǎn)IO的狀態(tài)。 通過設置這兩個寄存器,可以利用單比特操作(single atomic write access)來改變一個或者幾個IO端口的狀態(tài)。 #include "stm32f10x_lib.h" /* Private typedef -*/* Pri

8、vate define -*/* Private macro -*/* Private variables -*/GPIO_InitTypeDef GPIO_InitStructure;ErrorStatus HSEStartUpStatus; /* Private function prototypes -*/void RCC_Configuration(void);void NVIC_Configuration(void);void Delay(vu32 nCount); /* Private functions -*/ /* Function Name

9、60; : main* Description    : Main program.* Input          : None* Output         : None* Return         : None*/int main(void)#ifdef DEBUG  debug();#endif

10、   /* Configure the system clocks */  RCC_Configuration();     /* NVIC Configuration */  NVIC_Configuration();   /* Enable GPIOC clock */  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /使能APB2外設(GPIOC)時鐘   /* Configure  PC

11、.04-PC.07  as Output push-pull */   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  GPIO_Init(GPIOC, &GPIO_InitStructure); 

12、60; while (1)      /* Turn on led connected to PC.04pin */       GPIO_SetBits(GPIOC, GPIO_Pin_4);    /* Insert delay */    Delay(0xAFFFF);     /* Turn on led connected to PC.05 and PC.06 pins */ 

13、      GPIO_SetBits(GPIOC, GPIO_Pin_5 | GPIO_Pin_6);    /* Turn off led connected to PC.04 pin */       GPIO_ResetBits(GPIOC, GPIO_Pin_4);    /* Insert delay */    Delay(0xAFFFF);   

14、0; /* Turn on led connected to PC.07 pin */        GPIO_SetBits(GPIOC, GPIO_Pin_7);    /* Turn off led connected to PC.05 and PC.06 pins */      GPIO_ResetBits(GPIOC, GPIO_Pin_6 | GPIO_Pin_5);    /* Insert dela

15、y */    Delay(0xAFFFF);     /* Turn off led connected to PC.07 pin */    GPIO_ResetBits(GPIOC, GPIO_Pin_7);   /* Function Name  : RCC_Configuration* Description    : Configures the different system clocks.* Input &#

16、160;        : None* Output         : None* Return         : None*/void RCC_Configuration(void)  /* RCC system reset(for debug purpose) */  RCC_DeInit();   /* Enable

17、HSE */  RCC_HSEConfig(RCC_HSE_ON);   /* Wait till HSE is ready */  HSEStartUpStatus = RCC_WaitForHSEStartUp();   if(HSEStartUpStatus = SUCCESS)      /* Enable Prefetch Buffer */    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);&

18、#160;    /* Flash 2 wait state */    FLASH_SetLatency(FLASH_Latency_2);             /* HCLK = SYSCLK */    RCC_HCLKConfig(RCC_SYSCLK_Div1);     /* PCLK2 = HCLK */  &

19、#160; RCC_PCLK2Config(RCC_HCLK_Div1);     /* PCLK1 = HCLK/2 */    RCC_PCLK1Config(RCC_HCLK_Div2);     /* PLLCLK = 8MHz * 9 = 72 MHz */    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);     /* Enable PLL *

20、/    RCC_PLLCmd(ENABLE);     /* Wait till PLL is ready */    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)             /* Select PLL as system clock source */    RCC_SYSCLKConfig(RC

21、C_SYSCLKSource_PLLCLK);     /* Wait till PLL is used as system clock source */    while(RCC_GetSYSCLKSource() != 0x08)           /* Function Name  : NVIC_Configuration* Description    : Configures Vector T

22、able base location.* Input          : None* Output         : None* Return         : None*/void NVIC_Configuration(void)#ifdef  VECT_TAB_RAM   /* Set the Vector

23、Table base location at 0x20000000 */  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);#else  /* VECT_TAB_FLASH  */  /* Set the Vector Table base location at 0x08000000 */  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  #endif /* Function Name  : Delay* Descrip

24、tion    : Inserts a delay time.* Input          : nCount: specifies the delay time length.* Output         : None* Return         : None*/void Delay(vu32 nCount)  for(; nCount != 0; nCount-); #ifdef  DEBUG/* Function Name  : assert_failed* Description    : Reports the name of the source file and the source line number*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論