cubeMX HAL库入门之GPIO

GPIO

目录

一、概述

二、GPIO的工作模式

1.简述

2.详细分析

三、**使用CUBEMX配置hal库**

四、研究库函数

五、函数接口

1.端口硬件时钟使能

2.GPIO的初始化

3.GPIO初始化结构体 

4.GPIO功能函数API


一、概述

GPIO,即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。STM32F407有7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口。通常称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15,并且F4系列是基于Cortex-M4内核。

GPIO的复用:

STM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 共用的。也就是说,一个引脚可以有很多作用,但是默认为IO口,如果想使用一个 GPIO内置外设的功能引脚,就需要GPIO的复用,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。比如说串口就是GPIO复用为串口。

二、GPIO的工作模式

1.简述

4种输入模式

(1)GPIO_Mode_IN_FLOATING 浮空输入(即不连接内部上下拉电阻)

(2)GPIO_Mode_IPU 上拉输入

(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_AIN 模拟输入

4种输出模式

(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)

(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)

(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)

(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)

4种最大输出速度

(1)2MHZ (低速)

(2)25MHZ (中速)

(3)50MHZ (快速)

(4)100MHZ (高速)

2.详细分析

输出配置

对 I/O 端口进行编程作为输出时:

  • 输出缓冲器被打开:

--开漏模式:输出寄存器中的“0”可激活 N-MOS,而输出寄存器中的“1”会使端 口保持高组态 (Hi-Z)(P-MOS 始终不激活)。

--推挽模式:输出寄存器中的“0”可激活 N-MOS,而输出寄存器中的“1”可激活P-MOS。

  • 施密特触发器输入被打开

  • 根据 GPIOx_PUPDR 寄存器中的值决定是否打开弱上拉电阻和下拉电阻

  • 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样

  • 对输入数据寄存器的读访问可获取 I/O 状态

  • 对输出数据寄存器的读访问可获取最后的写入值

7413e15f02b9575b64bd4cf85d75868a.png

推挽电路(push-pull)就是两个不同极性晶体管间连接的输出电路。推挽电路采用两个参数相同的功率BJT管或MOSFET管,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小效率高。推挽输出既可以向负载灌电流,也可以从负载抽取电流。

在电路设计中,推挽输出是一种很常用的输出模式。推挽输出有很多优点,比如更低的损耗,更安全的输出等。推挽”之意,即为当一个管子推出去时,另一个管子拉回来。输入不同,交替导通。

举个例子

  • 当输入信号为高电平的时候,上面的管子导通,下面的管子截止,输出信号为高电平。

  • 当输入信号为低电平的时候,上面的管子截止,下面的管子导通,输出信号为低电平。

MOS管

N型mos比P型mos管使用的多

N型mos管比P型mos管的开关速度快(工艺的影响 ),所以Pmos开关损耗多,发热严重

Nmos比Pmos耐压高

Nmos通过电流能力比较大,因此常用于推挽电路的下管。

输入配置

对 I/O 端口进行编程作为输入时:

  • 输出缓冲器被关闭

  • 施密特触发器输入被打开

  • 根据 GPIOx_PUPDR 寄存器中的值决定是否打开上拉和下拉电阻

  • 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样

  • 对输入数据寄存器的读访问可获取 I/O 状态

4960c1c1bcd900281cafc6994ca3f7ac.png

复用功能配置

对 I/O 端口进行编程作为复用功能时:

  • 可将输出缓冲器配置为开漏或推挽

  • 输出缓冲器由来自外设的信号驱动(发送器使能和数据)

  • 施密特触发器输入被打开

  • 根据 GPIOx_PUPDR 寄存器中的值决定是否打开上拉电阻和下拉电阻

  • 输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样

  • 对输入数据寄存器的读访问可获取 I/O 状态

d00043f8511d682ff6b4a6d8be2b7eb8.png

模拟配置

对 I/O 端口进行编程作为模拟配置时:

  • 输出缓冲器被禁止。

  • 施密特触发器输入停用,I/O 引脚的每个模拟输入的功耗变为零。施密特触发器的输出被 强制处理为恒定值 (0)。

  • 弱上拉和下拉电阻被关闭。

  • 对输入数据寄存器的读访问值为“0”。

在模拟配置中,I/O 引脚不能为 5 V 容忍

fa5f2079297e10fe557eeba334d009d0.png

三、**使用CUBEMX配置hal库**

  • 创建新文件(选择芯片型号)15b351b70c5744d68b497f6a7bbeb7f2.png16a95046f26e4ed5992a446b3c510bbc.png

  • 配置system core

    /1.sys配置仿真器(我一般选择stlink)

    8d824a0ca5f44c739e4758112d24ae5a.png

    /2.RCC配置(

    将外部高速时钟(HSE)配置为Crystal/Ceramic Resonator(晶体/陶瓷谐振器),外部低速时钟(LSE)一般用不到,可以不配置

    )

    8cb008f4f7134a7ea3201616f3fc86be.png

  • GPIO配置

    /1.在右侧芯片中选择你要配置的gpio口

    b82b308685f0429b9f1b720c5d8728ce.png

    /2.点击该gpio口选择你要配置的功能

    ed923e5377014fa4a3d275477017418a.png

    /3.这里为了点亮led灯所以将连接该引脚的gpio口配置为gpio_output模式(输出模式)

    193798e1e5f04d4c9a491279594d7040.png

    /4.在cubemx左边界面中找到GPIO就能查看和更改gpio的一些配置

    d3e4fbd92fb24dbca6face1fa1e675ba.png

  • 配置时钟树

    /5.直接选择72MHZ按回车

    72953c9ce55a462cb0f7b25b698180e5.png

  • 配置文件

    /6.命名文件(不要出现中文)

    /7.IDE选择MDK_ARM

    5b3b3834a99c42cfbb8ca64c95dae922.png

    /8.勾选.c和.h分文件

    /9.最后生成代码

    f14e299e46f74399913cd6b77120d8c0.png

四、研究库函数

库函数参考有两种方法:

1.参考HAL函数源码,逐步进行阅读,仅供于参考。

2.借力帮助文档

1688a47bf3be4c208afb5a60d07682a2.png

五、函数接口

1.端口硬件时钟使能

 3f9bf22e319f49d99901f4db7b1e792d.png

2.GPIO的初始化

667102d675274fdaa6e3a5eb064734ee.png

3.GPIO初始化结构体 

0969b4d74cb54b51a6954e8f0f264036.png

typedef struct
{
  uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.
                           This parameter can be any value of @ref GPIO_pins_define */
​
  uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.
                           This parameter can be a value of @ref GPIO_mode_define */
​
  uint32_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
                           This parameter can be a value of @ref GPIO_pull_define */
​
  uint32_t Speed;     /*!< Specifies the speed for the selected pins.
                           This parameter can be a value of @ref GPIO_speed_define */
} GPIO_InitTypeDef;
​

4.GPIO功能函数API

 aa6b4c07ec9c4efdad32e62a4fd50559.png

functions:

HAL_GPIO_EXTI_Callback

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

EXTI line detection callbacks.(使用外部中断(EXTI)来检测外部信号变化的回调函数)

Parameters:

GPIO_Pin:指定连接到 EXTI 线的引脚。

Return values:

无返回值

Definition at line 561 of file stm32f1xx_hal_gpio.c.

Referenced by HAL_GPIO_EXTI_IRQHandler().

HAL_GPIO_EXTI_IRQHandler

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

This function handles EXTI interrupt request.(此函数处理 EXTI 中断请求。)

Parameters:

GPIO_Pin:指定连接到 EXTI 线的引脚。

Return values:

无返回值

Definition at line 546 of file stm32f1xx_hal_gpio.c.

References __HAL_GPIO_EXTI_CLEAR_IT, __HAL_GPIO_EXTI_GET_IT, and HAL_GPIO_EXTI_Callback().

HAL_GPIO_LockPin

HAL_StatusTypeDef  HAL_GPIO_LockPin(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin )

Locks GPIO Pins configuration registers.(IO 配置冻结)

Note:

锁定机制允许将 IO 配置冻结。当对端口位应用了 LOCK 序列后,直到下一次复位之前,无法再修改端口位的值。

Parameters:

GPIOx:其中 x 可以是(根据所使用的设备)A 到 G 之间的字母,用于选择 GPIO 外设。
GPIO_Pin:指定要锁定的端口位。该参数可以是 GPIO_Pin_x 的任意组合,其中 x 可以是(0..15)。

Return values:

None

Definition at line 511 of file stm32f1xx_hal_gpio.c.

References assert_param, and IS_GPIO_PIN.

HAL_GPIO_ReadPin

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin )

