【8】、STM32F767——————>GPIO之输入/输出

  1. 简述:
    1. 每个通用 I/O 端口包括 4 个 32 位配置寄存器 ( GPIOx_MODER、 GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR) 、2 个 32 位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)和 1 个 32 位置位/复位寄存器 (GPIOx_BSRR)。
    2. 所有 GPIO 都包括 1 个 32 位锁定寄存器 (GPIOx_LCKR) 和 2 个 32 位复用功能选择寄存器( GPIOx_AFRH 和 GPIOx_AFRL)。
  2. 特性:
    1. 输出状态:推挽或开漏 + 上拉/下拉
    2. 可为每个 I/O 选择不同的速度
    3. 输入状态:浮空、上拉/下拉、模拟
    4. 模拟功能
    5. 复用功能选择寄存器
    6. 引脚复用非常灵活,允许将 I/O 引脚用作 GPIO 或多种外设功能中的一种
  3. 功能描述:
    1.  /*引脚功能描述:
       GPIO_MODE_INPUT          输入浮空模式   
       GPIO_MODE_OUTPUT_PP      推挽输出
       GPIO_MODE_OUTPUT_OD      开漏输出
       GPIO_MODE_AF_PP          复用推挽输出    
       GPIO_MODE_AF_OD          复用开漏输出    
       GPIO_MODE_IT_RISING      外部中断,上升沿检测    
       GPIO_MODE_IT_FALLING     外部中断,下降沿检测      
       GPIO_MODE_IT_RISING_FALLING  外部中断,双沿触发检测
       GPIO_MODE_EVT_RISING     外部事件模式,上升沿触发检测    
       GPIO_MODE_EVT_FALLING    外部事件模式,下降沿触发检测    
       GPIO_MODE_EVT_RISING_FALLING  外部事件模式,双沿触发检测
       GPIO_MODE_ANALOG         模拟输入
       
       引脚速度描述:
      GPIO_SPEED_FREQ_LOW         低速 
      GPIO_SPEED_FREQ_MEDIUM      中等速度 
      GPIO_SPEED_FREQ_HIGH        快速 
      GPIO_SPEED_FREQ_VERY_HIGH   高速     */
  4. 硬件设计
  5. 软件初始化流程
    1. 打开相应GPIO时钟
    2. 引脚初始化:模式、上下拉、速度、引脚号; 
    3. 对相应引脚预定义,方便操作; 简少代码量; 
  6. 例程:
    1. led初始化:
      void BSP_LED_Init(void)
      {
          GPIO_InitTypeDef GPIO_InitStruct;
          __HAL_RCC_GPIOB_CLK_ENABLE();
          
          GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
          GPIO_InitStruct.Pull = GPIO_PULLUP;
          GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
          GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
          HAL_GPIO_Init(GPIOB,&GPIO_InitStruct); 
      }
    2. 按键初始化:

          GPIO_InitTypeDef GPIO_InitStruct;
          __HAL_RCC_GPIOA_CLK_ENABLE();
          __HAL_RCC_GPIOC_CLK_ENABLE();
          __HAL_RCC_GPIOH_CLK_ENABLE();
          
          GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
          GPIO_InitStruct.Pull = GPIO_PULLDOWN;
          GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
          GPIO_InitStruct.Pin = GPIO_PIN_0;
          HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); 
          
          GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
          GPIO_InitStruct.Pull = GPIO_PULLUP;
          GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
          GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3;
          HAL_GPIO_Init(GPIOH,&GPIO_InitStruct);   
      
          GPIO_InitStruct.Pin = GPIO_PIN_13;
          HAL_GPIO_Init(GPIOC,&GPIO_InitStruct);  
  7. 总结:
发布了24 篇原创文章 · 获赞 1 · 访问量 1518

猜你喜欢

转载自blog.csdn.net/Linux_ARM9/article/details/104510875