按键扫描函数
void KEY_Process(void)
int key1_state,key2_state,key1_state_b,key2_state_b,key12_count=0;
void KEY_Process(void)
{
uint32_t count=0;
key1_state=HAL_GPIO_ReadPin(DIN1_GPIO_Port,DIN1_Pin);
key2_state=HAL_GPIO_ReadPin(DIN2_GPIO_Port,DIN2_Pin);
while(!KEY1_S1_PRESS)
{
count++;
if(count>LONG_KEY_DELAY)
{
BEEP_RANG;//蜂鸣器响
}
}
if(count>LONG_KEY_DELAY)
{
SoftReset();
}
if(key1_state<key1_state_b)
target_speed+=1000;
if(key2_state<key2_state_b)
target_speed-=1000;
if(target_speed>20000)//目标速度 限制.
target_speed=20000;
if(target_speed<-20000)//目标速度 限制.
target_speed=-20000;
if((key1_state==0)&&(key2_state==0))
{
key12_count++;
}
if(key12_count>5000)
{
key12_count=0;
//find_commutation_and_set_tamagawazero();
}
key1_state_b=key1_state;
key2_state_b=key2_state;
}![在这里插入图片描述](https://img-blog.csdnimg.cn/894327bce47f41bda3e1b4daa8b9441a.png)
1、由下面2句获取了
当前按键的状态
2、判断是否有长按
,有则蜂鸣器响、延时500ms和系统重置
,while(1)
是防止重置不成功跳转到其它地方
。
3、作用:
(1、key1_state、key1_state_b、key2_state、key2_state_b
的初始值都为 1,是用来判断按下的是哪个按键,并增加/递减速度
;
(2、target_speed
是用来规定电机最大速度
。
4、下面的代码是两个按键同时按下,并持续到一定时间
,就执行find_commutation_and_set_tamagawazero();
但是这里被注释掉了。
5、一次按键加速\减速流程结束了,使得key1_state_b、key2_state_b
返回初始值 0x01
,以便下次使用按键操作。