GPIO
關鍵字:初始化 所有寄存器 所有函數
初始化項目,(根據初始化結構體GPIO_InitTypeDef):模式、開漏或推挽、pin腳、上拉下拉、速度,設置4個配置寄存器值
GPIO_InitTypeDef GPIO_LED;
GPIO_LED.GPIO_Mode=GPIO_Mode_OUT;
GPIO_LED.GPIO_OType=GPIO_OType_OD;//
GPIO_LED.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
GPIO_LED.GPIO_PuPd=GPIO_PuPd_NOPULL;//
GPIO_LED.GPIO_Speed=GPIO_Low_Speed;
涉及寄存器,
GPIOx_MODER:模式寄存器,模式包括---輸入模式(復位)、通用輸出模式、復用功能模式、模擬模式
GPIOx_OTYPER:輸出類型寄存器,類型包括---推挽輸出(復位)、開漏輸出
GPIOx_OSPEEDR:輸出速度寄存器,速度包括---低速、中速、高速、最高速,不同GPIO組復位值不一樣
GPIOx_PUPDR:端口上拉/下拉寄存器,---無上拉或下拉、上拉、下拉、保留,不同GPIO組復位值不一樣
2個32位數據寄存器,每個PIN腳1位
GPIOx_IDR:端口數據輸入寄存器,高16位保留,使用低16位
GPIOx_ODR:端口數據輸出寄存器,高16位保留,使用低16位
1個32位置位/復位寄存器,
GPIOx_BSRR:高16位負責16個pin腳復位,寫0不對輸出數據寄存器 GPIOx_ODR進行任何操作,寫1對GPIOx_ODR相應位復位;低16位同理,但功能是置位
1 個 32 位鎖定寄存器,(不常用)
GPIOx_LCKR:每個鎖定位凍結一個特定的配置寄存器(控制寄存器和復用功能寄存器)。功能感覺不常用,用到再查。
2 個 32 位復用功能選擇寄存器
GPIOx_AFRL:低位復用功能寄存器,低8個PIN腳復用功能配置,每個PIN腳4位,復用功能AF0-AF15
GPIOx_AFRH:高位復用功能寄存器,高8個PIN腳復用功能配置,每個PIN腳4位,復用功能AF0-AF15
所有GPIO函數
/* Function used to set the GPIO configuration to the default reset state ****/
1.void GPIO_DeInit(GPIO_TypeDef* GPIOx);不常用
功能:通過使能失能AHB1總線時鐘設置配置寄存器為默認值,此時各個PIN腳為復位狀態,當GPIO_Init設置為復位狀態時,則GPIO_Init可以被次函數替代,否則不能用此函數。
參數:GPIOx GPIOA~GPIOE,其他系列更多或更少端口組
涉及寄存器:RCC->RCC->AHB1ENR 時鐘使能失能寄存器
/* Initialization and Configuration functions *********************************/
2.void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);常用,配合GPIO_InitTypeDef結構體使用
功能:設置配置寄存器為特定值,各個PIN腳狀態自定義。
參數:GPIOx GPIOA~GPIOE,其他系列更多或更少端口組
GPIO_InitStruct GPIO_InitTypeDef結構體類型的指針地址
涉及寄存器:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR即上述的4個32位配置寄存器
3.void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);不常用
功能:設置GPIO_InitTypeDef結構體為默認值,並不涉及實際模式設置
參數:GPIO_InitStruct GPIO_InitTypeDef結構體類型的指針地址
涉及寄存器:不涉及
4.void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:鎖定位凍結一個特定的配置寄存器(控制寄存器和復用功能寄存器)
參數:GPIOx GPIOA~GPIOE,其他系列更多或更少端口組
GPIO_Pin GPIO_Pin GPIO_Pin_0~GPIO_Pin_15 或者GPIO_Pin_All或者任意幾個腳相或
涉及寄存器:GPIOx_LCKR
/* GPIO Read and Write functions **********************************************/此部分見函數名即可理解,不分析
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:
參數:
涉及寄存器:GPIOx_IDR
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
功能:
參數:
涉及寄存器:GPIOx_IDR
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:
參數:
涉及寄存器:GPIOx_ODR
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
功能:
參數:
涉及寄存器:GPIOx_ODR
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:
參數:
涉及寄存器:GPIOx_BSRR
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:
參數:
涉及寄存器:GPIOx_BSRR
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
功能:但不知道reset還是set,可以直接用次函數寫0或寫1
參數:BitVal: Bit_RESET或0,Bit_SET或1
涉及寄存器:GPIOx_BSRR
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
功能:
參數:
涉及寄存器:GPIOx_ODR
void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:特定腳數據翻轉,使用位異或GPIOx->ODR ^= GPIO_Pin; 實現,原理是任何數(0,1)和0相異或保持不變,和1相異或翻轉
參數:
涉及寄存器:GPIOx->ODR
/* GPIO Alternate functions configuration function ****************************/
void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
功能:
參數:
涉及寄存器:
GPIO