你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
826220679 提问时间:2016-10-23 14:10 /
本人菜鸟,第一次用STM32 F103 VET6,想通过按键控制PC7IO口输出高低电平,如下详述:

PC0、PC1、PC2、PC3  PA0、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_InitTypeDef  GPIO_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_InitTypeDef  GPIO_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只有微弱的高输出。
}





收藏 1 评论4 发布时间:2016-10-23 14:10

举报

4个回答
826220679 最优答案 回答时间:2016-10-24 11:22:10
犯了低级错误,第一个按钮打开IO了,第二按钮就关闭了,如此重复。呵呵
问题解决,结贴了!

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

826220679 回答时间:2016-10-23 15:07:57
怎么没有人呢?自己顶一下!一直在等哦!
826220679 回答时间:2016-10-23 20:38:07
到底怎么回事啊?急死人了???
zero99 回答时间:2016-11-1 13:11:26
qq826220679 发表于 2016-10-24 11:22
犯了低级错误,第一个按钮打开IO了,第二按钮就关闭了,如此重复。呵呵
问题解决,结贴了! ...

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

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版