欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32下完成一个基于FreeRTOS的多任务程序

程序员文章站 2024-01-31 10:44:10
...

一、 FreeRTOS简介

FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。FreeRTOS-百度百科
FreeRTOS是一款 “开源免费”的实时操作系统,遵循的是GPLv2+的许可协议。

二、 MDK下移植FreeRTOS

2.1 资料获取

FreeRTOS的源码和相应的官方书籍均可从官网FreeRTOS获得。
本实践源码版本是v9.0.0。
百度网盘:FreeRTOSv9.0.0提取码:yv8r

2.2资料整理并导入STM32工程中

具体步骤参考FreeRTOS移植到STM32F103步骤与注意事项

PS:其中有IAR和MDK版,请在导入工程时仔细看清要求。

STM32下完成一个基于FreeRTOS的多任务程序
具体导入就是以上文件。

2.3 补充

再添加完文件之后还需要对startup_stm32f10x.hd.s进行以下更改。
STM32下完成一个基于FreeRTOS的多任务程序

参考资料freertos移植stm32 步骤分析
参考资料FreeRTOS移植到STM32上的移植过程

2.4 主要代码

任务要求:
在STM32下完成一个基于FreeRTOS的多任务程序,执行3个周期性task,具体任务不限,但建议如下:

  • task1,每间隔500ms闪烁(变化)一次LED;

  • task2,每间隔2000ms,向串口发送一次指令数据“helloworld!";

  • task3,每间隔5000ms,从AHT20采集一次温湿度数据(不考虑硬件情况,仅写出整个多任务框架模拟代码)。

  • main.c

void LedTask1(void* pvParameters)   //任务一:每间隔500ms闪烁(变化)一次LED
{
	while(1)
	{
		LED0=0;
		printf("灯亮!\r\n");
		vTaskDelay(500);
		LED0=1;
		printf("灯灭!\r\n");
		vTaskDelay(500);
	}
}
void USART_printfTask2(void* pvParameters)		//任务二:每间隔2000ms,向串口发送一次指令数据“helloworld!"
{
	while(1)
	{
		vTaskDelay(1000);
		printf("Hello Windows!\r\n");
	}
}


void AHT20Task3(void* pvParameters)			//任务三:每间隔5000ms,从AHT20采集一次温湿度数据
{
 /*     由于没有硬件,以后更新            */
}
 int main(void)
 {	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

	LED_Init();				//LED初始化
	 uart_init(115200);		//UART初始化并设置波特率115200
	//任务一:每间隔500ms闪烁(变化)一次LED 
	xTaskCreate(LedTask1,	//任务函数指针
				"LedTask1",	//任务名称
				40,			//堆栈深度(字)
				NULL,		//任务参数为空
				1,			//任务优先级
				NULL);		//任务句柄为空
	 //任务二:每间隔2000ms,向串口发送一次指令数据“helloworld!"
	 xTaskCreate(USART_printfTask2,
				"LedTask1",
				40,
				NULL,
				2,
				NULL);
	 //任务三:每间隔5000ms,从AHT20采集一次温湿度数据
/*	 xTaskCreate(AHT20Task3,
				"AHT20Task3",
				40,
				NULL,
				3, 
				NULL);*/
	vTaskStartScheduler();	//启动任务调度器(操作系统开始运行〕
		
	 
	while(1)
	{
		
	}
 }
 

STM32下完成一个基于FreeRTOS的多任务程序
编译成功之后就可以进行烧录至STM32中并进行串口调试了。

三、 实现效果

STM32下完成一个基于FreeRTOS的多任务程序
STM32下完成一个基于FreeRTOS的多任务程序
以上就是LED闪烁和串口输出“Hello Windows!”实现效果。

四、 总结

通过此次实践学习,我初识了FreeRTOS多任务系统,并基本掌握了FreeRTOS的多任务的创建和实践。此次试验中我遇到了不少问题,特别感谢我的老师和同学对我的帮助,以及网上大佬们的资料。

五、 参考资料

[1]野火官方书籍《FreeRTOS内核实现与应用开发实战》
[2]FreeRTOS移植到STM32F103步骤与注意事项
[3]freertos移植stm32 步骤分析
[4]FreeRTOS移植到STM32上的移植过程