本人菜鸟,第一次用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只有微弱的高输出。 } |
问题解决,结贴了!
评分
查看全部评分
感谢及时处理,下次可以改成【已解决】,方便大家浏览,谢谢!