stm32操作GPIO【1】-點亮led燈


stm32操作GPIO

軟件環境:環境搭建https://www.cnblogs.com/bliss-/p/15043021.html

硬件環境:

基於普中定通stm32ZGT6開發板

概述:

GPIO是STM32非常重要的功能,在大多數控制系統中都會使用到GPIO,GPIO【General-purpose input/output】,通用輸入輸出端口,可以用於輸出高低電平,也可以作為輸入采集外部電平。
在我這塊開發板上可以看到控制LED引腳在PF9和PF10引腳上,同時LED二極管的一端為VCC3.3,我們只需要控制另一端將其拉低或者升高就可以控制其亮或者滅。

軟件流程

基本流程比較簡單

  • 外設時鍾需要根據具體的IO端口查看手冊中的時鍾樹,也可以看庫函數中的預設參數得知GPIO時鍾都在AHB1時鍾總線上掛着

/**
  * @brief  Enables or disables the AHB1 peripheral clock.
  * @note   After reset, the peripheral clock (used for registers read/write access)
  *         is disabled and the application software has to enable this clock before 
  *         using it.   
  * @param  RCC_AHBPeriph: specifies the AHB1 peripheral to gates its clock.
  *          This parameter can be any combination of the following values:
  *            @arg RCC_AHB1Periph_GPIOA:       GPIOA clock
  *            @arg RCC_AHB1Periph_GPIOB:       GPIOB clock 
  *            @arg RCC_AHB1Periph_GPIOC:       GPIOC clock
  *            @arg RCC_AHB1Periph_GPIOD:       GPIOD clock
  *            @arg RCC_AHB1Periph_GPIOE:       GPIOE clock
  *            @arg RCC_AHB1Periph_GPIOF:       GPIOF clock
  *            @arg RCC_AHB1Periph_GPIOG:       GPIOG clock
  *            @arg RCC_AHB1Periph_GPIOG:       GPIOG clock
  *            @arg RCC_AHB1Periph_GPIOI:       GPIOI clock
  *            @arg RCC_AHB1Periph_GPIOJ:       GPIOJ clock (STM32F42xxx/43xxx devices) 
  *            @arg RCC_AHB1Periph_GPIOK:       GPIOK clock (STM32F42xxx/43xxx devices)  
  *            @arg RCC_AHB1Periph_CRC:         CRC clock
  *            @arg RCC_AHB1Periph_BKPSRAM:     BKPSRAM interface clock
  *            @arg RCC_AHB1Periph_CCMDATARAMEN CCM data RAM interface clock
  *            @arg RCC_AHB1Periph_DMA1:        DMA1 clock
  *            @arg RCC_AHB1Periph_DMA2:        DMA2 clock
  *            @arg RCC_AHB1Periph_DMA2D:       DMA2D clock (STM32F429xx/439xx devices)  
  *            @arg RCC_AHB1Periph_ETH_MAC:     Ethernet MAC clock
  *            @arg RCC_AHB1Periph_ETH_MAC_Tx:  Ethernet Transmission clock
  *            @arg RCC_AHB1Periph_ETH_MAC_Rx:  Ethernet Reception clock
  *            @arg RCC_AHB1Periph_ETH_MAC_PTP: Ethernet PTP clock
  *            @arg RCC_AHB1Periph_OTG_HS:      USB OTG HS clock
  *            @arg RCC_AHB1Periph_OTG_HS_ULPI: USB OTG HS ULPI clock
  * @param  NewState: new state of the specified peripheral clock.
  *          This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph));

  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    RCC->AHB1ENR |= RCC_AHB1Periph;
  }
  else
  {
    RCC->AHB1ENR &= ~RCC_AHB1Periph;
  }
}
  • 我們這里作為GPIO輸出使用,所以我們將GPIO初始化為以下模式
	GPIO_InitTypeDef GPIO_LED;
	/**GPIOF端口時鍾使能**/
        RCC_AHB1PeriphClockCmd(LED_GPIO_CLK,ENABLE);

        GPIO_LED.GPIO_Mode = GPIO_Mode_OUT;          //輸出模式
	GPIO_LED.GPIO_OType = GPIO_OType_PP;         //推挽
	GPIO_LED.GPIO_PuPd = GPIO_PuPd_DOWN;         //內部上拉
	GPIO_LED.GPIO_Speed = GPIO_Low_Speed;        //設置為低速率模式
        GPIO_LED.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_9;  //設置引腳9和10
        GPIO_Init(GPIOF,&GPIO_LED);                  //綁定到GPIOF端口並將設置項生效
  • 最后可以調用輸出高低電平的庫函數實現控制LED開關
	GPIO_ResetBits(GPIO_F,GPIO_Pin_10);
        /*拉高引腳 控制LED滅*/
	GPIO_SetBits(GPIOF,GPIO_Pin_10);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM