STM32CUBEMX配置教程(三)通用GPIO配置

您所在的位置:网站首页 x50provivo配置 STM32CUBEMX配置教程(三)通用GPIO配置

STM32CUBEMX配置教程(三)通用GPIO配置

2024-03-05 23:36| 来源: 网络整理| 查看: 265

STM32CUBEMX配置教程(三)通用GPIO配置

基于STM32H743VI 使用STM32CUBEMX两年了,始终觉得这个工具非常的方便,但因为不是经常使用,导致有些要点总是会有些遗忘,因此写下这一系列教程以供记忆,顺便让我这个大萌新给广大小萌新提供一些学习帮助。

本次配置的工程链接在最下方,有需要自取。 0基础可以从第一个教程开始阅读 STM32CUBEMX配置教程(一)基础配置 STM32CUBEMX配置教程(二)时钟等内部参数配置

1 新建工程

参考STM32CUBEMX配置教程(一)基础配置

2 修改时钟树

参考STM32CUBEMX配置教程(二)时钟等内部参数配置

3 GPIO输出配置

点击CUBEMX左侧你想要配置的引脚,以配置PA0为例,即可出现GPIO的配置界面,在此只介绍通用的GPIO配置,即模拟的GPIO,再简单来说只配置GPIO为输入或者输出,对应GPIO_Input和GPIO_Output。在这里插入图片描述 若想要配置PA0为输出模式,则在上图界面中点击GPIO_Output即可配置引脚为输出,同时在界面上也会有相应的显示: 在这里插入图片描述 此时只是仅仅配置了GPIO口为输出模式,STM32CUBEMX还提供许多其他参数以供配置。点击System Core下的GPIO选项,从右侧窗口找到PA0这个IO口并点击一下。在这里插入图片描述 点击之后窗口界面会显示PA0的详细配置参数(输出),如下图所示: 在这里插入图片描述其中:

GPIO output leve 表示上电的默认电平,可配置高或者低 GPIO mode 表示输出模式,可配置为Output Push Pull(推挽输出)或Output Open Drain(开漏输出) GPIO Pull-up/Pull-down 表示是否上下拉,可配置为上拉或者下拉 Maximum output speed 表示输出速度,对于高速接口需要配置为Very High User Label 可修改IO口名称,比如可写入LED,把IO口名称变为LED

对于输出速度,某些型号可能会写2M,20M,50M等字样,但是对于通用IO口来说不可能达到50M的翻转速率。详见番外篇:STM32之GPIO口速率配置究竟代表什么 对于驱动LED,一般配置IO口为推挽输出,上下拉非必要,IO速度低速即可。

配置完成生成工程,下面介绍调用的函数,首先是GPIO控制函数:

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

例如我想要控制PA0为高电平:

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);

我想要控制PA0为低电平:

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);

下面是GPIO的自动翻转的函数:

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

例如控制PA0自动翻转

HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); 4 GPIO输入配置

上述介绍了输出的一些功能配置以及调用的函数,下面介绍输入的配置即调用的函数。 以配置PA1为输入为例,现在右侧ui界面选中PA1并配置为输入模式: 在这里插入图片描述 点击System Core下的GPIO选项,从右侧窗口找到PA1这个IO口并点击一下,此时会出现关于这个IO口的更多的配置。但是当配置为输入时,可配置的参数相对于输出时少了不少,唯一的配置选项为配置上下拉,注意,最后一行User Label只是对GPIO命名,不少对IO进行寄存器配置。 在这里插入图片描述 参数配置相对简单,下面是调用IO口读取的hal库函数:

unsigned char pin_val; pin_val=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);

由此可见,GPIO的电平数值回读取到pin_val中,注意,此处读取到的值为0或1,即为高低电平。 下面给出最为基础的HAL库下的按键消抖方式(读取PA1引脚),这种方式调用了延时和while循环,效率非常低,但是逻辑相对简单。

if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)) { HAL_Delay(20); if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)) { key_val=1; } while(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)); }

还有其他更多的按键扫描方式,较为常用的是状态机矩阵按键扫描法,但是这种方法需要不断的扫描IO口,尽管没有延时但依旧占用大量的CPU资源,如果系统较复杂可能回影响系统的实时性能。

在高度复杂的系统中最好采用矩阵基于中断的矩阵键盘扫描法,即在普通状态下无需扫描,只当按键被按下触发了中断才进行一次按键扫描。

基于中断的矩阵键盘扫描法对于4x4矩阵键盘会占用8个IO口,这与普通状态机方式无异,但中断方式需要额外占用外部中断资源,但优点是减少了CPU的占用。中断方法网上相关资料较少,有时间我会专门出番外篇介绍。

工程链接: https://download.csdn.net/download/weixin_44584198/20462112



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3