GPIO

GPIO:通用输入输出
GPIO与引脚的区别:引脚包含GPIO,还有其他特殊的引脚
引脚分类:电源、晶振IO、下载IO、BOOT IO、复位IO 组成最小系统,剩下的引脚才是GPIO
GPIO原理图:

CRL(第八位)/CRH(高八位)


当外部电压高于VDD(3.3v)会通过二极管保护芯片,但是当电压过高后,保护机制无法保护芯片,例如(直连电机)

推挽输出


  1. 当ODR输出1时,N管关闭,P管导通,输出接通VDD电压输出1(推,向外的 灌电流 25mA)
  2. 当ODR输出1时,P管关闭,N管导通,输出接通VSS电压输出0(挽 ,向内的 拉电流)

用于连接数字器件,开关效率高,电流大,驱动能力强
除开必须用开漏一般都用推挽。

开漏输出

  1. 只能输出低电平,不能输出高电平
  2. 如若需要输出高电平,需要引脚上拉电阻,由外部体提供高电平
  3. 开漏具有“线与”功能,可以将多个开漏输出的Pin,连接到一条线上,形成“与逻辑”关系。一个低,全为低,多用于I2C和SMBUS总线
    用于需要线与功能和总线的电路中

ODR/BSRR

  1. 如果只需要设置端口的某些pin为1,直接赋值到BSRR(高16位保持为0),BSRR为端口置位/复位寄存器,置位就是高电平、复位也就是低电平,这玩意是个32位寄存器,低16位控制置位、高16位控制复位.
  2. 如果只需要设置端口的某些pin为0,直接赋值到BRR。
  3. 如果设置端口的某些pin为1、另外一些pin为0,需要对应的设置一个32-bit的数值,其低16位对应设置1的pin,高16位对应设置0的pin,然后赋值到BSRR。
  4. 整体操作使用ODR,ODR也可以使用逻辑实现原子操作用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险

链接:https://www.jianshu.com/p/17d8b3f0d6d1

GPIO的初始化顺序

  1. 确定具体的GPIO
  2. 配置GPIO工作模式(CRL \CRH)
  3. 控制GPIO输出电平(ODR\BRR\BSRR)

寄存器映射

AHB划分为两路总线
APB1:慢速总线,最快36Mhz
APB2:快速总线,最快72Mhz

总线地址 = 总线基地址 + 相对外设地址偏移量
外设地址 = 总线地址 + 相对目标总线的偏移地址
寄存器地址 = 外设地址 + 相对寄存器偏移地址

外设总线基地址:0x40000000

    #define PERIPH_BASE  (unsigned int)0x40000000

地址的起始为APB1所以APBI1没有偏移量

    # define  APB1_PERIPH_BASE    (PERIPH_BASE)

ABP2的起始地址为总线基地址+0x1000

 # define  APB2_PERIPH_BASE    (PERIPH_BASE+ 0x1000)

