嵌入式c语言——学习笔记

嵌入式c语言——学习笔记6

STM32的按键开发基础

按键描述的基本原理:

·按键信号的识别:一般来说,按键的两个引脚的一端通过电阻上拉到高电平,另一端则接地

有按键按下的时候,输入引脚位高电平

当有按键按下,输入引脚为低电平

通过反复读取按键输入引脚的信号,然后识别高地电平来判断是否有按键触发。

·为什么去抖动:按键的输入引脚有低电平产生不代表一定是有按键按下,也许是干扰信号,因此,需要通过去抖动处理,将这些干扰信号过滤,从而获得真实的按键触发信号。

·如何去抖动:首次检测到按键输入引脚有低电平后,稍作延时,再次读取该引脚,如还是低电平,则确认为按键触发信号;否则,判断为干扰信号,不予处理。

HAL库中关于GPIO的3个重要函数

·电平输出函数

void HAL_GPIO_WritePin( GPIO_TypeDef*GPIOx, uint16_t GPIo_Pin, GPIO_PinState PinState );

void HAL_GPIO_WritePin( GPIO_TypeDef*GPIOx, uint16_t GPIo_Pin, GPIO_PinState PinState );

·电平翻转函数

void HAL_GPlO_TogglePin( GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin);

void HAL_GPlO_TogglePin( GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin);

·电平输入函数

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

例:判断PC13引脚的输入信号,若为高电平,则将PB9引脚控制的LED灯的开关状态切换。

if( HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)== GPIO_PIN_SET )

{

        HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);

}

if( HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)== GPIO_PIN_SET )

{

    HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);

}

实例:

·代码最好写在/* USER CODE BEGIN 0 *//* USER CODE END 0 */之间

代码如下:

void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
#define KEY2 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)/*宏定义*/
#define KEY3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)/*宏定义*/
#define KEY4 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5)/*宏定义*/

void Delay(unsigned int t)
{
	while(t--);/*目的是消耗时间*/
}

/*按键扫描函数*/
void Scan_Keys()
{
	if(KEY2 == 0)/* 0相当于GPIO_PIN_RESET */
	{
	  Delay(1000);
	  if(KEY2 == 0)
	  {
		  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);/*翻转函数*/
		  while(KEY2 == 0);
	  }
  }
	
	if(KEY3 == 0)
	{
		Delay(1000);
		if(KEY3 == 0)
		{
			while(KEY3 == 0);
			HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);/*翻转函数*/
		}
	}
	
	if(KEY4 == 0)
	{
		Delay(1000);
		if(KEY4 == 0)
		{
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_RESET);
			while(KEY4 == 0);
		}
	}
}
/* USER CODE END 0 */

while(1)函数中写入Scan_Keys();

如果没有配针的情况下要增加或者修改引脚的话有两种方法:

第一种方法:退出Keil5,回到配置工具STM32CubeMX中增加或者修改引脚,再生成代码。

第二种方法:在gpio.c里面修改代码

如果不知道gpio.c的话也可以在main.c中找到  MX_GPIO_Init(); 然后右击选中Go To Definition Of 'MX_GPIO_Init();'

写入图中红框中的代码

最后就可以运行成功了!

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值