【S32DS RTD实战】-1.4-基于S32K3创建配置FreeRTOS工程-控制GPIO点亮LED

news2024/11/24 15:07:56

目录(附DEMO,可下载,讲解过程超详细)

1 下载FREERTOS RTD

1.1 安装FREERTOS RTD

2 确认S32DS已安装的AUTOSAR RTD

3 基于S32K3创建&配置FREERTOS工程

3.1 选择SDKs

3.2 增加FreeRTOS模块

3.3 修改MCU芯片封装

3.4 配置GPIO

3.5 修改HSE CLK时钟

3.5 更新代码

4 main函数解读

5  附:FreeRTOS DEMO

结尾


【S32K3_MCAL从入门到精通】合集:

S32K3_MCAL从入门到精通icon-default.png?t=N7T8https://blog.csdn.net/qfmzhu/category_12519033.html

1 下载FREERTOS RTD

打开链接S32K汽车通用MCU | NXP 半导体,网页往下翻,找到“软件”这一栏中的S32K3 Reference Software,单击其右侧的下载。

图1-1

在弹出的网页中,选择Automotive SW - S32K3 - FreeRTOS;

图1-2

在刷新的网页中,选择SW32K3_FreeRTOS_10.5.1_3.1.0_D2304;

图1-3

在刷新的网页中,单击SW32K3_FreeRTOS_10_5_1_UOS_3_1_0_DS_updatesite_D2304.zip,下载该RTD。

图1-4

1.1 安装FREERTOS RTD

参考博文【S32K3环境搭建】-0.3-S32DS安装实时驱动RTD(Real-Time Driver)icon-default.png?t=N7T8https://blog.csdn.net/qfmzhu/article/details/134843314的第2.2章节,安装FreeRTOS RTD:SW32K3_FreeRTOS_10_5_1_UOS_3_1_0_DS_updatesite_D2304.zip。

FreeRTOS RTD(Real-Time Driver)安装后的效果:在S32DS Extensions and Updates中,你会看到安装好的FreeRTOS RTD。

图1-5

2 确认S32DS已安装的AUTOSAR RTD

S32K3 RTD AUTOSAR R21-11 Version 3.0.0

S32K3xx RTD AUTOSAR R21-11 Version 3.0.0

S32K3xx development package V3.5.8

图2-1

3 基于S32K3创建&配置FREERTOS工程

S32DSProject Explorer中,鼠标右键,在其上下文中依次选择:New -- > S32DS Project from Example

图3-1

在弹出的Create S32DS Project from Example对话框中,根据自己当前使用的MCU芯片型号进行选择,这里以FreeRTOS_Toggle_Led_Example_S32K312为例,单击Finish

图3-2

注意Description中,关于该DEMO的介绍,其中包含了一些重要信息:

  (c) Copyright 2022-2023 NXP

  NXP Confidential. This software is owned or controlled by NXP and may only be used strictly
  in accordance with the applicable license terms.  By expressly accepting
  such terms or by downloading, installing, activating and/or otherwise using
  the software, you are agreeing that you have read, and that you agree to
  comply with and are bound by, such license terms.  If you do not agree to
  be bound by the applicable license terms, then you may not retain,
  install, activate or otherwise use the software.

  This file contains sample code only. It is not part of the production code deliverables.
========================================================================

1. Example Description
    Led D79-(Motherboard) - toggled using Clock, Siul2_Dio, Siul2_Port drivers and FreeRTOS.
    1.1 The application software functionality
            The application uses 2 tasks SendTask and ReceiveTask. If ReceiveTask receives exactly Semaphore sent by SendTask, it will change led status.
            The application uses Siul2_Port_Ip_Init to initialize the pins and Clock_Ip_Init to initialize the clock sources.

