新手入门
- 积分
- 15
- 金钱
- 15
- 注册时间
- 2016-10-23
- 在线时间
- 2 小时
|
1金钱
本帖最后由 1770106568 于 2016-10-24 10:38 编辑
本人菜鸟,第一次用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只有微弱的高输出。
}
|
|