Reads the specified input port pin.(读引脚电平)

Parameters:

GPIOx:其中x可以是(根据所使用的设备)A到G之间的字母,用于选择GPIO外设。
GPIO_Pin:指定要读取的端口位。该参数可以是GPIO_PIN_x,其中x可以是(0..15)。

Return values:

输入端口引脚的值。

Definition at line 431 of file stm32f1xx_hal_gpio.c.

References assert_param, GPIO_PIN_RESET, GPIO_PIN_SET, and IS_GPIO_PIN.

HAL_GPIO_TogglePin

void HAL_GPIO_TogglePin(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin )

Toggles the specified GPIO pin.(反转引脚电平)

Parameters:

GPIOx:其中 x 可以是(根据所使用的设备)A 到 G 之间的字母,用于选择 GPIO 外设。
GPIO_Pin:指定要切换的引脚。

Return values:

无返回值

Definition at line 487 of file stm32f1xx_hal_gpio.c.

References assert_param, GPIO_NUMBER, and IS_GPIO_PIN.

HAL_GPIO_WritePin

 

void HAL_GPIO_WritePin(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin,GPIO_PinState PinState )

Sets or clears the selected data port bit.(写引脚电平)

Note:

此函数使用 GPIOx_BSRR 寄存器来允许原子读/修改访问。这样,读取和修改访问之间不会发生中断请求的风险。