2. Installation steps
    2.1 Hardware installation
        2.1.1 Supported boards
            - XS32K3X2CVB-Q172 PCB 48307 RevX1 SCH RevA (Daughter card)
            - X-S32K3XXX-MB PCB 47386 RevA SCH RevA (Motherboard)
            - S32K312EVB-Q172 50892 PCB RevA SCH RevB (EVB board)
        2.1.2 Connections
            A wire connection is required between the following:
                - pin J290.4  (PTA_1 - gpio LED blink) to pin J290.3 (Led D79)-(Motherboard).
                - PTA29 is controlling the LED_RED in S32K312EVB-Q172 EVB board - when HIGH LED is ON when LOW LED is OFF.
        2.1.3 Debugger
            The Pemicro must be connected to J32 10-pin JTAG Cortex Debug connector.
    2.2 Software installation
        2.2.1 Importing the S32 Design Studio project
            After opening S32 Design Studio, go to "File -> New -> S32DS Project From Example" and select this example. Then click on "Finish".
            The project should now be copied into your current workspace.

3. Generating, building and running the example application
    3.1 Generating the S32 configuration
        Before running the example a configuration needs to be generated. First go to Project Explorer View in S32 DS and select the current project.
        Select the "S32 Configuration Tool" menu then click on the desired configuration tool (Pins, Cocks, Peripherals etc...).
        Clicking on any one of those will generate all the components. Make the desired changes(if any) then click on the "S32 Configuration Tool->Update Code" button.
    3.2 Compiling the application
        Select the configuration to be built: RAM (Debug_RAM), or FLASH (Debug_FLASH) by left clicking on the downward arrow corresponding to the build button in eclipse.
        Wait for the build action to be completed before continuing to the next step. Check the compiler console for error messages; upon completion, the *.elf binary file
        should be created.
    3.3 Running the application on the board
        3.3.1 Running with P&E micro
            Go to Run and select Debug Configurations. There will be a debug configuration for this project:
            
            Configuration Name                  Description
            -------------------------------     -----------------------
            $(example)_Debug_FLASH_PNE          Debug the FLASH configuration using PEMicro Debugging
            $(example)_Debug_RAM_PNE            Debug the RAM configuration using PEMicro Debugging
            
            Select the desired debug configuration and click on Debug. Now the perspective will change to the Debug Perspective.
            Use the controls to control the program flow.
        3.3.2 Running with Lauterbach
            To execute the example application load the executable file to the evaluation board using the Lauterbach debugger and the debug_t32/run.cmm script.
            Open debug_t32/run.cmm file in text editor if want to change target memory please change the values of &load_to and &elf_file.
            Run this script using T32 Lauterbach debugger after making the changes.

Project Explorer中显示了S32K312的FREERTOS工程的文件结构,这里显然缺失了很多,下面我们一一配置

图3-3

3.1 选择SDKs

S32DSProject Explorer中,选中工程名称FreeRTOS_Toggle_Led_Example_S32K312,鼠标右键,在其上下文中依次选择Properties

图3-4

在弹出的Properties对话框中,选择SDKs后,选择Restore

图3-5

PlatformSDK_S32K3_2022_03_S32K312_M7对应AUTOSAR版本:S32K3 Real-Time Drivers Version 2.0.3

PlatformSDK_S32K3_S32K312_M7对应AUTOSAR版本:S32K3 RTD AUTOSAR R21-11 Version 3.0.0

加号”所在位置,表示该工程目前使用AUTOSAR RTD。这里我们默认高版本的V3.0.0,单击Apply and Close

图3-6

Project Explorer中,工程FreeRTOS_Toggle_Led_Example_S32K312,多了RTDboardgenerate文件夹。

图3-7

3.2 增加FreeRTOS模块

双击mex文件,或者单击工具栏中的Open S32 Configuration Tools

图3-8

外设中,查看OS层中,是否已经添加了FreeRTOS模块。

图3-9

3.3 修改MCU芯片封装

Pins引脚中,根据实际使用MCU封装情况,切换封装。

图3-10

图3-11

3.4 配置GPIO

