OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
12
返回列表 发新帖
楼主: bluesky_kun

大家来说说自己对GPIO 浮空输入的理解(已解决)

[复制链接]

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2015-11-17 23:37:15 | 显示全部楼层
回复【50楼】小鱼人:
---------------------------------
不可以
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-4-8
在线时间
0 小时
发表于 2016-4-8 16:11:28 | 显示全部楼层
STM32端口做AD采集用,设置为模拟输入,为什么用万用表电流档,表笔一端接IO,另一端接3.3V,能测到84ua电流呢?而且刚好3.3V/84ua约等于40k,即下拉电阻阻值。公司的模拟工程师说这说明IO对地还是有下拉电阻,但是设置为模拟输入,下拉电阻不是自然的就被禁止了吗?
void ADC_Config(void)
{

        ADC_InitTypeDef  ADC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_ADCCLKConfig(RCC_PCLK2_Div2);
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA,ENABLE);   
        
        GPIO_InitStructure.GPIO_Pin  =GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AIN;
        GPIO_Init(GPIOA,&GPIO_InitStructure); //默认速度为两兆


        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Init(GPIOA,&GPIO_InitStructure);


        ADC_InitStructure.ADC_Mode              = ADC_Mode_Independent;  //独立模式
        ADC_InitStructure.ADC_ScanConvMode      =DISABLE; //ENABLE;      //连续多通道模式
        ADC_InitStructure.ADC_ContinuousConvMode =ENABLE;      //连续转换
        ADC_InitStructure.ADC_ExternalTrigConv  = ADC_ExternalTrigConv_None; //转换不受外界决定
        ADC_InitStructure.ADC_DataAlign         =ADC_DataAlign_Right;   //右对齐
        ADC_InitStructure.ADC_NbrOfChannel      =1;   //3    //扫描通道数

        ADC_Init(ADC1, &ADC_InitStructure);

        //转换序列1,2,3
        ADC_RegularChannelConfig(ADC1,ADC_Channel_1, 1,ADC_SampleTime_1Cycles5); //通道X,采样时间为1.5周期,1代表规则通道第1个这个1是啥意思我不太清楚只有是1的时候我的ADC才正常。
    //    ADC_RegularChannelConfig(ADC1,ADC_Channel_2,2,ADC_SampleTime_1Cycles5);
        //ADC_RegularChannelConfig(ADC1,ADC_Channel_3, 3, ADC_SampleTime_1Cycles5);

        //ADC_DMACmd(ADC1,ENABLE);

        ADC_Cmd  (ADC1,ENABLE);             //使能或者失能指定的ADC
        //ADC 自动校准,开机后需要执行一次,保证精度
        // Enable ADC1 reset calibaration register
        ADC_ResetCalibration(ADC1);
        // Check the end of ADC1 reset calibration register
        while(ADC_GetResetCalibrationStatus(ADC1));
        // Start ADC1 calibaration
        ADC_StartCalibration(ADC1);
        // Check the end of ADC1 calibration
        while(ADC_GetCalibrationStatus(ADC1));
        // ADC自动校准结束
   
        ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能或者失能指定的ADC的软件转换启动功能
}
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-12-12
在线时间
11 小时
发表于 2016-4-14 14:14:06 | 显示全部楼层
比较下面两张图, 应该就明白是怎么回事了.
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-12-12
在线时间
11 小时
发表于 2016-4-14 14:16:31 | 显示全部楼层
看这两张图
浮空输入.png
模拟输入.png
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-11-16
在线时间
3 小时
发表于 2016-4-24 15:03:39 | 显示全部楼层
我对STM32 GPIO输入/输出模式进行了一下总结,请大家指正哪里有问题?
1、输入浮空  输入引脚即不接高电平,也不接低电平,用于标准的通讯协议,比如IIC、USART的等,如果想用做按键检测等功能,需外部使用上拉或下拉电阻;
2. 输入上拉  相当于输入浮空用来按键检测外加上拉电阻,只不过这个是内部上拉,省去了外部电路;
3. 输入下拉  同上; 三者共同点就是都要通过 TTL肖特基触发器 转换成0/1信号。既非高即低。
4. 模拟输入  信号进入后不经过上拉电阻或者下拉电阻,关闭施密特触发器,经由另一线路把电压信号传送到片上外设模块。比如传送给ADC模块,由ADC采集电压信号。所以可以理解为模拟输入的信号是未经处理的信号,是原汁原味的信号。

开漏模式:输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。
                  输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路);此模式可以把端口作为双向IO使用。
推挽模式:输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。
                  输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。
回复 支持 1 反对 0

使用道具 举报

58

主题

6287

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11350
金钱
11350
注册时间
2014-4-1
在线时间
1267 小时
发表于 2016-4-24 15:18:56 | 显示全部楼层
心怀蓝图 发表于 2016-4-24 15:03
我对STM32 GPIO输入/输出模式进行了一下总结,请大家指正哪里有问题?
1、输入浮空  输入引脚即不接高电平 ...


模拟输入和推挽模式还算对,

其他基本都有误。


