1. 程式人生 > >STM32——GPIO輸入模式下上拉和下拉的設定

STM32——GPIO輸入模式下上拉和下拉的設定

轉自  https://blog.csdn.net/lbsgrowup/article/details/47619471

GPIO處於輸入模式下,下拉輸入和上拉輸入的相關配置如下圖所示。需要注意的是,下拉輸入和上拉輸入是通過埠輸出暫存器GPIOx_ODR來區分的。因此,在進行上拉/下拉輸入配置時候,雖然對GPIO進行的關於輸入的操作,但是仍要對和輸出相關的暫存器ODR進行配置。


上述注意事項在實際程式碼編寫時表現為:

(1)庫函式
[cpp] view plain copy print?
  1. GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;  //PA0     
  2. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 下拉輸入  
      
  3. GPIO_Init(GPIOA, &GPIO_InitStructure);  
  4. GPIO_ResetBits(GPIOA,GPIO_Pin_0);       //PA0 下拉 ODR=0<strong>  
  5. </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);操作。


(2)暫存器 [cpp] view plain copy print?
  1. GPIOA->CRL&=0XFFFFFFF0;  //PA0 清除之前設定    
  2. GPIOA->CRL|=0X00000008;  //PA0 輸入     
  3. GPIOA->ODR|=0<<0;      //PA0 下拉<strong>  
  4. </strong>  
GPIOA->CRL&=0XFFFFFFF0;	//PA0 清除之前設定  
GPIOA->CRL|=0X00000008;	//PA0 輸入   
GPIOA->ODR|=0<<0;		//PA0 下拉<strong>
</strong>


此外,GPIO處於輸入模式下,不需要對MODE1和MODE0進行設定(初始化之後預設為00)

輸出模式位(僅在輸出模式下配置,輸入模式下不需要)

輸出模式位(僅在輸出模式下配置,輸入模式下不需要)