本帖最后由 湛只为无双 于 2016-4-9 11:09 编辑
想着用F446ZET6进行设计,第一步就想到了先把FreeRTOS给移植了,然后昨天花费了点时间,从以前的工程里面把文件拷贝过来,重新添加到刚开始建立的模板工程里。通过建立三个LED闪烁任务,还有一个串口发送任务,来进行任务的调度显示。
第一步还是先把工程文件打包上来:
STM32F446_FreeRTOS.zip
(841.5 KB)
在工程里面整体的架构很简单,主要就是启动文件,内核文件,官方的库文件,用户自己的文件以及FreeRTOS移植的文件。
关于底层驱动的问题在用户文件里面已经写好了,三个LED等,串口3的数据发送,剩下的最主要就是main.c了,完成主要函数的调用和编写。
#include "main.h"
#include "FreeRTOS.h"
#include "task.h"
void vREDTask( void *pvParameters );
void vGRETask( void *pvParameters );
void vBLUETask( void *pvParameters );
void vUARTTask( void *pvParameters );
int main(void)
{
LED_Init();
USART3_Init();
xTaskCreate( vREDTask, ( signed portCHAR * ) "RED", 512, NULL, tskIDLE_PRIORITY+8, NULL );
xTaskCreate( vGRETask, ( signed portCHAR * ) "GRE", 512, NULL, tskIDLE_PRIORITY+9, NULL );
xTaskCreate( vBLUETask,( signed portCHAR * ) "BLUE",512, NULL, tskIDLE_PRIORITY+10, NULL );
xTaskCreate( vUARTTask,( signed portCHAR * ) "UART",512, NULL, tskIDLE_PRIORITY+11, NULL );
vTaskStartScheduler();
while(1);
}
void vREDTask( void *pvParameters )
{
while(1)
{
LED_RED^=1;
vTaskDelay(100);
}
}
void vGRETask( void *pvParameters )
{
while(1)
{
LED_GRE^=1;
vTaskDelay(200);
}
}
void vBLUETask( void *pvParameters )
{
while(1)
{
LED_BLUE^=1;
vTaskDelay(400);
}
}
void vUARTTask( void *pvParameters )
{
while(1)
{
vTaskDelay(500);
u3_printf("21ic 串口任务测试\r\n");
}
}
在主函数里面建立的是三个LED闪烁任务和串口发送任务,三个闪烁任务的名字也分别对应了LED灯的颜色——RED、GRE、BLUE。
在建立的LED灯任务里面,具体操作涉及了不同的闪烁频率,分别是100ms、200ms、400ms的翻转间隔。
而串口任务里面,就是发送固定的字符串到电脑上,通过开发板自带的串口调试功能就可以完成数据的接收和发送。
最后就是结果的显示:
还有三个LED灯的闪烁:
完成这一步的工作以后,剩下的就是建立不同的任务实现不同的功能了,也完成了系统设计的第一步。
最近在思考一个关于这个板子的设计方案,后面也会逐步完成相关的分享内容,敬请期待。。。。
|