HAL库学习梳理——GPIO

  笔者跟着B站铁头山羊视频学习 STM32-HAL库 开发教程。有一说一,这个教程自诩为“最佳教程,没有之一~”,确实有点东西。像我这种看视频想睡觉的入门小白来说,感觉捡到宝了。下面对这些课程的应用做一个梳理。

省流:

 HAL_Delay(500);

延时函数:延时500ms 。

HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6, GPIO_PIN_RESET);

 设置IO引脚:将GPIOG的G6引脚置低电平GPIO_PIN_RESET。

if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == GPIO_PIN_RESET)

 读取IO引脚:判断 GPIOC的C13引脚 是否为 低电平GPIO_PIN_RESET(GPIO_PIN_SET)。

1、电源MOS命名

 2、GPIO口的通用和复用

通用(直接控制)、复用(其他模块托管)
引脚的复用功能示意图

 IO复用就是同一个IO引脚具备多个不同的功能,它既可以被用户直接编程,也可以给芯片的其他模块使用。

IO口重映射

 3、GPIO工作模式

8种工作模式

3.1 推挽输出和开漏输出

推挽输出和开漏输出

 推挽输出模式下,一对MOS管交替导通,对外输出低电压高电压

 开漏输出模式下,PMOS保持关断,可以对外输出低电压高阻抗

 3.2 最大输出速度选择

低速、中速、高速三种输出速度选择

3.3 输入模式

三种输入模式
上拉、下拉模式

4、示例

4.1 LED灯闪烁 

(1)LED灯输出配置

引脚示意图

PC13  阳极接高电压(Vdd),需要使用开漏输出,写0输出低电压写1输出高阻态

PA9    阴极接低电压(Vss),需要使用推挽输出,写0输出低电压写1输出高电压

GPIO输出引脚配置

(2)编写程序

GPIO HAL库编程接口
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);   // 点亮LED,C13置0,开漏输出低电压
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);      // 点亮LED,C9置1,推挽输出高电压
      HAL_Delay(500);

      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);     // 熄灭LED,C13置1,开漏输出高阻态
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);    // 熄灭LED,C9置0,推挽输出低电压
      HAL_Delay(500);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 4.2 按键控制LED灯亮灭

(1)按键输入配置

按键输入示意图

GPIO输入引脚配置

(2)程序 

GPIO HAL库编程接口
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == GPIO_PIN_RESET)   // 判断 按键输入引脚C13 是否为低电平
    {
      HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6, GPIO_PIN_RESET);     // 置 LED输出引脚G6 为低电平
     
    }
    else if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == GPIO_PIN_SET)
    {
      HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6, GPIO_PIN_SET);

    }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值