在该FreeRTOS工程中,默认将PTA1和PTA29配置成了输出,详见图3-2中的Description。可根据您的PCB/开发板实际情况,在Pins引脚中,进行调整和适配。我们这里将其调整为PTB9和PTB10。

图3-12

3.5 修改HSE CLK时钟

Clocks时钟显示图中,修改HSE CLK的分频器,将其从120MHz修改为60MHz。

图3-12

3.5 更新代码

配置完成后,单击工具栏中更新代码,将配置生成代码。

图3-13

图3-14

配置完成后,在Project Explorer中,显示了FreeRTOS_Toggle_Led_Example_S32K312工程完整的结构。

图3-15

4 main函数解读

main函数中,使用xTaskCreate创建了两个Task: SendTaskReceiveTaskReceiveTask函数中间隔Siul2_Dio_Ip_TogglePins周期拉高拉低PTB9和PTB10。


/* Including necessary configuration files. */
#include "Clock_Ip.h"
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
#include "Siul2_Port_Ip.h"
#include "Siul2_Dio_Ip.h"

#define main_TASK_PRIORITY                ( tskIDLE_PRIORITY + 2 )

SemaphoreHandle_t sem_handle;
volatile BaseType_t testResult = 0x33U;

/**
* @brief        SendTask is used to give the semaphore
* @details      SendTask give the semaphore every 1 second
*/
void SendTask( void *pvParameters )
{
    (void)pvParameters;
    BaseType_t operation_status;

    for( ;; )
    {
        operation_status = xSemaphoreGive(sem_handle);
        configASSERT(operation_status == pdPASS);
        /* Not very exciting - just delay... */
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

/**
* @brief        ReceiveTask get the semaphore and toggle pins
* @details      ReceiveTask try to get the semaphore with portMAX_DELAY timeout,
*               After receiving the semaphore successfully, the led will be toggle
*               LED1_PIN <-> PTA1
*               LED2_PIN <-> PTA29
*/
void ReceiveTask( void *pvParameters )
{
    (void)pvParameters;
    BaseType_t operation_status;
    BaseType_t count = 0;

    for( ;; )
    {
        operation_status = xSemaphoreTake(sem_handle, portMAX_DELAY);
        configASSERT(operation_status == pdPASS);
        Siul2_Dio_Ip_TogglePins(LED1_PORT, (1 << LED1_PIN));
        Siul2_Dio_Ip_TogglePins(LED2_PORT, (1 << LED2_PIN));
        if(count++ > 10)
        {
            testResult = 0x5AU;
        }
    }
}

/**
* @brief        Main function of the example
* @details      Initializes the used drivers and uses 1 binary Semaphore and
*               2 tasks to toggle a LED.
*/
int main(void)
{
    /* Initialize Clock */
    Clock_Ip_StatusType Status_Init_Clock = CLOCK_IP_ERROR;
    Status_Init_Clock = Clock_Ip_Init(Clock_Ip_aClockConfig);

    if (Status_Init_Clock != CLOCK_IP_SUCCESS)
    {
        while(1); /* Error during initialization. */
    }

    /* Initialize all pins using the Port driver */
    Siul2_Port_Ip_PortStatusType Status_Init_Port = SIUL2_PORT_ERROR;
    Status_Init_Port = Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0);

    if(Status_Init_Port != SIUL2_PORT_SUCCESS)
    {
        while(1); /* Error during initialization. */
    }

    vSemaphoreCreateBinary(sem_handle);
    xTaskCreate( SendTask   , ( const char * const ) "SendTask", configMINIMAL_STACK_SIZE, (void*)0, main_TASK_PRIORITY, NULL );
    xTaskCreate( ReceiveTask, ( const char * const ) "RecTask" , configMINIMAL_STACK_SIZE, (void*)0, main_TASK_PRIORITY + 1, NULL );
    vTaskStartScheduler();

    for( ;; );

    return 0;
}

5  附:FreeRTOS DEMO

该博文,附上了配置好的FreeRTOS DEMO下载链接。

结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注CSDN博客“汽车电子助手”,做您的好助手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1327652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python如何更改代码背景图片,背景主题(黑色护眼)和各类文本颜色(python进阶必看,爱了爱了)

一、在 PyCharm 中设置图片背景的方法如下&#xff1a; 打开 PyCharm 的设置窗口&#xff0c;在设置窗口中找到 "Appearance & Behavior" -> "Appearance" 选项卡。在 "Appearance" 选项卡中&#xff0c;找到 "Background Image&qu…

HarmonyOs4.0基础

目录 一、HarmonyOs系统定义 1.1系统的技术特性(三大特征) 1.1.1、硬件互助、资源共享 1.1.2、一次开发、多端部署(面向开发者) 1.1.3、统一OS&#xff0c;弹性部署(支持多种API&#xff1a;ArkTs、JS、C/C、Java) 1.2、系统的技术架构 二、Harmony OS项目搭建 2.1、(D…

同步与互斥(二)

一、谁上锁就由谁解锁&#xff1f; 互斥量、互斥锁&#xff0c;本来的概念确实是&#xff1a;谁上锁就得由谁解锁。 但是FreeRTOS并没有实现这点&#xff0c;只是要求程序员按照这样的惯例写代码。 main函数创建了2个任务&#xff1a; 任务1&#xff1…

文件:文本文件和二进制文件 详解

目录 0 引言1 文本文件1.1 是如何存储的&#xff1f;1.2 文件拓展名 2 二进制文件2.1 是如何存储的&#xff1f;2.2 分类2.2.1 图像文件2.2.2 音频文件2.2.3 视频文件2.2.4 可执行文件 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;C专栏&#x…

GD32F4中断向量查询

中断向量表 中断向量对应函数 __Vectors DCD __initial_sp ; Top of StackDCD Reset_Handler ; Reset HandlerDCD NMI_Handler ; NMI HandlerDCD HardFault_Handler ;…

行为型设计模式(三)状态模式 备忘录模式

状态模式 State 1、什么是状态模式 状态模式允许一个对象在其内部状态改变时改变它的行为&#xff0c;对象看起来似乎修改了它的类&#xff0c;将对象的行为包装在不同的状态类中&#xff0c;对象在运行时根据内部状态的改变而改变它的行为。 2、为什么使用状态模式 封装了…

【数字图像处理】实验四 图像分割

一、实验内容&#xff1a; 1&#xff0e; 熟悉和掌握利用Matlab工具进行数字图像的读、写、显示等数字图像处理基本步骤。 2&#xff0e; 熟练掌握各种图像分割的基本原理及方法。 3&#xff0e; 能够从深刻理解图像分割&#xff0c;并能够思考拓展到一定的应用领域。 二、实验…

雷军1992年发表的计算机论文,强啊!

提起雷军&#xff0c;相信大家都非常熟悉了&#xff0c;90年代初毕业于武大计算机系&#xff0c;后来一路创业&#xff0c;现如今在相应领域的成就也有目共睹。 之前咱们这里也分享过雷军早年间写的文字博客&#xff0c;他曾在早期博客中讲述了自己的编程之路&#xff0c;以及当…

机器学习 | 概率图模型

见微知著&#xff0c;睹始知终。 见到细微的苗头就能预知事物的发展方向&#xff0c;能透过微小的现象看到事物的本质&#xff0c;推断结论或者结果。 概率模型为机器学习打开了一扇新的大门&#xff0c;将学习的任务转变为计算变量的概率分布。 实际情况中&#xff0c;各个变量…

一个简单的 HTTP 请求和响应服务——httpbin

拉取镜像 docker pull kennethreitz/httpbin:latest 查看本地是否存在存在镜像 docker images | grep kennethreitz/httpbin:latest 创建 deployment&#xff0c;指定镜像 apiVersion: apps/v1 kind: Deployment metadata:labels:app: httpbinname: mm-httpbinnamespace: mm-…

FPC柔性排线用什么胶水能固定到线路板上?

为了固定FPC柔性排线到线路板上&#xff0c;可以使用特殊用于电子组装的胶水。常用的胶水类型有&#xff1a; 1.氰基丙烯酸酯胶水&#xff08;Cyanoacrylate&#xff09; 被称为“超级胶水”或“快干胶水”。这种胶水对FPC通常有很好的附着力。 2.环氧树脂胶水 环氧树脂胶水…

C++之深拷贝和浅拷贝

目录 浅拷贝 深拷贝 赋值运算符重载的深拷贝 在学习C类和对象时我们学习了浅拷贝&#xff0c;本期我们将再次回顾浅拷贝并为大家讲述深拷贝的概念。 浅拷贝 在学习类和对象时我们学习了拷贝构造函数的概念&#xff0c;而且我们也知道&#xff0c;因为拷贝构造函数属于类的默…

02|用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统

02&#xff5c;用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统 项目及实现框架 我们先来整体了解一下这个项目。 项目名称&#xff1a;“易速鲜花”内部员工知识库问答系统。 项目介绍&#xff1a;“易速鲜花”作为一个大型在线鲜花销售平台&#xff0c;有自…

SpringCloudGateway网关处拦截并修改请求

SpringCloudGateway网关处拦截并修改请求 需求背景 老系统没有引入Token的概念&#xff0c;之前的租户Id拼接在请求上&#xff0c;有的是以Get&#xff0c;Param传参形式&#xff1b;有的是以Post&#xff0c;Body传参的。需要在网关层拦截请求并进行请求修改后转发到对应服务。…

软件工程快速复习(期末急救)

每个同学要假想自己是一个项目经理&#xff0c;去完成一个软件项目&#xff0c;比如医院管理系统&#xff0c;自动设备控制系统等&#xff0c;以面向结构的软件工程方法&#xff0c;说出完成项目的步骤&#xff0c;涉及到的具体技术。初步了解面向对象的方法的与面向结构的方法…

Linux网络编程——字节序

一、概念 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。 二、分类 字节序有两者常见序&#xff1a; 1. Big-Endian&#xff08;大端&#xff09;&#xff1a;高位字节排放在内存的低地址端&#xff0c;低位字节排放在内存的高地址端。如&#x…

量化交易学习笔记:XGBoost 在量化选股中的应用

一、引言 本篇文章通过借鉴传统机器学习算法——XGBoost——对相同的量价因子进行实验&#xff0c;方便与深度学习模型进行对比实践。 二、算法介绍 XGBoost 是在 Gradient Boosting&#xff08;梯度提升&#xff09;框架下实现的机器学习算法&#xff0c;全称为“极限梯度提…

图神经网络并在 TensorFlow 中实现

asokraju.medium.com 一、说明 本文将引导您了解图神经网络 (GNN) 并使用 TensorFlow 实现该网络。在后续的 文章中&#xff0c;我们讨论 GNN 的不同变体及其实现。这是一个分步计划&#xff1a; 图神经网络 (GNN) 的使用&#xff1a;我们首先讨论 GNN 是什么、它们如何工作以及…

论文阅读<MULTISCALE DOMAIN ADAPTIVE YOLO FOR CROSS-DOMAIN OBJECT DETECTION>

论文链接&#xff1a;https://arxiv.org/pdf/2106.01483v2.pdfhttps://arxiv.org/pdf/2106.01483v2.pdf 代码链接&#xff1a;GitHub - Mazin-Hnewa/MS-DAYOLO: Multiscale Domain Adaptive YOLO for Cross-Domain Object DetectionMultiscale Domain Adaptive YOLO for Cross…

[JS设计模式]Command Pattern

文章目录 举例说明优点缺点完整代码 With the Command Pattern, we can decouple objects that execute a certain task from the object that calls the method. 使用命令模式&#xff0c;我们可以将执行特定任务的对象与调用该方法的对象解耦。 怎么理解 执行特定任务的对…