• 哈爾濱匯豐電子科技有限公司!
    led
    打開客服菜單
    熱門關鍵詞 : 12V調速器 12V調速器
    新聞動態
    當前位置: 12V調速器 > 公司動態 > GPIOSTM32F103VE
    GPIOSTM32F103VE
    發布時間 : 2019-10-10 19:24 瀏覽量 : 25

    STM32F103VE


    void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
    {
      uint32_t tmpreg = 0x00;
      /* Check the parameters */
      assert_param(IS_GPIO_EVENTOUT_PORT_SOURCE(GPIO_PortSource));
      assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
       
      tmpreg = AFIO->EVCR;
      /* Clear the PORT[6:4] and PIN[3:0] bits */
      tmpreg &= EVCR_PORTPINCONFIG_MASK;
      tmpreg |= (uint32_t)GPIO_PortSource << 0x04;
      tmpreg |= GPIO_PinSource;
      AFIO->EVCR = tmpreg;
    }

    #define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) ||
                                        ((PERIPH) == GPIOB) ||
                                        ((PERIPH) == GPIOC) ||
                                        ((PERIPH) == GPIOD) ||
                                        ((PERIPH) == GPIOE) ||
                                        ((PERIPH) == GPIOF) ||
                                        ((PERIPH) == GPIOG))
                                        
    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-AF1
    所有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操作寄存器 **********************************************/
     /* 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);
    /* 寫函數 ****************************/
    void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
    {
      /* Check the parameters */
      assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
      assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
      assert_param(IS_GPIO_BIT_ACTION(BitVal));
     
      if (BitVal != Bit_RESET)
      {
        GPIOx->BSRR = GPIO_Pin;
      }
      else
      {
        GPIOx->BRR = GPIO_Pin;
      }
    }


    標簽:
    cache
    Processed in 0.015648 Second.
    ipx528