当前位置:   article > 正文

cubeMX HAL库入门之GPIO_cubemax如何把引脚设置为普通io状态

cubemax如何把引脚设置为普通io状态

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.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/637427
推荐阅读
相关标签
  

闽ICP备14008679号