基于FreeRTOS+STM32实践-02

按键学习

按键常见的为独立按键和行列按键

stm32中不存在Bit类型数据-而在51内核中存在bit类型的

按键引脚分配

开发板自带3个独立按键:KEY0—PC5  KEY1—PA15  WK_UP – PA0

行列键盘引脚分配:

注意分配管脚的时候,你需要注意你这个引脚有没有其他用途,比如PA9和PA10是串口的,不过以后可以改当发现不合适的时候

行列按键 –8个端口分配—(行)PA1 A2 A3 A4   (列) A5 A6 A7 A11

软件代码部分

独立按键代码

static void Independ_KEY_IO_Init(void)
{
	
	GPIO_InitTypeDef  GPIO_InitStructure;
		
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);  //由于按键的端口过多,而且按键使用的端口一般是不一样的	
	
	GPIO_InitStructure.GPIO_Pin = KEY0_PIN|KEY1_PIN|WK_UP_PIN;				 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 		 //根据原理图知道,按下就是低电平
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
	GPIO_Init(KEY0_GPIO_PORT, &GPIO_InitStructure);	
	GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);	
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 
	GPIO_Init(WK_UP_GPIO_PORT, &GPIO_InitStructure);	 //WK_UP的模式应该为下拉	
					
}
static uint8_t  Key_Scan(void)
{
    if( GPIO_ReadInputDataBit(KEY0_GPIO_PORT, KEY0_PIN ) == 0 )
        return  KEY0_PRESS;
    
    if( GPIO_ReadInputDataBit(KEY1_GPIO_PORT, KEY1_PIN ) == 0 )
        return  KEY1_PRESS;
    
    if( GPIO_ReadInputDataBit(WK_UP_GPIO_PORT, WK_UP_PIN ) == 1 )
        return  WK_UP_PRESS;
    
    return NO_KEYPRESS;
    

}

 行列键盘按键部分

建议:写一个专门测试的任务函数,比如看看我引脚有没有成功配置好

测试按键的初始化设置有没有配置好,所以就简单调试一下,这个不是最终的按键程序,只是为了判断我的按键初始化有没有成功

在完成项目的时候,我们是一个一个的小部分完成,并且测试一个一个小部分

 

 任务函数需要在头文件中声明一下

 

 

无阻塞函数,上图

出现的问题:关于任务优先级的取值出现的问题

可以发现:我的测试的任务优先级为4比LED0的任务优先级高,但是你发现我测试任务的函数是不存在阻塞语句的,导致测试函数一直占用CPU,因此初期的时候,为了避免这种错误,先不需要分优先级,而是全部为1,使用时间片轮转,到了后面才开始分配优先级

KEY0和KEY1正常显示,但是WK_UP不正常显示,--错误原因是配置失败,因为原理图没有看好

WK_UP应该是下拉,而我配置的是上拉

 软件调试的作用

我移植KEY按键的时候,4x4按键,默认上电的时候就有一个按键被检测到,但是我实际上我配置的没问题,但是还是有问题,调试的时候,发现我明明配置的端口电平为高电平,但是上电调试的时候却是默认低电平(一直找不到原因为什么),后来我就换了一个端口就直接成功了---因此学会调试的能力是很重要的
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值