当前位置: 首页 > news >正文

做网站和做app做那种事免费网站

做网站和做app,做那种事免费网站,怎么在网上做推广,重庆seo博客推广STM32f103C8T6 FreeRTOS - 按键实现任务挂起和恢复,按键按下时,LED任务执行,led闪烁,当led任务挂起,Led停止闪烁。1.STM32CubeMX 创建任务1.1配置GPIO按键配置外部中断触发GPIO绿灯,红灯配置输出模式1.2配置…

STM32f103C8T6 FreeRTOS - 按键实现任务挂起和恢复,按键按下时,LED任务执行,led闪烁,当led任务挂起,Led停止闪烁。

1.STM32CubeMX 创建任务

1.1配置GPIO

按键配置外部中断触发

GPIO绿灯,红灯配置输出模式

1.2配置FreeRTOS

创建按键与LED任务,按键优先级正常,LED优先级稍微低。

2.Keil编写

2.1 外部中断回调

在配置文件中stm32f1xx_hal_gpio.c 中,调用HAL_GPIO_EXTI_Callback

/*** @brief  EXTI line detection callbacks.* @param  GPIO_Pin: Specifies the pins connected EXTI line* @retval None*/
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{/* Prevent unused argument(s) compilation warning */UNUSED(GPIO_Pin);/* NOTE: This function Should not be modified, when the callback is needed,the HAL_GPIO_EXTI_Callback could be implemented in the user file*/
}

2.2 gpio.c按键实现Led颜色切换

//按键检测回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(Key1_Pin == GPIO_Pin)                                                //判断按下的GPIO{if ( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_RESET)             //按下按键,导通{HAL_Delay(10);                                                   //软件去抖动  if( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_RESET){HAL_GPIO_WritePin(GPIOB,Led_Red_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB,Led_Green_Pin,GPIO_PIN_SET);}}else{if( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_SET)        // 高电平,未准备好   {   HAL_Delay(10);                                            //软件去抖动  if( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_SET){                HAL_GPIO_WritePin(GPIOB,Led_Red_Pin,GPIO_PIN_SET);      //关闭红灯HAL_GPIO_WritePin(GPIOB,Led_Green_Pin,GPIO_PIN_RESET);  //开启绿灯}}}}
}

3.实现任务挂起与恢复

3.1任务挂起和恢复函数

3.1.1 函数vTaskSuspend()

此函数用于将某个任务设置为挂起状态,进入挂起态的任务永远不会进入运行态。退出挂起态的唯一方法就是调用任务恢复函数vTaskResume()或xTaskResumeFromISR(),函数申明如下:

void vTaskSuspend( TaskHandle_t  xTaskToSuspend)
入口参数:
xTaskToSuspend: 要挂起的任务的任务句柄。可通过函数xTaskGetHandle()来根据任务名字获取某个任务的任务句柄。如果参数为NULL表示挂起任务自己。
返回值:无

3.1.2 函数vTaskResume()

将一个任务从挂起态恢复到就绪态,只有通过函数vTaskSuspend()设置为挂起态的任务才可以用vTaskResume()恢复,函数申明如下:

void vTaskResume(TaskHandle_t xTaskToResume)
入口参数:
xTaskToResume: 要恢复的任务的任务句柄
返回值:无

3.2实现函数

  • gpio.h中建立标志位

/*定义一个枚举,建立三个状态*/
typedef enum{Key_up,Key_down,Key_reset,
}teKeyStatus;
  • gpio.c

//按键检测回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(Key1_Pin == GPIO_Pin)                                                //判断按下的GPIO{if ( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_RESET)             //按下按键,导通{HAL_Delay(10);                                                   //软件去抖动  if( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_RESET){/*建立标志位*/keyStatus = Key_down;}}else{if( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_SET)       // 高电平,未准备好      {   HAL_Delay(10);                                          //软件去抖动  if( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_SET){                /*建立标志位*/keyStatus = Key_up;}}}}
}
  • freertos.c外部声明

extern teKeyStatus keyStatus;    //外部申明 
  • 编写Task

/* USER CODE BEGIN Header_Key_Task */
/*** @brief  Function implementing the KeyTask thread.* @param  argument: Not used* @retval None*/
/* USER CODE END Header_Key_Task */
void Key_Task(void const * argument)
{/* USER CODE BEGIN Key_Task */keyStatus = Key_reset;/* Infinite loop */for(;;){if(keyStatus == Key_up){/*挂起LED任务*/vTaskSuspend(LedTaskHandle);keyStatus = Key_reset;}if(keyStatus == Key_down){/*恢复LED任务*/vTaskResume(LedTaskHandle);keyStatus = Key_reset;        }/* 扫描周期10ms */osDelay(10);}/* USER CODE END Key_Task */
}
/* USER CODE BEGIN Header_Led_Task */
/**
* @brief Function implementing the LedTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_Led_Task */
void Led_Task(void const * argument)
{/* USER CODE BEGIN Led_Task *//* Infinite loop */for(;;){HAL_GPIO_WritePin(GPIOB,Led_Red_Pin,GPIO_PIN_RESET);        HAL_GPIO_WritePin(GPIOB,Led_Green_Pin,GPIO_PIN_SET); osDelay(500);HAL_GPIO_WritePin(GPIOB,Led_Red_Pin,GPIO_PIN_SET);        HAL_GPIO_WritePin(GPIOB,Led_Green_Pin,GPIO_PIN_RESET);  osDelay(500);      }/* USER CODE END Led_Task */
}
http://www.yayakq.cn/news/178929/

相关文章:

  • 红叶网站建设方案网站制作需求分析
  • 网站备案几年备案一次网站建设排名公司
  • 网站域名如何查询农业门户网站模板
  • 智能模板网站建设价格摄影网站设计说明书
  • 网站建设的缺陷专业网站设计多少钱
  • 建设项目招标网站有没有做任务一样的网站兼职
  • 地方网站类型seo数据分析哪些方面
  • 网站如何从行为数据进行优化html5开发工程师是做什么的
  • 茶叶网站源码常见的网络推广方法
  • 网页制作教程网站wordpress编辑器添加自定义按钮
  • 国外网站怎么做引流吴忠公司做网站
  • 班级网站开发环境一个类引用另一个类的方法
  • 做电脑回收什么网站好旅游网站建设实训报告
  • 网站规划设计报告展览馆网站建设方案书
  • 安徽省建设干部网站梦里做他千百度网站
  • 建设俄语网站wordpress 菜单 移动端
  • 常熟seo关键词优化公司seo金融术语
  • 网站设置在设备之间共享怎么开启电子商务网站的建设 论文
  • 网站建设论文答辩自述四川省城乡建设信息网站证件查询
  • 东莞海边网站建设工作室建立一个购物网站
  • 网站规划的解释分类目录采用的是什么编目
  • 利用jsp做网站phpcms v9 实现网站搜索
  • 鄂尔多斯网站制作 建设网站建设捌金手指花总四
  • 企业为什么要建网站凡客设计
  • 怎么查看一个网站是谁做的wordpress插件免费吗
  • 网站安全等级评审在哪里做织梦添加网站名称添加新变量
  • 苏州专业网站建设公司公司网站上线
  • 这么做网站家居企业网站建设教程
  • 建造电商网站如何在手机上做广告
  • 优化门户网站建设西安搜建站科技网站