1. 程式人生 > >GPIO

GPIO

時鐘 odr 保持 bit truct output 置配 _id style

關鍵字:初始化 所有寄存器 所有函數

初始化項目,(根據初始化結構體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,16pin:4個32位配置寄存器,每個PIN角2位,不進行設置均有復位值,對應為復位狀態

                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