STM32CUBEMX配置教程(三)通用GPIO配置 |
您所在的位置:网站首页 › x50provivo配置 › STM32CUBEMX配置教程(三)通用GPIO配置 |
STM32CUBEMX配置教程(三)通用GPIO配置
基于STM32H743VI 使用STM32CUBEMX两年了,始终觉得这个工具非常的方便,但因为不是经常使用,导致有些要点总是会有些遗忘,因此写下这一系列教程以供记忆,顺便让我这个大萌新给广大小萌新提供一些学习帮助。 本次配置的工程链接在最下方,有需要自取。 0基础可以从第一个教程开始阅读 STM32CUBEMX配置教程(一)基础配置 STM32CUBEMX配置教程(二)时钟等内部参数配置 1 新建工程参考STM32CUBEMX配置教程(一)基础配置 2 修改时钟树参考STM32CUBEMX配置教程(二)时钟等内部参数配置 3 GPIO输出配置点击CUBEMX左侧你想要配置的引脚,以配置PA0为例,即可出现GPIO的配置界面,在此只介绍通用的GPIO配置,即模拟的GPIO,再简单来说只配置GPIO为输入或者输出,对应GPIO_Input和GPIO_Output。 对于输出速度,某些型号可能会写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并配置为输入模式: 由此可见,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 |