• STM32---GPIO


    GPIO原理:

    肖特基触发器:把模拟信号转为数字信号,即把信号变陡峭

    • I/O端口默认被配置成浮空输入模式
    • 配置为模拟输入模式时:
      • 斯密特TTL被禁止,读取输入数据寄存器时数值恒为0;
      • 弱上拉和下拉电阻被禁止

    • 开漏输出模式下输入寄存器依然有效,实现真正的双向I/O功能
      • 在推挽模式时,读输出数据寄存器时可得到最后一次写的值
      • 开漏模式时,读输入数据寄存器时可得到I/O口状态

    • <参考手册8.1.11 外设的GPIO配置>

    GPIO配置指南:

    1. 输入/输出: GPIOx_CRL共32位,每4位可控制一个引脚,如下面4位用来控制pin0

      MODEx决定了输入/输出模式:
      MODEx>0时(三个值分别代表不同速率),为输出;
      MODEx=0时,为输入;
    2. 设置模式:首先由第一步确定了输入/输出模式,再由CNFx决定模式
    3.  写/读 : 

      • 写:GPIOx_ODR,0-15位,分别控制16个引脚的电平,写1高(例:写0x01到GPIOx_ODR则设置引脚0为高)
      • 读:GPIOx_IDR, 0-15位,分别保存16个引脚的电平状态,readOnly(例:读到0x01则引脚0为高)!?模拟输入时,GPIOx_IDR读不到状态

    8种模式详解:

    推挽输出&开漏输出

    开漏输出的优点:

    1.利用外部电路的驱动能力,减少IC内部的驱动;

    2.可以将多个开漏输出的Pin,连接到一条线上。形成 “与逻辑” 关系。如果是推挽输出显然是不行的,因为假如你把要”与”的I/O口都挂到一条线上,那么在一些高一些低的情况下显然会烧掉场效应管(原因是两个场效应管直接连通了,联想上面的模型去想吧)

    3.可以利用改变上拉电源的电压,改变传输电平。比如你想这个I/O口输出3.3V电平,那么只需要把上拉电平设为3.3V就OK了撒!这个5V的51单片机也可以输出3.3V电平了,呵呵!但前提是用P0口哈!

    开漏输出的缺点:

    1.输出电流低,因为上拉电阻一般取的比较大(为了减少静态功耗),所以驱动力不足,而推挽输出用的是场效应管,当然驱动能力强了.

    2. 带来上升沿的延时,因为上升沿是通过外接上拉无源电阻对负载充电的,当电阻选择小时延时就小、但功耗大,反之延时大功耗小。

    推挽输出的优点:

    1.驱动能力强,因为用的是场效应管,当然驱动能力强了.

    2.真正的双向口

    推挽输出的缺点:

    1.不能把两个都是推挽输出的CMOS门级相连,这样当一高一低时很容易因功耗过大烧管子,推挽输出一般用于驱动.

    关于双向口与准双向口

    双向口:高电平/低电平/高阻态

    准双向口:高电平/低电平

    输入

    模拟输入:用于ADC

    上拉输入:弱上拉,默认高电平,不过因为弱,可以被外界拉低或升高

    下拉输入:弱下拉,默认低电平,不过因为弱,可以被外界拉低或升高

    浮空输入:引脚“悬空”,电平不确定,由外界决定

     位带操作:

    0x2000_0000‐0x200F_FFFF(SRAM 区中的
    0x4000_0000‐0x400F_FFFF(片上外设区中的最低1MB)

    系统把以上两个区域的映射到某一特殊区域的一个32个位,4个字节

    如0x2000_0000这一字节中的第0位被映射到了0x22000000这个字(4个字节)

    看上去像是:原始区域一位一位地对应到映射区的4个字节4个字节

    获得映射后地址的公式

    AliasAddr = 0x22000000 + ((A‐0x20000000)*8+n)*4 =0x22000000 + (A‐0x20000000)*32 + n*4 

    (例0x20000000的第1位:A=0x20000000,n=1,则计算的AliasAddr=0x22000004)

    AliasAddr = 0x42000000 + ((A‐0x40000000)*8+n)*4 = 0x42000000 + (A‐0x40000000)*32 + n*4

    获得地址后,

    u32 *Px1=(volatile unsigned long  *)AliasAddr

    则*Px1代表源区域的某1位,为*Px1赋值时,看该值的末尾是1还是0来决定最终映射值。

    使用预编译简化求地址操作:参考<<CM3权威指南>>第五章(87页~92页).

  • 相关阅读:
    Git常用命令大全
    前端开发常用正则表达式
    如何让360、遨游、猎豹等双核浏览器默认以webkit内核渲染网页?
    IE如何兼容placeholder属性
    利用sublime的snippet功能快速创建代码段
    浏览器内核总结
    display:inline-block引发的间隙问题解决办法
    常用的CSSreset整理
    input输入框的border-radius属性在IE8下的完美兼容
    详细讲解Android中的AbsListView的源码
  • 原文地址:https://www.cnblogs.com/2cats/p/3575565.html
Copyright © 2020-2023  润新知