从0到1学习FreeRTOS:FreeRTOS + 基础外设 :(二)利用按键挂起、恢复任务

本文详细介绍了如何在FreeRTOS中结合GPIO和按键,实现任务的挂起与恢复。通过vTaskSuspend()和vTaskResume()函数,控制Test_Task的执行状态,提供了一种在STM32平台上进行任务管理的实例。
摘要由CSDN通过智能技术生成

从0到1学习FreeRTOS:FreeRTOS + 基础外设 :(二)利用按键挂起、解挂任务

特别说明:

本文主要讲解FreeRTOS和外设的合并。

想要学习FreeRTOS请移步至从0到1攻破FreeRTOS:汇总帖选择相关内容进行观看即可。

想要学习关于GPIO按键检测请移步至再造STM32:汇总贴选择相关内容进行观看即可。


目录

特别说明:

一、知识点

1、GPIO 

2、按键检测  

3、挂起任务、恢复任务 

二、KEY部分的配置

三、任务主体

1、KEY函数

2、Test_Task任务主体(测试)

四、main.c

五、实验现象:

六、挂起任务、恢复任务

1、挂起任务:vTaskSuspend(Test_Task_Handle);

2、恢复任务:vTaskResume(Test_Task_Handle);


 

一、知识点

1、GPIO  GPIO的讲解  

2、按键检测  再造STM32---第十部分:GPIO输入—按键检测

3、挂起任务、恢复任务 从0到1学习FreeRTOS:FreeRTOS 内核应用开发:(六)任务管理 

二、KEY部分的配置

关于KEY配置部分不过多讲解,如果想了解,请移步:

GPIO的讲解

再造STM32---第十部分:GPIO输入—按键检测

bsp_key.c文件

/**
  ******************************************************************************
  * @file    main.c
  * @author  Sumjess
  * @version V1.0
  * @date    2019-05-xx
  * @brief   按键应用bsp(扫描模式)
  ******************************************************************************
  * @attention
  *
  * 实验平台   :STM32 F429 
  * CSDN Blog  :https://blog.csdn.net/qq_38351824
  * 微信公众号 :Tech云
  *
  ******************************************************************************
  */ 
  
#include "bsp_key.h" 

/// 不精确的延时
void Key_Delay(__IO u32 nCount)
{
	for(; nCount != 0; nCount--);
} 

/**
  * @brief  配置按键用到的I/O口
  * @param  无
  * @retval 无
  */
void Key_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	/*开启按键GPIO口的时钟*/
	RCC_AHB1PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK,ENABLE);
	
  /*选择按键的引脚*/
	GPIO_InitStructure.GPIO_Pin = KEY1_PIN; 
  
  /*设置引脚为输入模式*/
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; 
  
  /*设置引脚不上拉也不下拉*/
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	
  /*使用上面的结构体初始化按键*/
	GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);    
  
  /*选择按键的引脚*/
	GPIO_InitStructure.GPIO_Pin = KEY2_PIN; 
  
  /*使用上面的结构体初始化按键*/
	GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStructure);  
}

/**
  * @brief   检测是否有按键按下     
  *	@param 	GPIOx:具体的端口, x可以是(A...K) 
	*	@param 	GPIO_PIN:具体的端口位, 可以是GPIO_PIN_x(x可以是0...15)
  * @retval  按键的状态
  *		@arg KEY_ON:按键按下
  *		@arg KEY_OFF:按键没按下
  */
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{			
	/*检测是否有按键按下 */
	if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )  
	{	 
		/*等待按键释放 */
		while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);   
		return 	KEY_ON;	 
	}
	else
		return KEY_OFF;
}
/*
两个按键均有硬件去抖------按键上并联电容。
	*/

#endif


<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值