当前位置: 首页 > news >正文

重新学习STM32(1)GPIO

概念简介

        GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚。STM32 芯片通过 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 GPIO被分成很多组,比如 GPIOA和GPIOB等。所有的 GPIO引脚都有基本的输入输出功能,也就是说,所有GPIO引脚都有收发数据的能力。

        GPIO最基本的输出功能是通过 STM32 控制引脚输出高、低电平,进而实现例如控制 LED 灯的亮灭的功能。

        GPIO最基本的输入功能是检测外部输入电平,如把 GPIO 引脚连接到按键,通过电平高低区分按键是否被按下。

       

示例操作

       在实际编程中,GPIO主要在外设如USART、ADC等初始化及其配置中,其他操作例如复位一般都会为GPIO操作取一个宏。

        首先,在官方提供的文件stm32f10x_gpio.h里有一个GPIO的结构体,如下:

typedef struct
{uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.This parameter can be any value of @ref GPIO_pins_define */GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.This parameter can be a value of @ref GPIOSpeed_TypeDef */GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;

        上述结构体内的成员在下述函数中进行定义。

void GPIO_Config(void)
{		/*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/*开启相关的GPIO外设时钟*/RCC_APB2PeriphClockCmd(GPIO_CLK ENABLE); /*选择要控制的GPIO引脚*/GPIO_InitStructure.GPIO_Pin =GPIO_PIN;	/*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   /*设置引脚速率为50MHz */   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*调用库函数,初始化GPIO*/GPIO_Init(GPIO_PORT, &GPIO_InitStructure);}

        在上一篇文章中,曾经提到过使用外设功能需要先开启时钟,这里开启GPIO相应的时钟并将GPIO结构体定义完成后,便可以调用初始化函数初始GPIO。

        至此,GPIO的初始化完成。一般GPIO的配置是和其他外设比如ADC、USART等一起配置的,像例子这种情况一般都是完成一些非常简单的功能比如点亮LED,但是很多外设功能的定义都和定义GPIO功能的流程相似。

http://www.lryc.cn/news/369444.html

相关文章:

  • React+TS前台项目实战(二)-- 路由配置 + 组件懒加载 + Error Boundary使用
  • 成为电商低价神秘顾客访问员的必备条件(深圳神秘顾客公司)
  • 现货黄金交易多少克一手?国内外情况大不同
  • LNMP与动静态网站介绍
  • 教育小程序开发:技术实现与实践案例
  • LeetCode 746.使用最小花费爬楼梯
  • 软件设计模式概述
  • 短剧片源火爆,千金难求好剧源
  • MES系统定制 | 生产调度车间排班计划/MES排程排产
  • 【Anaconda】 anaconda常用命令总结
  • VIsio Professional 绘图
  • Flutter InAppWebView Unknown feature SUPPRESS_ERROR_PAGE
  • linux系统PXE自动装机和无人值守
  • 大模型的高考数学成绩单:及格已经非常好了
  • 【漏洞复现】CraftCMS ConditionsController.php 代码执行漏洞(CVE-2023-41892)
  • 代码随想录算法训练营第三十八 |● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯
  • 如何有效处理服务器后台密码暴露
  • 使用本地大模型调用代码,根本就是一场骗局!
  • 一些简单却精妙的算法
  • git多账号使用报错:You don‘t have permissions to push to “xxx/xxxx“ onGitHub. Would
  • 中国电子学会(CEIT)2023年12月真题C语言软件编程等级考试三级(含详细解析答案)
  • 多线程爬取百度图片
  • RK3568-修改fiq-debugger调试串口
  • 我们离成功有多远呢?只要能完成自己阶段性的目标就算是一次成功
  • Golang 避坑指南
  • Java核心: JarIndex的使用
  • 1052 卖个萌(测试点1,2)
  • Vue 3与ESLint、Prettier:构建规范化的前端开发环境
  • npm安装依赖过慢
  • 计算机毕业设计 | SpringBoot+vue的教务管理系统