GPIO_Input

程序很简单,就是读取按键是否按下,控制LED是否点亮。

按键初始化程序

1
2
3
4
5
6
7
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
RCC_APB2Periph_GPIOB,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB,&GPIO_InitStructure);

按键扫描程序

1
2
3
4
5
6
7
8
9
10
11
static u8 key_up = 1;
if(mode)key_up = 1;
if(key_up&&(KEY0 == 0||KEY1 == 0||KEY2 == 0||WK_UP == 0))
{
delay_ms(10);
key_up = 0;
if(KEY0 == 0)return KEY0_PRES;
else if(KEY1 == 0)return KEY1_PRES;
else if(KEY2 == 0)return KEY2_PRES;
else if(WK_UP == 0)return WKUP_PRES;
}else if(KEY0 == 1&&KEY1 == 1&&KEY2 == 1&&WK_UP == 1)key_up = 1;

LED的程序就免了,就只是使用了PA的1,2,3引脚。

程序仿真成功,但是烧录进单片机后,无法实现,问题筛查中。

问题描述:

始终只有一个LED处于点亮状态,而且按键无法改变LED状态。

问题筛查

  • 我使用的是stm32的最小系统板,外设在另外一块板,怀疑共地问题。但在我让stm32最小系统板与另外一块板共地后问题依然存在,所以该情况排除。
  • 怀疑LED点亮程序有问题。单独把LED的程序提取出来实验,工作正常。
  • 怀疑按键程序有问题。经实验验证,按键按下无反应,按键程序存在问题可能性很大

问题解决

因为仿真时不存在问题,所以程序本身正确的可能性非常大。怀疑硬件方面存在问题,等使用stm32的开发板重新验证一次程序看看。

已解决 在另外一块stm32的开发板上程序正常运行