文章目录
- 实验任务要求
- 一、FreeRTOS移植
- 二、多任务程序实现
实验任务要求
学习FreeRTOS原理,在STM32下完成一个基于FreeRTOS的多任务程序,执行3个周期性task,具体任务不限,但建议如下:task1,每间隔500ms闪烁(变化)一次LED;task2,每间隔2000ms,向串口发送一次指令数据“helloworld!";task3,每间隔5000ms,从AHT20采集一次温湿度数据(不考虑硬件情况,仅写出整个多任务框架模拟代码)。
一、FreeRTOS移植
FreeROTS
FreeRTOS是一款开源免费的嵌入式实时操作系统,越累越多的开源组织、初创公司使用FreeRTOS来设计开发产品.FreeRTOS的移植比较简单,只需要添加需要的源码文件,不需要做任何的底层工作,再添加三个宏定义即可。
本人使用的是野火STM32指南者开发板,移植的freerots模板工程采用野火官方提供的资料
(1)首先在野火官方提供的光盘里下载“基于STM32F103_指南者_开发板”压缩文件包,解压如下
(2)打开“14-3,SRAM动态创建多任务”文件夹

(3)打开“project”文件夹
(4)打开“RVMDK(uv5)”文件夹
(5)最后点击打开keil工程文件

此时我们可以看到,FreeROTS已经成功完成移植,我们只需要修改main.c即可。
二、多任务程序实现
(1)创建多任务程序
在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); //延时500msLED1_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);//中断优先级设置为组4LED_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){ }}
/********************************END OF FILE****************************/
(2)编译 运行
(3)下载 烧录
我采用的是J Link线来连接电脑和开发板,首先要先下载J Link的驱动
串口调试时,在调试助手上要确认端口已经连接上了
最后点击下载

最后结果展示如下:
task1 LED灯闪烁

task2 利用串口调试助手显示发送“helloworld”

task3 AHT 采集温湿度数据
现在没有硬件 无法实现