Parameters:

GPIOx,:其中 x 可以是(根据所使用的设备)A 到 G 之间的字母,用于选择 GPIO 外设。
GPIO_Pin,:指定要写入的端口位。该参数可以是 GPIO_PIN_x,其中 x 可以是(0..15)。
PinState,:指定要写入所选位的值。该参数可以是 GPIO_PinState 枚举值之一:
  • GPIO_PIN_RESET: 低电平
  • GPIO_PIN_SET: 高电平

Return values:

无返回值

Definition at line 465 of file stm32f1xx_hal_gpio.c.

References assert_param, GPIO_PIN_RESET, IS_GPIO_PIN, and IS_GPIO_PIN_ACTION.

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CubeMX是一款由ST公司出品的集成开发环境,可用于STM32微控制器的快速配置和代码生成。该软件非常适合初学者和专家使用,支持Hal库使用手册。 Hal库是ST公司提供的硬件抽象层,封装了处理器与外设之间的通信底层操作。在使用CubeMX进行STM32代码编写时,常常需要使用Hal库,因此掌握Hal库的使用非常重要。 在使用Hal库之前,需首先引入相关头文件,并初始化要使用的硬件外设。然后使用Hal库提供的API函数进行操作,例如读写外设的寄存器,发送/接收数据等。 具体来说,通过CubeMX配置工程后生成的代码中,可以看到各个外设的配置信息以及对应的Hal库API函数的调用。此外,还有一些示例程序可供参考,有助于深入了解Hal库的使用。 需要注意的是,Hal库使用中对硬件性能的需求较高,因此在编写代码时需要小心优化,并避免出现死循环或其它性能问题。除此之外,推荐使用官方的文档和手册,以保证精准的使用。 ### 回答2: CubeMX是一个用于生成基于HAL库的嵌入式软件的集成开发环境,它简化了HAL库的使用。 HAL库(Hardware Abstraction Layer)是针对不同的嵌入式芯片硬件架构设计的一套API接口库,使开发人员能够驱动芯片硬件。因此,CubeMX HAL库使用手册主要有以下方面的内容: 首先,手册介绍了CubeMX的安装、基本结构和用户界面。 这包括如何创建一个新项目,如何添加芯片型号和库,以及如何定义各种芯片和外设的配置参数。 其次,手册详细介绍了HAL库的各种功能和API接口,以及如何使用它们来控制芯片硬件。 在这部分中,了解如何配置GPIO、UART、DMA等外设并进行数据传输、时钟配置、电源管理以及中断等常见操作。 最后,手册包括一些示例和模板代码,以帮助新手熟悉HAL库的使用和应用。这使得读者可以更加深入地理解HAL库如何实现各种应用程序需求。 同时,手册还包含了一些调试技巧和建议,以帮助开发人员在调试时快速找到和解决问题。 总之,CubeMX HAL库使用手册是掌握HAL库的一个重要参考资料,它能够有效地帮助开发人员节省时间,减少犯错,从而更好地利用HAL库来实现自己的应用程序需求。 ### 回答3: CubeMX是一个自动生成代码配置工具,开发人员可以通过它快速配置STM32微控制器的外设并生成代码。HAL库则是由STM32提供的基于C语言的封装库,用于操作微控制器的外设。 CubeMXHAL库都是STM32开发中非常重要的工具和库。CubeMX作为一个自动生成代码配置工具,可以帮助开发人员快速完成项目的初始化和配置,节省了人工编写代码的时间和精力。HAL库则是对STM32原有库的封装,让开发人员更加容易地使用外设,也提供了强大的功能和灵活性。 使用CubeMXHAL库的方法如下: 1. 在CubeMX中选择STM32微控制器型号及其外设,进行配置。 2. 生成初始化代码并导出到工程中。 3. 在工程中添加HAL库依赖文件及其头文件。 4. 在代码中使用HAL库提供的函数进行外设的初始化和操作。 需要注意的是,使用CubeMXHAL库并不能代替开发人员对STM32微控制器和其外设的深入了解。当需要进行更深层次的调试和优化时,开发人员仍需要熟悉硬件结构和寄存器操作,并编写自己的代码。同时,在使用过程中还要仔细阅读HAL库的使用手册,掌握其函数的参数和使用方法,以便更加高效地使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值