微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 基于 STM32F103VET6 的浮空输入问题求解

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

时间:10-02 整理:3721RD 点击:

  1. /******************** (C) COPYRIGHT 2012 Hou Yongqiang **************************
  2. * 文件名  :main.c
  3. * 描述    :用3.5.0版本建的工程模板。         
  4. * 实验平台:STM32
  5. * 库版本  :ST3.5.0
  6. *时间 : 2012/11/18
  7. * 作者    :Hou Yongqiang
  8. **********************************************************************************/
  9. #include "stm32f10x.h"

  10. void GPIO_Configuration(void)
  11. {
  12.     GPIO_InitTypeDef GPIO_InitStructure;
  13.      
  14.     RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOE, ENABLE);         //对GPIOE_Pin_7初始化
  15.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  16.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                     //输出最高频率为50MHz
  17.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                      //设置为推挽输出
  18.     GPIO_Init (GPIOE, &GPIO_InitStructure);

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

  25. /*
  26. * 函数名:main
  27. * 描述  : 主函数
  28. * 输入  :无
  29. * 输出  : 无
  30. */

  31. int main(void)
  32. {
  33.         GPIO_Configuration();                                                                       //IO口初始化函数
  34.         while(1)
  35.         {
  36.                 // add your code here ^_^。
  37.                 if( GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6) )                          //判断GPIOB_Pin_6是否是浮空状态
  38.                 {
  39.                         GPIO_SetBits (GPIOE, GPIO_Pin_7);
  40.                 }
  41.                 else
  42.                {
  43.                         GPIO_WriteBit (GPIOE, GPIO_Pin_7, Bit_RESET);
  44.                }
  45.         }
  46. }
  47. /******************* (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 ?
在 CSDN 上有人说代码理解错了,他说 “代码理解有误,注释有问题,代码中已设置PB6为浮空状态 if 判断句是判断输入引脚的电平”,原帖在这里
http://bbs.csdn.net/topics/390285197?page=1#post-392946762
具体应该如何理解呢, GPIO_ReadInputDataBit() 的返回值是经过 uint8_t 强制转换的 BitAction 类型,结果只有真和假,为什么不能用 if 来判断呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top