STM32_GPIO相关推荐

  1. STM32_GPIO口

    一.GPIO功能 1.输入浮空模式 浮空输入状态下,STM32读到的电平只根据IO端口的电平有关,如果不连接确定电平负载该引脚的电压也是不确定的 2.输入上拉模式 开启上拉时引脚默认电压为高电平,开启 ...

  2. stm32_GPIO模拟I2c读写EEPROM

    /* 下面给出STM32通过GPIO模拟I2C读写EEPROM程序 */ #define SCL_H GPIOB->BSRR = GPIO_Pin_6 #define SLC_L GPOIB-& ...

  3. STM32 基础系列教程 1- CubeMX+GPIO

    前言 学习stm32 GPIO 的使用,设置某一GPIO引脚为输出功能,将对应引脚拉高或拉低输出,同时学会初步认识STM32最新的HAL库的使用, 用代码实现控制GPIO引脚输出产生周期出1s 占空比 ...

  4. U-Boot 之五 详解 U-Boot 及 SPL 的启动流程

      在之前的博文 Linux 之八 完整嵌入式 Linux 环境介绍及搭建过程详解 中我们说了要一步步搭建整个嵌入式 Linux 运行环境,今天继续介绍 U-Boot 相关的内容.我所使用的硬件平台及 ...

  5. STM32学习:按键控制LED

    STM32学习:按键控制LED 文章目录 前言 一.所用知识点复习 1.stm32工作模式(*注意上下拉输入的区别*) 2.按键抖动与常见按键接法 按键抖动: 按键消抖: 常见按键接法: 3.GPIO ...

  6. STM32F407ZG_入门

    目录 1.首选学习/讨论资源: 2.打牢基础 3.命名规则:STM32F407ZGT6 4.程序下载 5.创建项目: 6.Keil环境的美化: 7.extern外部声明: 8.typedef类型别名: ...

  7. 在stm32f103上运行nuttx,添加app和driver的流程

    以stm32f103的led(PC13)为例子 heyi@ubuntu:~/nuttx/heyi_1_nuttx/nuttx/tools$ ./configure.sh stm32f103-minim ...

  8. NuttX 编译系统

    (嵌入式 实时操作系统 rtos nuttx 7.1 makefile) NuttX 编译系统 转载请注明出处: http://blog.csdn.net/zhumaill/article/detai ...

  9. ArduCopter相关

     1.ArduPilot_main 我们知道,在 C语言中最经典的程序是 "Hello World!",这应该是我们在 C语言中最早接触的一个程序了.而在单片机中,最经典的一个 ...

最新文章

  1. html用emmt写菜单,前端开发工具Emmet的介绍
  2. Oracle --存储过程,输入不定个数参数
  3. 关于错误 openssl/ssl.h:没有那个文件或目录的解决办法
  4. AIX 中关于文件存储的相关命令
  5. 7个相同小球4个不同盒子_如何用天平称三次找出12个外观相同小球中仅有的一个次品?次品质量与正品不同。...
  6. 下载历史版本的 xCode
  7. 17---Net基础加强
  8. Java集合(2)--Collection接口方法
  9. connect跨进程 qt_编写 Qt 跨线程异步调用器
  10. 操作系统(13)-操作系统中的死锁及其预防、避免、检测与解除
  11. url里面的参数不能带特殊字符
  12. 视网膜正常oct图_眼科经验贴:不同情况下的OCT读图
  13. 密码生成的思路---电脑mac地址
  14. 第一次工作面试(蘑菇街)
  15. python解决sip与ptqt不兼容导致页面截图引擎无法运行问题
  16. 10月18号、19号、20号三天PC端云音乐项目总结
  17. 系统背景描述_多元化多功能会议室报告厅智能控制系统方案
  18. ts无损剪辑合并_视频剪切合并器下载-视频剪切合并器 v13.4免费版
  19. 怎么给固定资产安装标签
  20. 在godaddy上申请属于自己的域名

热门文章

  1. MySQL5.6 (5.7-8) 基于shardingsphere5.1.1 Sharding-Proxy模式读写分离
  2. 华硕服务器主板是什么系列,华硕P10S WS、 P10S-M WS系列服务器主板上市
  3. 【坑爹的360】Win7控制面板打不开,提示Windows资源管理器已停止工作
  4. js中promise原理及手动基本实现_V4
  5. python手动垃圾回收_Python 垃圾回收
  6. Python3.6 安装jpype1 遇到的一些坑以及最后安装jpype1成功的解决方法,不得不说
  7. self.title_style = ParagraphStyle(name=TitleStyle, fontName=hei, fontSize=48, alignment=TA_LEFT,...
  8. 深度神经网络的训练过程
  9. java深入微服务原理改造房产销售平台,Java深入微服务原理改造房产销售平台
  10. 该如何辨别选矿专用消泡剂对选矿中的泡沫有效果!