当前位置: 代码迷 >> 单片机 >> 基于 STM32F103VET6 的浮空输入有关问题求解
  详细解决方案

基于 STM32F103VET6 的浮空输入有关问题求解

热度:255   发布时间:2016-04-28 15:39:01.0
基于 STM32F103VET6 的浮空输入问题求解

/******************** (C) COPYRIGHT 2012 Hou Yongqiang **************************
 * 文件名  :main.c
 * 描述    :用3.5.0版本建的工程模板。         
 * 实验平台:STM32
 * 库版本  :ST3.5.0
 *
 * 作者    :Hou Yongqiang 
**********************************************************************************/
#include "stm32f10x.h"
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOE, ENABLE);    //对GPIOE_Pin_7初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //输出最高频率为50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //设置为推挽输出
GPIO_Init (GPIOE, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB, ENABLE);    //对GPIOB_Pin_6初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;         //输出最高频率为10MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     //设置为浮空输入
GPIO_Init (GPIOB, &GPIO_InitStructure);
}

/* 
 * 函数名:main
 * 描述  : 主函数
 * 输入  :无
 * 输出  : 无
 */

int main(void)
{
GPIO_Configuration();    //IO口初始化函数
while(1)
{
// add your code here ^_^。
if( GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6) )    //判断GPIOB_Pin_6是否是浮空状态
{
GPIO_SetBits (GPIOE, GPIO_Pin_7);
}
else
{
GPIO_WriteBit (GPIOE, GPIO_Pin_7, Bit_RESET);
}
}
}
/******************* (C) COPYRIGHT 2012 Hou Yongqiang *****END OF FILE************/

说明: GPIOE_Pin_7 接LED的正极,GPIOB_Pin_6 置空

在没有任何物体接触 GPIOB_Pin_6 的时候 LED 发光

<1>、在使用 3.3V 的电压接触 GPIOB_Pin_6 时LED仍发光;

<2>、使用 GND 接触 GPIOB_Pin_6 时 LED 不发光,此时当接触的引线拿掉后 LED 仍不发光,大约延时 1S 的时间;

<3>、但是如果用 GND 快速的于 GPIO_Pin_6 接触的时候 LED 会在发光于不发光之间来回跳动,当接触停止(这里假设拿去引线) LED 仍会延时 1S 的时间不发光

在三点这里有点不明白

当用 3.3V 的电压接触 GPIOB_Pin_6 的时候,此时该引脚就应该不是浮空状态了,为什么 LED 还会发光?
当用 GND 接触GPIOB_Pin_6 时 LED 不发光是对的,但是为什么当接触的引线去掉的时候 LED 仍会停留在不发光的状态大约 1S ?
------解决方案--------------------
代码理解有错误 注释有问题
代码中已设置PB6为浮空状态 if判断句是判断输入引脚的电平