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

stm32—GPIO

0. 引入

在单片机产品中,我们常常可以见到三种模块:LCD灯、KEY按键、BEEP蜂鸣器


LED灯:

        一个比较常见的LED电路

LED0 ---------- 通过控制LED0引脚(电线)

        给它一个低电平(低电压),LED灯就会亮

        给它一个高电平(高电压),LED灯就会灭

        

        1  —> 高电平

        0  —> 低电平

        电流:从电势高的地方流向电势低的地方


        CPU  ===> 往LECD0引脚去 写1,写0

                "output" 输出功能

KEY按键:

        一个比较常见的KEY电路


KEY0  ------  通过读取KEY0引脚的电平状态来知晓用户是否按下按键

        高电平(1) ---> 弹起

        低电平(0) ---> 按下

        CPU  ===> 读取KEY0引脚的电平状态

                "input" 输入功能

BEEP蜂鸣器:

        一个比较常见的BEEP电路

        



这些引脚最终是接入到MCU的某个引脚(gpio)上去的
控制LED灯、KEY按键、BEEP蜂鸣器等,可以在MCU上面写程序去控制这些引脚

1. GPIO到底是什么?

GPIO:General Purpose Input Output 通用功能的输入输出 线
        

GPIO就是从芯片(芯片 = CPU + 总线 + 外设控制器)内部引出一根功能复用的口线("电线"),可以由CPU配置成不同的功能

        如:输入功能,输出功能,其他复用功能等

芯片或CPU控制整个世界就是通过这样的引脚(口线,GPIO)

STM32F4xx共有144个GPIO口线(引脚,pin),分为9组,记为GPIOA,GPIOB,GPIOC,GPIOD,GPIOE,GPIOF,GPIOG,GPIOH,GPIOI. 每组管理16个GPIO引脚,编号从0~15

        如:GPIOA这一组有16个引脚,分别记为GPIOA0,GPIOA1,GPIOA2,... GPIOA15
                其他组类似

                GPIOA0  -----> PA0

                GPIOB3  ------> PB3

                ......

这些GPIO引脚都是功能复用的,并且由GPIO控制器来控制它们的

        所有的外设都是由"外设控制器"来控制

GPIO控制器由不同的寄存器来配置或控制它们(GPIOs) 

每组GPIO地址分配如下:GPIOA  0x4002 0000 ~ 0x4002 03ff
GPIOB  0x4002 0400 ~ 0X4002 07FF
GPIOC  0x4002 0800 ~ 0x4002 0BFF
GPIOD  0x4002 0C00 ~ 0x4002 0FFF
GPIOE  0x4002 1000 ~ 0x4002 13FF
GPIOF  0x4002 1400 ~ 0x4002 17FF
GPIOG  0x4002 1800 ~ 0x4002 1BFF
GPIOH  0x4002 1C00 ~ 0x4002 1FFF
GPIOI  0x4002 2000 ~ 0x4002 23FF

2. STM32F4xx GPIO内部结构原理


每个GPIO内部都可以配置成:

        1. 输入功能:input mode

                CPU可以获取该GPIO口的外部输入的一个电平状态

                输入功能有四种模式:

                        (1) 输入悬空(input floating):不接上拉和下拉电阻

                                输入引脚处于浮空状态,‌即没有特定电压状态,‌引脚悬浮在空中

                                IO引脚的电平状态完全是外部输入所决定的,这时CPU能够通过读取数据的操作知道状态

                   

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于Martin实现MapboxGL自定义底图
  • 【旗芯微FC7300】如何配置PWM触发AD采样
  • 【iOS】AutoreleasePool自动释放池的实现原理
  • AWS云服务器选择最佳区域
  • 使用Linux实现FTP云盘项目2
  • 全栈物联网云平台搭建:MQTT、Node.js、MongoDB、InfluxDB与React的应用示例
  • 数据分析与应用:微信-情人节红包流向探索分析
  • 仅通过 css 为代码添加行号 | code line number with CSS only
  • vxe-table树形结构使用setCheckboxRow卡顿--已解决
  • 1章1节:认识人工智能的第一节课
  • Bash考古以及 StackOverflow的2024年度技术统计报告
  • 深入浅出 Electron 的BrowserWindow
  • 线性表-单链表-C语言实现
  • 【ESP01开发实例】- ISD1820录音控制
  • JDK17下载安装卸载
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Cumulo 的 ClojureScript 模块已经成型
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • PAT A1050
  • React的组件模式
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue 动态创建 component
  • windows下使用nginx调试简介
  • 简单数学运算程序(不定期更新)
  • 利用DataURL技术在网页上显示图片
  • 如何设计一个比特币钱包服务
  • 如何选择开源的机器学习框架?
  • 一、python与pycharm的安装
  • 异步
  • Linux权限管理(week1_day5)--技术流ken
  • ​520就是要宠粉,你的心头书我买单
  • ​数据结构之初始二叉树(3)
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (function(){})()的分步解析
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二)springcloud实战之config配置中心
  • (正则)提取页面里的img标签
  • (转)EOS中账户、钱包和密钥的关系
  • *p++,*(p++),*++p,(*p)++区别?
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .Mobi域名介绍
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net6Api后台+uniapp导出Excel
  • @Data注解的作用
  • @FeignClient注解,fallback和fallbackFactory
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @staticmethod和@classmethod的作用与区别
  • []我的函数库
  • [12] 使用 CUDA 进行图像处理
  • [AI资讯·0612] AI测试高考物理题,最高准确率100%,OpenAI与苹果合作,将ChatGPT融入系统中,大模型在物理领域应用潜力显现
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [bzoj1038][ZJOI2008]瞭望塔
  • [C++][opencv]基于opencv实现photoshop算法图像剪切
  • [CF543A]/[CF544C]Writing Code