基于 STM32F103VET6 的浮空输入问题求解
时间:10-02
整理:3721RD
点击:
- /******************** (C) COPYRIGHT 2012 Hou Yongqiang **************************
- * 文件名 :main.c
- * 描述 :用3.5.0版本建的工程模板。
- * 实验平台:STM32
- * 库版本 :ST3.5.0
- *时间 : 2012/11/18
- * 作者 :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************/
在没有任何物体接触 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 ?
在 CSDN 上有人说代码理解错了,他说 “代码理解有误,注释有问题,代码中已设置PB6为浮空状态 if 判断句是判断输入引脚的电平”,原帖在这里
http://bbs.csdn.net/topics/390285197?page=1#post-392946762
具体应该如何理解呢, GPIO_ReadInputDataBit() 的返回值是经过 uint8_t 强制转换的 BitAction 类型,结果只有真和假,为什么不能用 if 来判断呢?