• STM32f10xxx 之 8种GPIO模式


    GPIO_Mode_AIN = 0x0, // 模拟输入
    
    GPIO_Mode_IN_FLOATING = 0x04, // 输入浮空
    
    GPIO_Mode_IPD = 0x28, // 输入下拉
    
    GPIO_Mode_IPU = 0x48, // 输入上拉
    
    GPIO_Mode_Out_OD = 0x14, // 开漏输出
    
    GPIO_Mode_Out_PP = 0x10, // 推挽输出
    
    GPIO_Mode_AF_OD = 0x1C, // 第二功能开漏输出
    
    GPIO_Mode_AF_PP = 0x18 // 第二功能推挽输出
    

    首先说说数字输入,其有三种状态:输入浮空/输入下拉/输入上拉,IO口配置为输入时,port口工作原理图如下:
    在这里插入图片描述
    如上图所示,当GPIO口配置为数字输入时,输出功能被禁能了。

    • “输入上拉”:GPIO口透过内部的上拉电阻连接到VDD,此时,GPIO口的状态为高电平,当GPIO口连接到button时,button另一端接地。button闭合时,GPIO口被拉至低电平,CPU即可判别button按下。在实际使用的情况来看,内部弱上拉,信号总是没有外部上拉来的稳定,特别在上电即需要检测IO状态的情况,并且基本上内部弱上拉只适合检测button这种不严格的电平状况,所以如果有条件外接上拉电阻的话,还是不要配置为弱上拉。
    • “输入下拉”:很好解释了,GPIO口透过下拉电阻直接接地,此时GPIO口状态为低电平,若用来检测button,button的另一端不再接地,而是接到VCC,此处得十分注意灌电流,以免烧坏MCU。
    • “输入浮空”:则是即不配置为输入上拉,也不配置为输入下拉。即IO口处于电平不稳定状态,若是GPIO口闲置未使用,推荐将其配置为输入上拉或者输入下拉,以免干扰正常程序的进行。输入浮空状态通常配合外接上拉或者外接下拉使用。
      接着说数字输出,其也有两种状态:开漏输出/推挽输出,IO口配置为输出时,port口工作原理图如下:
      在这里插入图片描述
    • “开漏输出”:P-MOS管是被禁止的,当向OUTPut寄存器写入“0”的时候,N-MOS管直接导通,将IO口接地,当写入“1”的时候,IO口处于高阻态状态。这种情况一般用于外部自带驱动的情况。
    • “推挽输出”:当向OUTPut寄存器写入“0”时,N-MOS管直接导通,将IO口接地,当写入“1”时,P-MOS管,导通,GPIO口直接接入VDD,此时向外输出高电平,但驱动能力一般都很弱,还得考虑灌电流的大小,若是需要驱动大功率器件,外部一般还会增加外放驱动电路。
    • 第二功能输出状态:什么是第二功能,即有些IO口存在复用的情况,复用的功能即被称作第二功能,输出配置如上所示,当IO口被配置为输出时,其输入被默认配置为输入浮空状态,以I2C为例,I2C从机,不仅仅要检测SDA的状态收取数据,还要可以输出状态发送数据,所以第二功能基本上配置为输出,使其即可输入检测,也可输出,输出方式如何配置视具体情况而言,勿用多言。
    • 最后,模拟输入,其port口工作原理图如下:
      在这里插入图片描述
      被配置为模拟输入后,输入检测的施密特触发器和输出部分全部关闭了。输入的值直接接入对应的模拟检测外设,譬如ADC。

    说了这么多,接下来以配置TIM2输出PWM的GPIO口配置为例:

    TIM2_CH1在“PA0”口,首先使能GPIO A的时钟,

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );
    

    接着配置IO为复用推挽输出,输出速率选择10MHZ,

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; // PA0:A口的第0个引脚
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; // 翻转频率10MHz
    GPIO_Init(GPIOA, GPIO_InitStructure);
    

    GPIO如此配置,然后配置定时器(不再详述),最后在PA0即可输出PWM波形了。

  • 相关阅读:
    测试软件—禅道BUG管理工具
    C语言 线性表的操作~(未完)
    数据库考纲~
    圣杯布局和双飞翼布局总局
    总结布局用法
    springboot~入门第三篇~与mybatis整合~(未完)
    微信小程序里 wx:for和wx:for-item区别(补充下wx:key)
    对比下小程序语法和Vue语法异同
    视频转换 rtsp 流 转rtmp流播放(待完善)
    Vue钩子函数~
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537678.html
Copyright © 2020-2023  润新知