stm32入门按键控制问题
为什么我按下按键后没有反应,是应为GPIO_ReadInputDataBit函数问题还是其他void Key_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
}
int main()
{
Led_Init_My();
SysTick_init_My(72);
Key_Init();
while(1)
{
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==1)
{
delay_ms(10);
GPIO_SetBits(GPIOC,GPIO_Pin_1);
delay_ms(500);
}
else if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
{
delay_ms(10);
GPIO_ResetBits(GPIOC,GPIO_Pin_1);
delay_ms(500);
}
}
}
本帖最后由 toofree 于 2018-7-20 14:23 编辑
GPIO时钟开了没有?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
看你用了RCC_APB2PeriphResetCmd。
在if中延时做什么?去掉延时。
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)!=Bit_RESET)
{
GPIO_SetBits(GPIOC,GPIO_Pin_1);
}
else
{
GPIO_ResetBits(GPIOC,GPIO_Pin_1);
}在第3行、7行,分别加断点,你看进不进。
这标题我还以为是原创。你这按键是用中断还是轮询,如果是轮询,延时可以全去掉再来试试,轮询按键,循环里时间基本都挂起,根本就响应不了你 我建议测试下,主程序循环,先执行下列代码看PC1口是否有电平反转。
while(1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_1);
delay_ms(500);
GPIO_ResetBits(GPIOC,GPIO_Pin_1);
delay_ms(500);
} 看样子应该是轮训 都已经死循环了
1延时没有必要
2C1接的是灯吗
3通过E2控制C1 看你key还蛮多的 换一个看看
1、浮空输入GPIO_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
2、带上拉输入GPIO_IPU——IO内部上拉电阻输入
3、带下拉输入GPIO_IPD—— IO内部下拉电阻输入
页:
[1]