当前位置:   article > 正文

【stm32】HAL库教程一:GPIO_hal库引脚复用

hal库引脚复用
前言

今天我们来学习一款新的单片机stm32F407VET6,有着很强大的功能。本系列将结合HAL库和STM32cubeMX一起学习。初学者只需要掌握什么是GPIO、如何实现基本工作这两个问题就够了。

所用工具

1、芯片:STM32F407VET6
2、STM32cubeMX软件
3、开发工具:MDK-Keil软件

GPIO简介

在介绍GPIO之前,我们先解释一下什么是I/O。I/O就是芯片的管脚,一般有输入(In)和输出(Out)两个功能。GPIOA~GPIOK 共 11 端口,每个端口有 16 个受控 I/O。

I/O一般分为专用I/O和通过I/O。专用I/O是指独立I/O,一般都具有特定的功能。比如,电源、复位、晶振。通用I/O就是GPIO。控制它的输入和输出,然后让外设正常工作。通常都需要外部电路的配合。

关于GPIO的复用功能。简单来讲就是一个引脚多种用途,但是在同一个时间点,该管脚只能实现一个功能。举个例子,就是小明有苹果、香蕉和梨可以吃,但是在同一个时间里,只能咬一口其中的一种水果,不能同时咬多个。

如何实现复用功能

  • 首先,设置GPIO的复用寄存器,将GPIO端口的第2个引脚,设置为需要复用的功能。
  • 然后设置LCD这个“片内外设”的相关寄存器,让LCD这个“片内外设”工作,然后就会使用引脚的复用功能来输入输出。
GPIO功能
  • 数字输入

  • 复用输入

  • 模拟输入

  • 数字输出

  • 复用输出

  • 模拟输出
    内部结构图
    在这里插入图片描述
    上图中a部分的两个二极管起到稳压的作用,可以对引脚的电压进行调节,起到保护的作用,不过保护的作用也是有限的,在连接外部电路时,为了保护引脚会在引脚外面连接一个510R或者1KR的电阻。
    b部分的两个电阻分别是上拉电阻和下拉电阻。通过控制内部上/下拉电阻,可以调节引脚的输出电压。
    引脚状态有三种:
    1、上拉
    2、下拉
    3、浮空
    上拉就是上拉电阻工作,默认输出为VDD也就是单片机电压。下拉就是下拉电阻工作,默认输出为VSS。浮空就是没有上/下拉电阻,管脚的电平处于未知状态。

  • 一般的数字输入
    所经过路径为1->4。
    斯密特触发器负责将修正的电平。使之更加稳定。
    输入数据寄存器负责暂时存储输入的数据。可以从这个寄存器读取数据。

  • 复用输入
    所经过路径为1->3。
    数据会到达相应外设的寄存器进行进一步的处理和使用。

  • 模拟输入
    所经过路径为1->2。
    一般模拟输入的信号,会在片内ADC模块转化成数字信号再使用。模拟输入的功能一般使用的较少。

  • 一般的数字输出
    所经过路径为5->1或6->1。
    数据进入复位/置位寄存器后,电路会自动将数据导入输出数据寄存器。

  • 复用输出
    所经过路径为7->1。
    复用输出和复用输入的信号流向基本是相反,两者没有本质区别。

  • 模拟输出
    所经过路径为8->1。
    基本上只有使用片内DAC时,才会用到这个功能。所以这个功能不常用。

输出控制
在这里插入图片描述
数字信号的输出有推挽输出和开漏输出两种。他们之间的区别在于mos管的数量不同。一般来讲推挽输出的输出能力更强,我们通常使用推挽输出就可以满足要求。
每个端口GPIOx的16个引脚会共用一套寄存器。端口与端口之间的寄存器是独立的。

GPIO相关寄存器

配置GPIO相关的寄存器不仅能够控制GPIO的输入/输出和工作模式等功能,还能控制与GPIO相关的数据。
基础配置寄存器
1、GPIO端口模式寄存器
2、GPIO端口输出类型寄存器
3、GPIO端口输出速度寄存器
4、GPIO端口上拉/下拉寄存器
数据寄存器
1、GPIO端口输入数据寄存器
2、GPIO端口输出数据寄存器
3、GPIO端口置位/复位寄存器
其他寄存器
1、GPIO端口锁定寄存器
2、GPIO复用功能低位寄存器,配置端口0~7引脚的复用功能
3、GPIO复用功能高位寄存器,配置端口8~15引脚的复用功能

在学习过程中,要能够逐渐掌握和使用这些寄存器,只有对这些寄存器熟练掌握和使用,理解他们的工作方式,才能在后续学习中,畅通无阻。
这些寄存器的使用,可以在参考手册中,查到,在这里就不复制粘贴参考手册的内容了。
寄存器地址的计算
寄存器地址 = 寄存器的基地址 + 寄存器偏移

寄存器编程步骤

1、设置GPIO端口模式寄存器GPIOx_MODER
2、设置GPIO端口输出类型寄存器GPIOx_OTYPER
3、设置GPIOx端口输出速度寄存器GPIOx_OSPEEDR
4、设置GPIOx端口上拉/下拉寄存器GPIOx_PUPDR
5、设置GPIOx端口输出数据寄存器GPIOx_ODR
6、设置GPIOx端口输出数据寄存器GPIOx_ODR
7、设置GPIO端口置位/复位寄存器GPIOx_BSRR(原子操作)

标准库函数编程步骤

1、调用 RCC_AHB1PeriphClockCmd 函数打开 GPIOIA 的时钟
2、调用 GPIO 的 GPIO_Init 库函数,将 GPIOIA 的 pin6 初始化为“通用输出、推挽、速度 50MHZ、 上拉”
3、调用 GPIO 的 GPIO_ResetBits、GPIO_SetBits 库函数对 pin86置位、复位,实现 LED1 的亮灭

HAL库编程步骤
函数讲解
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/126103
推荐阅读
相关标签
  

闽ICP备14008679号