赞
踩
目录
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复用为串口。
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 (高速)
输出配置
对 I/O 端口进行编程作为输出时:
输出缓冲器被打开:
--开漏模式:输出寄存器中的“0”可激活 N-MOS,而输出寄存器中的“1”会使端 口保持高组态 (Hi-Z)(P-MOS 始终不激活)。
--推挽模式:输出寄存器中的“0”可激活 N-MOS,而输出寄存器中的“1”可激活P-MOS。
施密特触发器输入被打开
根据 GPIOx_PUPDR 寄存器中的值决定是否打开弱上拉电阻和下拉电阻
输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样
对输入数据寄存器的读访问可获取 I/O 状态
对输出数据寄存器的读访问可获取最后的写入值
推挽电路(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 状态
复用功能配置
对 I/O 端口进行编程作为复用功能时:
可将输出缓冲器配置为开漏或推挽
输出缓冲器由来自外设的信号驱动(发送器使能和数据)
施密特触发器输入被打开
根据 GPIOx_PUPDR 寄存器中的值决定是否打开上拉电阻和下拉电阻
输入数据寄存器每隔 1 个 AHB1 时钟周期对 I/O 引脚上的数据进行一次采样
对输入数据寄存器的读访问可获取 I/O 状态
模拟配置
对 I/O 端口进行编程作为模拟配置时:
输出缓冲器被禁止。
施密特触发器输入停用,I/O 引脚的每个模拟输入的功耗变为零。施密特触发器的输出被 强制处理为恒定值 (0)。
弱上拉和下拉电阻被关闭。
对输入数据寄存器的读访问值为“0”。
在模拟配置中,I/O 引脚不能为 5 V 容忍
创建新文件(选择芯片型号)
配置system core
/1.sys配置仿真器(我一般选择stlink)
/2.RCC配置(
将外部高速时钟(HSE)配置为Crystal/Ceramic Resonator(晶体/陶瓷谐振器),外部低速时钟(LSE)一般用不到,可以不配置
)
GPIO配置
/1.在右侧芯片中选择你要配置的gpio口
/2.点击该gpio口选择你要配置的功能
/3.这里为了点亮led灯所以将连接该引脚的gpio口配置为gpio_output模式(输出模式)
/4.在cubemx左边界面中找到GPIO就能查看和更改gpio的一些配置
配置时钟树
/5.直接选择72MHZ按回车
配置文件
/6.命名文件(不要出现中文)
/7.IDE选择MDK_ARM
/8.勾选.c和.h分文件
/9.最后生成代码
库函数参考有两种方法:
1.参考HAL函数源码,逐步进行阅读,仅供于参考。
2.借力帮助文档
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;
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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。