当前位置: 首页 > 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能够通过读取数据的操作知道状态

                   

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

相关文章:

  • CocosCreator使用 ProtoBuf WebSocket与服务器对接方法
  • 【python基础】while循环语句练习
  • 【SpringBoot系列】WebMvcConfigurer配置
  • 学懂C++ (十九):高级教程——深入详解C++信号处理
  • SOMEIP_ETS_032:echoUINT8ArrayMinSize
  • JS+CSS案例:可适应上下布局和左右布局的菜单(含二级菜单)
  • 【数据结构】线性表,顺序表
  • Spring之最基础的创建与Bean的存储与获取(还有Maven加载jar包报错的解决方法)
  • RabbitMQ应用问题 - 消息顺序性保证、消息积压问题
  • linux tcp通讯demo
  • 在 MongoDB 中,如何配置副本集以实现读写分离?
  • 虚拟dom-Diff算法
  • 01创建型设计模式——单例模式
  • 图像分割(一)
  • C++ 新经典:设计模式 目录(先留框架,慢慢来~)
  • go之命令行工具urfave-cli
  • 四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较
  • MySQL的脏读、不可重复读、幻读与隔离级别
  • 程序员前端开发者的AI绘画副业之路:在裁员危机中寻找新机遇
  • Burp Suite的使用和文件上传漏洞靶场试验
  • 如何在Ubuntu中安装deepin wine版的企业微信
  • 案例:Nginx + Tomcat集群(负载均衡 动静分离)
  • 【密码学】密码协议的分类:②认证协议
  • 异步编程(Promise详解)
  • DjangoORM注入分享
  • 【HBZ分享】Redis各种类型的数据结构应用场景
  • anaconda创建并且配置pytorch(完整版)
  • 高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?
  • AtCoder Beginner Contest 365 A~E
  • 多机部署, 负载均衡-LoadBalance