qq826220679 发表于 2016-10-23 14:10:12

STM32 F103 VET6 PA0、PA1、PA2、PA3引脚 配置为有上拉输入,不工作

本人菜鸟,第一次用STM32 F103 VET6,想通过按键控制PC7IO口输出高低电平,如下详述:

PC0、PC1、PC2、PC3PA0、PA1、PA2、PA3、PC4、PC5、PB0、PB1 都 配置为有内部上拉输入,
然后通过按键接地,按下其中一个按键 ,想让PC.7 输出高电平,松开按钮后,输出低电平。

这时候通过实验 C0、PC1、PC2、PC3 能实现PC7电平翻转。

而其余PA0、PA1、PA2、PA3、PC4、PC5、PB0、PB1 这8 个按钮输入,系统却不能正常识别。

用万能表测量IO口,未按下,均为3.3V,说明配置上拉输入已经生效,按下按钮,IO口,也
能变成低电平0V。

现在现象是:分别按后PA0、PA1、PA2、PA3、PC4、PC5、PB0、PB1 这8 个
按钮,PC7仅有很低的电压输出,因为输出经过驱动后接LED,所以能看到微微亮。

不知道是什么原因出现这种现象?

代码如下:

void IN_Init(void)
{
         GPIO_InitTypeDefGPIO_InitStructure;
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);      //使能PA,PB,PC,PD,PE端口时钟

      //IN1
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;         //IN1-->PC.1端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOC, &GPIO_InitStructure);            //根据设定参数初始化GPIOC.1

      //IN2
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;         //IN2-->PC.0端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOC, &GPIO_InitStructure);            //根据设定参数初始化GPIOC.0

      //IN3
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;         //IN3-->PC.4端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOC, &GPIO_InitStructure);            //根据设定参数初始化GPIOC.3

      //IN4
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;         //IN4-->PC.3端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOC, &GPIO_InitStructure);            //根据设定参数初始化GPIOC.2



      //IN5
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;         //IN5-->PA.1端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOA, &GPIO_InitStructure);            //根据设定参数初始化GPIOA.1

      //IN6
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;         //IN6-->PA.0端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOA, &GPIO_InitStructure);            //根据设定参数初始化GPIOA.0

      //IN7
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;         //IN7-->PA.3端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOA, &GPIO_InitStructure);            //根据设定参数初始化GPIOA.3

      //IN8
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;         //IN8-->PA.2端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOA, &GPIO_InitStructure);            //根据设定参数初始化GPIOA.2



      //IN9               
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;         //IN9-->PC.5端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOC, &GPIO_InitStructure);            //根据设定参数初始化GPIOD.5

      //IN10
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;         //IN10-->PC.4端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOC, &GPIO_InitStructure);            //根据设定参数初始化GPIOD.4

      //IN11
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;         //IN11-->PB.1端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOB, &GPIO_InitStructure);            //根据设定参数初始化GPIOB.1

      //IN12
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;         //IN12-->PB.0端口配置
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入
      GPIO_Init(GPIOB, &GPIO_InitStructure);            //根据设定参数初始化GPIOB.0
}

void OUT_Init(void)
{
                GPIO_InitTypeDefGPIO_InitStructure;
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);         //使能PA,PB,PC,PD,PE端口时钟
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                                 //OUT1-->PC.7 端口配置
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;               //IO口速度为2MHz
                GPIO_Init(GPIOC, &GPIO_InitStructure);                                       //根据设定参数初始化GPIOC.7
}
void IN_16(void)
{

                //IN1
                if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低

                //IN2
                if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低

                //IN3
                if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低
               
                //IN4
                if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低
               

                //IN1-IN4 输入,PC.7输出高低电平,工作正常!

                //IN5
                if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == Bit_RESET) // = 0
                GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低
               
                //IN6
                if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低
               
                //IN7
                if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低
               
                //IN8
                if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低
               
                //IN9
                if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低
               
                //IN10
                if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_4) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低
               
                //IN11
                if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低
               
                //IN12
                if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == Bit_RESET) // = 0
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);            //PC.7 输出高
                else
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);          //PC.7输出低
               
                //IN5 - IN12   工作不正常,按下输入按钮后,PC.7只有微弱的高输出。
}





qq826220679 发表于 2016-10-24 11:22:10

犯了低级错误,第一个按钮打开IO了,第二按钮就关闭了,如此重复。呵呵
问题解决,结贴了!

qq826220679 发表于 2016-10-23 15:07:57

怎么没有人呢?自己顶一下!一直在等哦!

qq826220679 发表于 2016-10-23 20:38:07

到底怎么回事啊?急死人了???

zero99 发表于 2016-11-1 13:11:26

qq826220679 发表于 2016-10-24 11:22
犯了低级错误,第一个按钮打开IO了,第二按钮就关闭了,如此重复。呵呵
问题解决,结贴了! ...

感谢及时处理,下次可以改成【已解决】,方便大家浏览,谢谢!

页: [1]
查看完整版本: STM32 F103 VET6 PA0、PA1、PA2、PA3引脚 配置为有上拉输入,不工作