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

FreeRTOS是一个小型、可移植、可裁剪的实时操作系统内核,广泛用于嵌入式系统和微控制器应用程序中。下面是一个FreeRTOS项目实战的简单步骤: 1. 了解FreeRTOS:首先,你需要了解FreeRTOS的基本概念和架构。这包括任务、调度器、信号量、消息队列等。 2. 选择硬件平台:FreeRTOS支持许多不同的硬件平台,例如ARM、PIC、AVR等。选择一个适合你的应用程序的硬件平台,并确保你有足够的硬件资源来运行FreeRTOS。 3. 下载FreeRTOS:从FreeRTOS官方网站下载适合你的硬件平台的FreeRTOS内核代码,以及相应的编译器工具链和示例代码。 4. 构建工程:使用你的编译器工具链和示例代码,创建一个新的FreeRTOS项目并构建它。 5. 编写应用程序:编写你的应用程序代码,并使用FreeRTOS API来管理任务、调度器、信号量和消息队列等。 6. 调试和测试:调试和测试你的应用程序,确保它能够正确地运行,并且没有任何内存泄漏或其他问题。 7. 优化:如果你需要更好的性能和更低的资源消耗,可以进行一些优化。例如,使用更高效的数据结构和算法、减少任务间通信的次数等。 总之,FreeRTOS是一个非常灵活和可定制的实时操作系统内核,可以帮助你构建高效、可靠的嵌入式系统应用程序。但是,你需要花费一些时间来了解它的基本概念和架构,并进行适当的调试和测试,以确保你的应用程序能够正确地运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值