/******************** (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判断句是判断输入引脚的电平