FreeRTOS入门——基于FreeRTOS的多任务程序与AHT20数据采集原理电路

FreeRTOS入门——基于FreeRTOS的多任务程序与AHT20数据采集原理电路

一、AHT20数据采集原理电路绘制

在stm32最小系统电路原理中添加 AHT20数据采集原理电路
在这里插入图片描述

引脚图
在这里插入图片描述

  1. 绘制元器件
    创建一个原理图库
    点击图片中箭头所指的选项,可以添加一个原理图库到所选的工程中去
    在这里插入图片描述
    创建新器件
    点击图片上箭头指向的按钮均可添加器件
    在这里插入图片描述
    绘制元器件
    放置器件底板
    在屏幕白板上点击”右键“,选中”放置“中的”矩形“,即可放置一个底板
    在这里插入图片描述
    放置引脚
    点击图上工具栏中的管脚工具或点击右键选中“放置”里面的管脚选项即可放置引脚
    在这里插入图片描述
    使用Symbol Wizard辅助绘制元器件
    在这里插入图片描述
  2. 添加原理图库
    在参照上一个步骤绘制好所有需要的元器件后,我们就可以开始将我们的原理图库添加进库里备用
    点击“库”窗口中的“Libraries”,在弹出的窗口中点击“安装”,选择“从文件中安装”
    在这里插入图片描述
  3. 绘制采集电路
    应用电路如下
    在这里插入图片描述
    在库中选中需要的元器件,双击并将它放置在原理图上
    在这里插入图片描述
    最后电路如下
    在这里插入图片描述

二、FreeRTOS的多任务程序设计

创建多任务程序
在main.c编写程序,实现执行三个周期性任务的功能
具体程序如下:

/* FreeRTOS头文件 */
#include "FreeRTOS.h"
#include "task.h"
/*stm32头文件 */
#include "bsp_led.h"
#include "bsp_usart.h"
#include "stm32f10x.h"


void Task1_led()//任务一
{
	while(1)
	{
		LED1_ON;
		vTaskDelay(500);	 //延时500ms
		LED1_OFF;
		vTaskDelay(500);	//延时500ms
	}
}

void Task2_uart()//任务二
{
	while(1)
	{
		Usart_SendString( DEBUG_USARTx,"HelloWorld\n");
		vTaskDelay(2000);	//延时2000ms
	}
}
void Task3_AHT()//任务三
{
//没有硬件,无法实现
}

 int main(void)
 {	
	 
	 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//中断优先级设置为组4
	  
	 LED_GPIO_Config();		  	//LED初始化
	 USART_Config();            //串口初始化
	 xTaskCreate(Task1_led,"TASK1_led",40,NULL,1,NULL);
	 xTaskCreate(Task2_uart,"TASK2_uart",40,NULL,2,NULL);
	 xTaskCreate(Task3_AHT,"TASK3_AHT",40,NULL,3,NULL);
	 vTaskStartScheduler();//启动任务调度器,系统运行
	 
  while(1){}
 }

最终结果
在这里插入图片描述

三、参考资料

实战篇 | 基于freeRTOS的多任务事件传输demo(附代码)

### FreeRTOS 练习题学习资料 #### 一、FreeRTOS练习题目设计 为了更好地掌握FreeRTOS的操作和应用,可以尝试完成以下几个练习: 1. **任务调度基础** 构建一个多任务环境,在该环境中创建三个不同优先级的任务。这些任务分别执行如下操作:第一个任务每隔500毫秒切换一次LED状态;第二个任务每两秒钟通过串口发送字符串“HelloWorld!”;第三个任务则负责读取传感器AHT20的数据并显示温度湿度信息,周期为五秒[^3]。 2. **事件标志位的应用** 使用FreeRTOS的事件组功能实现多个任务间的同步机制。例如设置一个场景,其中有一个按钮输入处理程序作为其中一个任务,其他几个任务等待特定条件触发(比如某个时间点到达或者接收到外部信号),一旦满足条件,则由按钮按下产生的中断服务例程通知所有监听此事件的任务继续运行[^1]。 3. **定时器中断实验** 编写一段代码来测试系统的响应速度以及稳定性。具体做法是在一定频率下产生计时器溢出中断,并在此期间记录实际发生的时间戳差值,以此评估内核性能表现如何。此外还可以加入一些额外逻辑用于验证是否能在预期时间内完成指定动作,如关闭/打开外设电源等[^4]。 #### 二、推荐的学习资源链接 对于希望深入理解FreeRTOS的同学来说,除了官方手册之外还有很多优质的在线教程可供参考: - 官方网站提供了详尽的产品介绍和技术文档,涵盖了从安装配置到高级特性的方方面面。 - YouTube上存在大量关于嵌入式编程教学视频系列,其中包括专门针对FreeRTOS入门指南的部分章节讲解。 - GitHub平台上开源项目众多,特别是那些基于STM32或其他MCU平台开发的作品往往包含了丰富的实例源码供爱好者们下载研究。 - 论坛社区也是不可或缺的一部分,像Stack Overflow这样的问答站点聚集了许多经验丰富的开发者愿意分享自己的见解解答疑惑。 ```c // 示例代码片段展示如何定义任务句柄变量 static TaskHandle_t AppTaskCreate_Handle = NULL; static TaskHandle_t LED1_Task_Handle = NULL; // task1, toggle LED every 500ms static TaskHandle_t hello_Task_Handle = NULL; // task2, send "helloworld!" via UART each 2s static TaskHandle_t AHT_Task_Handle = NULL; // task3, read temperature and humidity from sensor AHT20 periodically (every 5 seconds) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值