回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-11-16
在线时间
3 小时
发表于 2016-4-25 20:48:24 | 显示全部楼层
xuande 发表于 2016-4-24 15:18
模拟输入和推挽模式还算对,

其他基本都有误。

错的请指正,谢谢。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-11-16
在线时间
3 小时
发表于 2016-4-25 20:50:08 | 显示全部楼层
xuande 发表于 2016-4-24 15:18
模拟输入和推挽模式还算对,

其他基本都有误。

我对输入一直理解不是恰当,还请大神指教指教
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-11-16
在线时间
3 小时
发表于 2016-4-25 20:50:30 | 显示全部楼层
xuande 发表于 2016-4-24 15:18
模拟输入和推挽模式还算对,

其他基本都有误。

我对输入一直理解不是恰当,还请大神指教指教  谢谢!
回复 支持 0 反对 1

使用道具 举报

58

主题

6287

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11350
金钱
11350
注册时间
2014-4-1
在线时间
1267 小时
发表于 2016-4-25 22:30:58 | 显示全部楼层
本帖最后由 xuande 于 2016-4-25 22:35 编辑

输入浮空,指上拉、下拉电阻都不加。

模拟输入端,肯定要采用这种方式,否则会改变外部信号。试想,在运放的输入端随便接电阻,还能不改变运算结果吗?!

数字输入的情况下,上拉、下拉的情况稍复杂,有时是必须,有时随意性很强。
在按键检测上,按键本身没有驱动能力,必须靠外接电阻产生电平信号,这种情况上拉或下拉电阻就必不可少;
IIC比较特殊,要依靠线与逻辑,所以上拉电阻必不可少。
——顺便说一句,这两种情况我从来不用芯片IO的电阻,我一定会外接电阻,一般是4.7K~10K甚至3.3K。
因为芯片内部集成的电阻,阻值都比较大(几十K),提供的“拉力”不强且难说稳定。
使用内部电阻,虽然功能似乎也能正常实现,但不能保证所有板子都正常。已经有人遇到这情况了。

其他情况,外界信号源驱动能力比较强的情况下,可以稳定地提供高、低电平,这时上拉、下拉都不需要,至少道理上如此。
那为什么大家包括我还是会加电阻呢?两个目的:1、避免在某些情况下造成的不确定性。
比如:
串口协议规定,RXD端的空闲电平必须为高,RXD上的下降沿将触发接收方的接收动作。
如果接收方先上电开机,或者线路插头没有连接,这时RXD端为高阻状态,电平不稳定,会产生乱码。
因此,在己方的RXD端加上拉电阻,避免出现这些情况。
再比如:
外部输入的中断信号,其电平变化表示出现了重要事件。
所以一般往相反方向加电阻,相当于强迫对方使劲敲门。当然也不能太过分,不能让对方敲不响。
2、讨个心安吧。不举例了。
总之,除了必须加电阻的情况,其他情况都是为了提高一些可靠性。
所以你会看到,有人加,有人不加,有人加得大,有人加得小。
初学者可以慎重一些、保守一些,有经验再说。

开漏模式:输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。
                  输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路);此模式可以把端口作为双向IO使用。

(PMOS(上臂)始终关断,相当于没有;
输出1时,NMOS也关断,靠外部上拉电阻产生1;输出0时,NMOS导通,靠上拉电阻的压降产生0。
这似乎与双向没有关系。)

推挽模式:输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。
                  输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。
(这句对头。)




回复 支持 反对

使用道具 举报

5

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2013-9-11
在线时间
39 小时
发表于 2016-6-1 21:09:51 | 显示全部楼层
浮空输入时外面的输入电阻,应该配置为多大的,我用的100K,怎么一直检测为0啊
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
372
金钱
372
注册时间
2016-8-15
在线时间
55 小时
发表于 2016-9-3 16:38:30 | 显示全部楼层
在网上查阅的时候看到说 输入浮空是高阻态,所以对外部干扰很敏感,即使是细微的电流也会有很大的电压,这样的观点对吗?
第二,如果上面观点是对的话,那么浮空输入应该怎么使用呢?或者说浮空输入的存在有什么意义呢,既然对外部干扰这么敏感
祝中国健儿奥运好成绩
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-2-3
在线时间
3 小时
发表于 2018-7-17 18:19:52 | 显示全部楼层
如果浮空输入做按键判断的时候,浮空不是电平不确定吗?怎么确定按键
回复 支持 反对

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-7-24 14:10:25 | 显示全部楼层
eternity86 发表于 2012-10-19 10:59
回复【14楼】正点原子:
---------------------------------
原子哥,我遇到个奇怪的问题,我将LED接在STM32 ...

推拉输出是什么模式
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2017-7-23
在线时间
39 小时
发表于 2018-7-24 14:21:59 | 显示全部楼层
正点原子 发表于 2011-3-21 12:32
顾名思义,浮空就是 浮在空中.也就是没有什么把他拉下来,也没有什么把它拉上去.
浮空最大的特点就是电 ...

原子哥,那编码器应该选择哪种输入?我精英版不能用浮空,而mini板却可以?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-9-24 10:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表