【DigiKey&NXP】NXP FRDM-K32L3A6开发板-FreeRTOS系统篇(一)

一、前言

在前面介绍了FRDM-K32L3A6开发板的硬件接口资源,以及上电点RGB灯,遇上十一国庆与中秋假期,今天来分享一下在该开发板上进行的FreeRTOS多线程任务。

二、概况

根据原本的计划,在FreeRTOS上,运行三个线程。

线程一:主要任务负责RGB灯的变化,代表设备在线运行。

线程二:串口1发送数据线程,可作为反馈PC端的串口调试工具发送过来数据后的响应结果

线程三:串口1接收数据线程,可接收来自PC端的串口调试工具发过来的数据包,后续接入蓝牙串口模块后,相当于接收来自手机端的数据包。数据解析后再实现对PWM的输出控制。

三、参考例程

前面也提到了,该开发板是双核架构,如果单独运行”cm0plus”中的例程会提示下载地址错误,程序运行不起来,因此建议采用“cm4”文件夹下的例程进行参考设计。此次借助SDK目录下的”SDK_25_06_00_FRDM-K32L3A6\boards\frdmk32l3a6\freertos_examples”例程,该原始程序比较简单,就创建了一个线程,从microUSB的串口0输出一段“Hello world.”字符就进入睡眠状态。

主程序源码如下:

/* FreeRTOS kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "timers.h"

/* Freescale includes. */
#include "fsl_device_registers.h"
#include "fsl_debug_console.h"
#include "board.h"
#include "app.h"

/*******************************************************************************
 * Definitions
 ******************************************************************************/
/* Task priorities. */
#define hello_task_PRIORITY (configMAX_PRIORITIES - 1)
/*******************************************************************************
 * Prototypes
 ******************************************************************************/
static void hello_task(void *pvParameters);

/*******************************************************************************
 * Code
 ******************************************************************************/
/*!
 * @brief Application entry point.
 */
int main(void)
{
    /* Init board hardware. */
    BOARD_InitHardware();
    if (xTaskCreate(hello_task, "Hello_task", configMINIMAL_STACK_SIZE + 100, NULL, hello_task_PRIORITY, NULL) !=
        pdPASS)
    {
        PRINTF("Task creation failed!.\r\n");
        while (1)
            ;
    }
    vTaskStartScheduler();
    for (;;)
        ;
}

/*!
 * @brief Task responsible for printing of "Hello world." message.
 */
static void hello_task(void *pvParameters)
{
    for (;;)
    {
        PRINTF("Hello world.\r\n");
        vTaskSuspend(NULL);
    }
}

将工程编译后,在Keil中勾选下载后自动重启,下载完毕后,串口0打印输出如下:

由于发帖内容对图片有限制,精彩内容请见下篇帖子。

感谢楼主详细分享 FRDM-K32L3A6 开发板的 FreeRTOS 入门实践!从硬件接口铺垫到 FreeRTOS 单线程(Hello World)验证,尤其是点出 “双核架构下单独跑 cm0plus 例程会提示下载地址错误” 的坑,对新手太实用了。

FRDM-K32L3A6 的双核(CM4 主核:120MHz,CM0 + 从核:48MHz)设计中,CM4 核支持更丰富的外设(如 PWM、高速 UART、ADC),且 NXP SDK 的 FreeRTOS 例程默认以 CM4 为核心开发

相关型号:

更多内容: