用systick做时间20ms的判断,用状态机概念的按键扫描三状态去除抖动,状态0:有按键按下,状态1:有按键按下,判断具体按键,状态3:判断按键抬起,没20ms进行状态的判断。
流程图:
SYSTICK程序(不包括初始化程序,初始化程序在delay.c中)
SysTick->LOAD=20*fac_ms;//写入装载值
SysTick->VAL =0x00; //清零计数值
SysTick->CTRL=0x01 ; //启动systick
temp = SysTick->CTRL;
if(temp&0x01&&(temp&(1<<16)))//判断systick异常
出现的问题:
1.发现GPIO_ReadInputData读取的数据不对,用GPIO_ReadInputDataBit
流程图:
SYSTICK程序(不包括初始化程序,初始化程序在delay.c中)
SysTick->LOAD=20*fac_ms;//写入装载值
SysTick->VAL =0x00; //清零计数值
SysTick->CTRL=0x01 ; //启动systick
temp = SysTick->CTRL;
if(temp&0x01&&(temp&(1<<16)))//判断systick异常
出现的问题:
1.发现GPIO_ReadInputData读取的数据不对,用GPIO_ReadInputDataBit
代替正常。仿真分析,I/O口和数据位对应错误。PC_2,PC_3,PC_5,分别对应IDR寄存器的第3位,第四位,第六位。
2.修改程序的结构,添加在状态2执行完判断后进入状态3.
反思:考虑要调理清晰,分析要透彻见底,小心思维惯性!
2.修改程序的结构,添加在状态2执行完判断后进入状态3.
反思:考虑要调理清晰,分析要透彻见底,小心思维惯性!