STM32——GPIO輸入模式下上拉和下拉的設定
阿新 • • 發佈:2019-01-28
轉自 https://blog.csdn.net/lbsgrowup/article/details/47619471
GPIO處於輸入模式下,下拉輸入和上拉輸入的相關配置如下圖所示。需要注意的是,下拉輸入和上拉輸入是通過埠輸出暫存器GPIOx_ODR來區分的。因此,在進行上拉/下拉輸入配置時候,雖然對GPIO進行的關於輸入的操作,但是仍要對和輸出相關的暫存器ODR進行配置。
上述注意事項在實際程式碼編寫時表現為:
(1)庫函式[cpp] view plain copy print?
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 下拉輸入
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0 下拉 ODR=0<strong>
- </strong>
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 下拉輸入 GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0 下拉 ODR=0<strong> </strong>
特此說明,雖然GPIO_Mode中區分了上拉輸入模式GPIO_Mode_IPU和下拉輸入模式GPIO_Mode_IPD,如下圖所示,但是在GPIO初始化配置時候仍然需要對ODR暫存器進行設定,如上述的GPIO_ResetBits(GPIOA,GPIO_Pin_0);操作。
- GPIOA->CRL&=0XFFFFFFF0; //PA0 清除之前設定
- GPIOA->CRL|=0X00000008; //PA0 輸入
- GPIOA->ODR|=0<<0; //PA0 下拉<strong>
- </strong>
GPIOA->CRL&=0XFFFFFFF0; //PA0 清除之前設定
GPIOA->CRL|=0X00000008; //PA0 輸入
GPIOA->ODR|=0<<0; //PA0 下拉<strong>
</strong>
此外,GPIO處於輸入模式下,不需要對MODE1和MODE0進行設定(初始化之後預設為00)
輸出模式位(僅在輸出模式下配置,輸入模式下不需要)