您的位置:首页 > 科技 > IT业 > 中国手机网站_网络整合营销的概念_数字营销工具_百度代运营

中国手机网站_网络整合营销的概念_数字营销工具_百度代运营

2024/12/24 10:50:34 来源:https://blog.csdn.net/weixin_66732375/article/details/144644852  浏览:    关键词:中国手机网站_网络整合营销的概念_数字营销工具_百度代运营
中国手机网站_网络整合营销的概念_数字营销工具_百度代运营

问题引入

由于在使用例程中的按键时,发现按键无效,经过Debug发现程序进入按键扫描死循环中。

由于初始按键引脚时,按键引脚上拉,按下为高电平。给的引脚配置为浮空输入(不确定高低电平),导致初始按键引脚电平初始就为高,所以导致无论按键按下与否,按键引脚一直为高。

使得按键扫描函数,一直在while中,无法退出,程序无法往下运行。

经过改正,初始按键引脚下拉即可解决上述问题。

GPIO_InitStructure.Pull = GPIO_PULLDOWN;
/*** @brief   检测是否有按键按下* @param   具体的端口和端口位*		@arg GPIOx: x可以是(A...G) *		@arg GPIO_PIN 可以是GPIO_PIN_x(x可以是1...16)* @retval  按键的状态*		@arg KEY_ON:按键按下*		@arg KEY_OFF:按键没按下*/
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{			/*检测是否有按键按下 */if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == KEY_ON )  {	 /*等待按键释放 */while(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == KEY_ON);   return 	KEY_ON;	 }elsereturn KEY_OFF;
}
/*** @brief  配置按键用到的I/O口* @param  无* @retval 无*/
void Key_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;/*开启按键GPIO口的时钟*/KEY1_GPIO_CLK_ENABLE();KEY2_GPIO_CLK_ENABLE();/*设置引脚为输入模式*/GPIO_InitStructure.Mode = GPIO_MODE_INPUT; /*设置引脚不上拉也不下拉*/GPIO_InitStructure.Pull = GPIO_PULLDOWN;/*选择按键的引脚*/	GPIO_InitStructure.Pin = KEY1_PIN; /*使用上面的结构体初始化按键*/HAL_GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);/*选择按键的引脚*/GPIO_InitStructure.Pin = KEY2_PIN; /*使用上面的结构体初始化按键*/HAL_GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStructure);}

知识扩展

1.理论分析

理论情况按键的电压波形应该为方波

但是实际按键电压波形,会有电压抖动,我们需要通过延时来进行按键消抖,这里需要用到延时函数delay_ms()

1.2按键扫描程序逻辑

通过分析,我们可以知道。

  • 第一步,判断是否有按键按下,有按键按下时,将继续执行,没有按键按下时,将返回0,即没有按键按下。
  • 第二步,当判断为有按键按下时,判断为key0还是key1,当为key0时,返回1,即为按键1按下;当为key1时,返回为2,即为按键2按下。

2.程序编写

如上所示。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com