从0到1学习FreeRTOS:FreeRTOS + 基础外设 :(二)利用按键挂起、解挂任务
特别说明:
本文主要讲解FreeRTOS和外设的合并。
想要学习FreeRTOS请移步至从0到1攻破FreeRTOS:汇总帖选择相关内容进行观看即可。
想要学习关于GPIO和按键检测请移步至再造STM32:汇总贴选择相关内容进行观看即可。
目录
1、挂起任务:vTaskSuspend(Test_Task_Handle);
2、恢复任务:vTaskResume(Test_Task_Handle);
一、知识点
1、GPIO GPIO的讲解
2、按键检测 再造STM32---第十部分:GPIO输入—按键检测
3、挂起任务、恢复任务 从0到1学习FreeRTOS:FreeRTOS 内核应用开发:(六)任务管理
二、KEY部分的配置
关于KEY配置部分不过多讲解,如果想了解,请移步:
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
<