精华内容
下载资源
问答
  • S32K148的FREERTOS移植,里面是最精简的系统移植,自己可以添加别的文件
  • s32k148 评估源码

    2018-12-20 19:23:32
    NXP 的 S32K DEMO板原理图,有各种接口定义,详细描述
  • nxp的s32k148基于keil5上的工程创建样板,148是刚出新片子,网上基本没有keil的样板工程,我吃了回螃蟹,刚开始一直创建不了,后来跟nxp原厂沟通后,提供的demo后稍微修改。
  • 简单整理S32K148的Bit Rate和Sample Point的计算过程,具体可以看规格书
  • FreeRTOS S32K148

    千次阅读 2019-12-06 22:55:44
    前几节用的是ST的STM32CubeMX生成FreeRTOS工程(CMSIS-RTOS2对FreeRTOS的封装), 其实NXP的S32 Design Studio for ARM中的ProcessorExpert也集成了FreeRTOS, 而且用的是原生的FreeRTOS API, 可...

    前言

    前几节用的是ST的STM32CubeMX生成FreeRTOS工程(CMSIS-RTOS2FreeRTOS的封装), 其实NXP的S32 Design Studio for ARM中的ProcessorExpert也集成了FreeRTOS, 而且用的是原生的FreeRTOS API, 可直接参考FreeRTOS官网查看各个函数的用法, 本节就创建一个S32K148的FreeRTOS工程, 抛砖引玉. 用到的LED1--PTE21, LED2--PTE22, 均为低电平点亮.

    建立工程

    步骤:

    • File -> New -> S32DS Application Project
    • Processors 选择 S32K148, Project Name 填你自己的工程名
    • Select SDK: SDKs 选择 S32K148_SDK 3.0.0, Debugger选择J-Link, Finish.

    ProcessorExpert配置

    双击工程名, 点击Components窗口Components目录下的 pin_mux:PinSetting, GPIO中选择PTE21/PTE22, 并设置为Output:
    在这里插入图片描述
    Component Library中双击添加FreeRTOS组件:
    在这里插入图片描述
    点击FreeRTOS, 可以查看下各选项卡的内容, 这里默认不作修改:
    在这里插入图片描述
    点击生成代码:
    在这里插入图片描述

    FreeRTOS代码补全

    添加一个新的rtos.c文件:
    在这里插入图片描述
    填入以下内容:

    /* Kernel includes. */
    #include "FreeRTOS.h"
    #include "task.h"
    #include "queue.h"
    #include "timers.h"
    
    /* SDK includes. */
    #include "interrupt_manager.h"
    #include "clock_manager.h"
    #include "clockMan1.h"
    #include "pin_mux.h"
    
    #define LED1_PIN_INDEX  21U
    #define LED2_PIN_INDEX  22U
    #define LED_GPIO_PORT  PTE
    
    /* Priorities at which the tasks are created. */
    #define TASK_LED1_PRIORITY		( tskIDLE_PRIORITY + 2 )
    #define	TASK_LED2_PRIORITY		( tskIDLE_PRIORITY + 2 )
    
    /*-----------------------------------------------------------*/
    
    static void Entry_Task_LED1( void *pvParameters );
    static void Entry_Task_LED2( void *pvParameters );
    
    /*-----------------------------------------------------------*/
    
    void rtos_start( void )
    {
    	/* Configure the NVIC, LED outputs*/
        CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
                       g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
        CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
        PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
    
    	/* Start with LEDs off. */
        PINS_DRV_WritePins(LED_GPIO_PORT, (1 << LED1_PIN_INDEX) | (1 << LED2_PIN_INDEX));
    
        xTaskCreate( Entry_Task_LED1, "LED1", configMINIMAL_STACK_SIZE, NULL, TASK_LED1_PRIORITY, NULL );
        xTaskCreate( Entry_Task_LED2, "LED2", configMINIMAL_STACK_SIZE, NULL, TASK_LED2_PRIORITY, NULL );
    
        vTaskStartScheduler();
    
    	/* If all is well, the scheduler will now be running, and the following line
    	will never be reached.  If the following line does execute, then there was
    	insufficient FreeRTOS heap memory available for the idle and/or timer tasks
    	to be created.  See the memory management section on the FreeRTOS web site
    	for more details. */
    	for( ;; );
    }
    
    /*-----------------------------------------------------------*/
    
    static void Entry_Task_LED1( void *pvParameters )
    {
    	/* Casting pvParameters to void because it is unused */
    	(void)pvParameters;
    
    	for( ;; )
    	{
    		PINS_DRV_TogglePins(LED_GPIO_PORT, (1 << LED1_PIN_INDEX));
    		vTaskDelay(1000);
    	}
    }
    /*-----------------------------------------------------------*/
    
    static void Entry_Task_LED2( void *pvParameters )
    {
    	/* Casting pvParameters to void because it is unused */
    	(void)pvParameters;
    
    	for( ;; )
    	{
    		PINS_DRV_TogglePins(LED_GPIO_PORT, (1 << LED2_PIN_INDEX));
    		vTaskDelay(1000);
    	}
    }
    

    rtos_start完成系统和外设初始化, 创建两个点灯的任务, 然后开始任务调度, 这个函数需要在main.c补充以下代码才能调用:

    /* User includes (#include below this line is not maintained by Processor Expert) */
    extern void rtos_start(void);
    #define PEX_RTOS_START rtos_start
    

    如图所示:
    在这里插入图片描述
    这个很关键.

    调试运行

    可以把调试配置的OS选成FreeRTOS:
    在这里插入图片描述
    调试运行, 发现板子上的两个LED均以1s周期翻转, 符合预期.

    完整工程

    https://download.csdn.net/download/weifengdq/12016933

    微信公众号

    欢迎扫描二维码关注我的微信公众号, 及时获取最新文章:
    在这里插入图片描述

    展开全文
  • s32k144 flash 存储分区 编程,有很好的测试参考,可以参考这个MCU
  • S32K148之S32开发环境搭建

    千次阅读 2019-09-20 19:58:02
    某些原因, 要从STM32暂时转战S32K148, 目标车载CAN+以太网. 记录这个系列博客, 供以后自己参考. 用的是 S32K148EVB-Q176, 链接里面可以下载原理图等相关文档, 就是下面这个1000多的家伙(图片来自官方, 侵删): 开发...

    前言

    某些原因, 要从STM32暂时转战S32K148, 目标车载CAN+以太网. 记录这个系列博客, 供以后自己参考. 用的是 S32K148EVB-Q176, 链接里面可以下载原理图等相关文档, 就是下面这个1000多的家伙(图片来自官方, 侵删):

    在这里插入图片描述

    开发环境暂用 S32 Design Studio for ARM, 就是这货:

    在这里插入图片描述

    S32安装

    S32DS-ARM: S32 Design Studio IDE for Arm® based MCUs 下载, 这两个都要:

    在这里插入图片描述

    先装第一个, 激活码下载软件的时候网页中可以找到, 一个帐号一个码, 不行就再重新换个邮箱注册一个:

    在这里插入图片描述

    软件安装过程略, 安装完成后点击 help -> Install New Software…在这里插入图片描述
    添加上面下载的那个比较大的 S32 SDK S32K1xx 更新和补丁, 慢慢装吧, 可以去睡一觉, 第二天不耽误. 这样, 就安装好了开发环境.

    硬件连接

    如图所示, 自己找了个12V的电源怼上, 一开始只接了Micro USB, 死活调试下载不了, 还以为哪里坏了, 最后接上这个12V电源好了
    在这里插入图片描述

    例程

    徒手撸凭空想是不可能的, 这辈子都不可能的, 还是要看例程, 在S32的安装目录:

    S32DS_ARM_v2018\S32DS\S32SDK_S32K14x_RTM_2.0.0
    

    例程还是很丰富的:
    在这里插入图片描述

    我们可以先把例程下载进去看看效果, 参考一下, 比如那个 hello_world , 就是点灯, 然后自己撸就方便多了. 例程的打开姿势如下图:
    在这里插入图片描述
    在这里插入图片描述
    调试的设置:

    在这里插入图片描述

    在这里插入图片描述
    点击下图中的Resume就可以看到红绿灯交替闪烁了:
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • s32k148 bootloader配置

    千次阅读 2020-06-29 21:57:07
    s32k148有2M 程序flash,地址从0x00000000开始到0x00200000结束,其中每4kB又作为一个sector,且叫做扇区。flash编程主要涉及flash编程的初始化,扇区擦除,向flash写数据。这里我参考了这份代码,GitHub - Talendu/...

           bootloader一般分为三个部分,上位机客户端,boot程序和App程序。

          上位机客户端软件:用来将mcu的app程序文件发送给mcu,发送的通讯方式有很多种,常见的如串口,can,甚至以太网。上位机发送的文件类型有很多种格式,如bin、hex、s19等。

           boot程序:boot程序的主要功能分为三部分,第一,接收客户端软件发来的程序;第二,将接收到的程序写入到mcu的flash中,即对片内flash进行编程;第三,跳转到App程序。

           App程序:就是我们正常运转的应用程序,和普通引用的程序不同的是它是由bootloader引导才开始执行的,不是reset之后执行的默认程序。

            对于客户端软件如何将app发送给mcu,方案非常多。以个人当前程序为例,就是上位机通过串口将程序bin文件发送给mcu,每次发送128字节,直至发送完成。在这里就不过多赘述。本文将以s32k如何将app程序写入片内flash和app程序跳转为重点讲述bootloader。


           将接收到的app程序写入mcu的flash,这个涉及到难点主要是mcu内部flash编程。s32k148有2M 程序flash,地址从0x00000000开始到0x00200000结束,其中每4kB又作为一个sector,且叫做扇区。flash编程主要涉及flash编程的初始化,扇区擦除,向flash写数据。这里我参考了这份代码,GitHub - Talendu/S32K144Bootloader: S32K14x系列单片机代码。首先初始化flash编程相关的时钟,然后初始化flash,flash_pflash_init();之后就是xmodem_write_image(uint8_t *p_data, uint16_t data_size)来对flash进行擦和写操作。在xmodem_write_image中主要用到flash_pflash_erase_sectors()和flash_write_PFLASH(),flash擦和写过程中,要关闭mcu中断。擦除操作最小单位是扇区,写的操作最小单位是8个字节,且这写操作的起始地址要以8字节为单位对齐。对于xmodem_write_image(...);调用需要注意几点,__g_flash_app_addr初始的设置要与4kb地址对齐,且4kb应该是每次写入flash数据长度的整数倍,如每次写入128kb,256kb等等,但是不要出现每次写入160kb,这虽满足与8字节想对齐,但是会遇到跨扇区编程的问题,就需要重新编写xmodem_write_image()函数。

    
    void flash_clock_init(void)
    {
        //开时钟门
        PCC->PCCn[PCC_FTFC_INDEX] |= PCC_PCCn_CGC_MASK;
        // 等待命令完成
        while((FTFC->FSTAT & FTFC_FSTAT_CCIF_MASK) != FTFC_FSTAT_CCIF_MASK);
        //启用写入缓冲区及cache
        LMEM->PCCCR = 0x85000001;
    }
    int main()
    {
        ...
        flash_clock_init();
        flash_pflash_init();
        ...
    
    
       while(1)
       {
            if (get_program_data)
            {
               xmodem_write_image(...);
            }
            
       }
    }


    app程序跳转程序的跳转主要参考s32k144 bootloader - 纯洁de小学生 - 博客园。     

    如何从bootloader程序跳转到App程序,见如下代码。注意这里的APP_ADDR与上文中__g_flash_app_addr初始化地址要保持一致。注意这里经试验证实不需要加入/* 设置栈顶指针*/ MSR_MSP(APP_ADDR);添加该代码反而无法实现跳转。

    typedef void (*bootloader_fun)(void);          /*定义函数指针类型*/
    bootloader_fun jump2app;                       /*定义函数指针*/
    ..........
    /* 函数指针指向app的复位向量表的地址。注意将地址强转成函数入口地址 */
     jump2app = (bootloader_fun)*(uint32_t*)(APP_ADDR + 4);
     /*将pc指针指向入函数地址(app地址)运行*/
      jump2app();

    作为app程序,也需要作出相应调整。

    1、调整app程序的中断向量偏移地址

    int main()
    { 
        /* 此处偏移地址必须和bootloader中的一样 */
        S32_SCB->VTOR = APP_ADDR;
        /* 关闭全局中断*/
        __asm volatile ("cpsie i" : : : "memory");
    
    ....
    }

    2、修改链接脚本,不同的ide,配置不一样,这里以s32DS为例,这里是APP程序.ld文件,红框中显示的偏移地址为0x2000,默认是0x0000.

    APP程序修改完完成。

          为什么要修改app 中断偏移向量地址,不修改,App中断向量入口和bootloader将会重合,那么App程序将会调用bootloader的中断服务程序,这显然是不对的。

           至于为什么要修改链接脚本:函数的调用本质程序jump 到函数相应的入口地址而已。这个地址是什么,编译器是知道的,我们也可以通过map文件看到。同样的程序,如果链接脚本的偏移地址不一样,即使同一函数的访问地址也是不一样的。既然APP程序存储位置发生一定的偏移,就得告诉编译器偏移地址,不然编译器仍然以默认偏移地址生成函数的地址map,结果就是app 跳转到了错误的函数地址。

          最后向引用网址的两位作者表示由衷感谢。

    展开全文
  • S32K148 CAN_PAL SDK_RTM300 PE配置

    千次阅读 2019-12-11 22:57:37
    S32K148----SDK笔记----CAN收发 前面写过这个S32K flexcan组件的用法, 其实有对flexcan进一步封装的can_pal组件, 本篇就介绍下它的用法. 以CAN0(PTE4, PTE5)为例, 不用CANFD. 建立工程 打开S32 Design Studio for AR...

    前言

    S32K148----SDK笔记----CAN收发
    前面写过这个S32K flexcan组件的用法, 其实有对flexcan进一步封装的can_pal组件, 本篇就介绍下它的用法. 以CAN0(PTE4, PTE5)为例, 不用CANFD.

    建立工程

    打开S32 Design Studio for ARM, 接下来步骤:

    • File -> New -> S32DS Application Project
    • Processors 选择 S32K148, Project Name 填你自己的工程名
    • Select SDK: SDKs 选择 S32K148_SDK 3.0.0, Debugger选择J-Link, Finish.

    ProcessorExpert配置

    双击工程名, 点击Components窗口Components目录下的 pin_mux:PinSetting, CAN配置:
    在这里插入图片描述
    Component Library中双击添加一组can_pal组件(用几路CAN就添加几组):
    在这里插入图片描述
    can_pal1:can_pal组件默认配置如下:
    在这里插入图片描述
    上图中默认的位速率500kbit/s, Number of buffers可选[1, 32], 默认16, 可以设置接收16个CAN ID, 改成32可以接收32个CAN ID, 一般情况下是够用的.

    如果不够用, 可以勾选Enable Rx FIFO extension进行滤波器的片段(mask)过滤, 还不太会使, 如果想接收所有CAN ID, 这个, 暂时不太清楚怎么设置, 有了解的麻烦评论下.

    RXFIFO ID filters number 范围(8, 16, 24, …, 104, 112, 120, 128) Rx FIFO Filters, 但其实最多104, 且这个数值越大, Number of buffers的最大值越小(会变红, 鼠标悬停提示有最大值).

    RxFIFO ID filter formatFormat A, B, C, D四种选择, 解释可参考:

    /*! @brief FlexCAN Rx FIFO filters number
     * Implements : flexcan_rx_fifo_id_filter_num_t_Class
     */
    typedef enum {
        FLEXCAN_RX_FIFO_ID_FILTERS_8   = 0x0,         /*!<   8 Rx FIFO Filters. @internal gui name="8 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_16  = 0x1,         /*!<  16 Rx FIFO Filters. @internal gui name="16 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_24  = 0x2,         /*!<  24 Rx FIFO Filters. @internal gui name="24 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_32  = 0x3,         /*!<  32 Rx FIFO Filters. @internal gui name="32 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_40  = 0x4,         /*!<  40 Rx FIFO Filters. @internal gui name="40 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_48  = 0x5,         /*!<  48 Rx FIFO Filters. @internal gui name="48 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_56  = 0x6,         /*!<  56 Rx FIFO Filters. @internal gui name="56 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_64  = 0x7,         /*!<  64 Rx FIFO Filters. @internal gui name="64 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_72  = 0x8,         /*!<  72 Rx FIFO Filters. @internal gui name="72 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_80  = 0x9,         /*!<  80 Rx FIFO Filters. @internal gui name="80 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_88  = 0xA,         /*!<  88 Rx FIFO Filters. @internal gui name="88 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_96  = 0xB,         /*!<  96 Rx FIFO Filters. @internal gui name="96 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_104 = 0xC,         /*!< 104 Rx FIFO Filters. @internal gui name="104 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_112 = 0xD,         /*!< 112 Rx FIFO Filters. @internal gui name="112 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_120 = 0xE,         /*!< 120 Rx FIFO Filters. @internal gui name="120 Rx FIFO Filters" */
        FLEXCAN_RX_FIFO_ID_FILTERS_128 = 0xF          /*!< 128 Rx FIFO Filters. @internal gui name="128 Rx FIFO Filters" */
    } flexcan_rx_fifo_id_filter_num_t;
    
    /*! @brief FlexCAN Rx mask type.
     * Implements : flexcan_rx_mask_type_t_Class
     */
    typedef enum {
        FLEXCAN_RX_MASK_GLOBAL,      /*!< Rx global mask*/
        FLEXCAN_RX_MASK_INDIVIDUAL   /*!< Rx individual mask*/
    } flexcan_rx_mask_type_t;
    
    /*! @brief ID formats for Rx FIFO
     * Implements : flexcan_rx_fifo_id_element_format_t_Class
     */
    typedef enum {
        FLEXCAN_RX_FIFO_ID_FORMAT_A, /*!< One full ID (standard and extended) per ID Filter Table element.*/
        FLEXCAN_RX_FIFO_ID_FORMAT_B, /*!< Two full standard IDs or two partial 14-bit (standard and
                                          extended) IDs per ID Filter Table element.*/
        FLEXCAN_RX_FIFO_ID_FORMAT_C, /*!< Four partial 8-bit Standard IDs per ID Filter Table element.*/
        FLEXCAN_RX_FIFO_ID_FORMAT_D  /*!< All frames rejected.*/
    } flexcan_rx_fifo_id_element_format_t;
    

    由于这个还没搞懂, 先飞一会, 这里默认不勾选Enable Rx FIFO extension. S32K的CAN1, CAN2和CAN0应该是平行关系, 不太像STM32的两路CAN有主从关系, 待确认. CAN滤波器设置有兴趣的可以参考NXP论坛这篇文章, 待验证:

    S32K Can Filtering: https://community.nxp.com/thread/500761

    点击生成代码:
    在这里插入图片描述

    发送接收代码参考

    can_pal 可用(拖拽)的函数有下面这些:
    在这里插入图片描述
    由于用法和flexcan差别不算太大, 就不分开介绍了, 代码参考如下:

    /* MODULE main */
    
    /* Including necessary module. Cpu.h contains other modules needed for compiling.*/
    #include "Cpu.h"
    
    volatile int exit_code = 0;
    
    /* User includes (#include below this line is not maintained by Processor Expert) */
    #define TX_STD_MAILBOX (0UL)
    #define TX_EXT_MAILBOX (1UL)
    
    can_buff_config_t stdBuffCfg = {
        .enableFD = false,
        .enableBRS = false,
        .fdPadding = 0U,
        .idType = CAN_MSG_ID_STD,
        .isRemote = false};
    
    can_buff_config_t extBuffCfg = {
        .enableFD = false,
        .enableBRS = false,
        .fdPadding = 0U,
        .idType = CAN_MSG_ID_EXT,
        .isRemote = false};
    
    can_message_t recvMsg;
    
    // void can_send_msg(void)
    // {
    //   can_message_t message = {
    //       .cs = 0U,
    //       .id = TX_STD_MSG_ID,
    //       .data[0] = 0x01,
    //       .data[1] = 0x02,
    //       .length = 2U};
    //   CAN_Send(&can_pal1_instance, TX_STD_MAILBOX, &message);
    
    //   message.id = 0x1234567;
    //   message.length = 8;
    //   static uint8_t kk = 0;
    //   message.data[7] = kk;
    //   ++kk;
    //   CAN_Send(&can_pal1_instance, TX_EXT_MAILBOX, &message);
    // }
    
    //refer to can_callback_t
    void canRxCallback(uint32_t instance,
                       can_event_t eventType,
                       uint32_t objIdx,
                       void *driverState)
    {
      if(eventType == CAN_EVENT_RX_COMPLETE) {
        if(instance == can_pal1_instance.instIdx) {
        	if(recvMsg.id < 0x800) {	//not sure
        		CAN_Send(&can_pal1_instance, TX_STD_MAILBOX, &recvMsg);
        	} else {
        		CAN_Send(&can_pal1_instance, TX_EXT_MAILBOX, &recvMsg);
        	}
            CAN_Receive(&can_pal1_instance, objIdx, &recvMsg);
        }
      }
    }
    /*! 
      \brief The main function for the project.
      \details The startup initialization sequence is the following:
     * - startup asm routine
     * - main()
    */
    int main(void)
    {
    /* Write your local variable definition here */
    
    /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
    #ifdef PEX_RTOS_INIT
      PEX_RTOS_INIT(); /* Initialization of the selected RTOS. Macro is defined by the RTOS component. */
    #endif
      /*** End of Processor Expert internal initialization.                    ***/
    
      /* Write your code here */
      /* For example: for(;;) { } */
      CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
                     g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
      CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
      PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
    
      CAN_Init(&can_pal1_instance, &can_pal1_Config0);
    
      CAN_ConfigTxBuff(&can_pal1_instance, TX_STD_MAILBOX, &stdBuffCfg);
      CAN_ConfigTxBuff(&can_pal1_instance, TX_EXT_MAILBOX, &extBuffCfg);
    
      CAN_ConfigRxBuff(&can_pal1_instance, 2, &stdBuffCfg, 0x119);
      CAN_ConfigRxBuff(&can_pal1_instance, 3, &stdBuffCfg, 0x120);
      CAN_ConfigRxBuff(&can_pal1_instance, 4, &extBuffCfg, 0x1234567);
      CAN_ConfigRxBuff(&can_pal1_instance, 5, &extBuffCfg, 0x1234568);
    
      CAN_InstallEventCallback(&can_pal1_instance, canRxCallback, NULL);
      CAN_Receive(&can_pal1_instance, 2, &recvMsg);
      CAN_Receive(&can_pal1_instance, 3, &recvMsg);
      CAN_Receive(&can_pal1_instance, 4, &recvMsg);
      CAN_Receive(&can_pal1_instance, 5, &recvMsg);
    
    /*** Don't write any code pass this line, or it will be deleted during code generation. ***/
      /*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/
      #ifdef PEX_RTOS_START
        PEX_RTOS_START();                  /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
      #endif
      /*** End of RTOS startup code.  ***/
      /*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
      for(;;) {
        if(exit_code != 0) {
          break;
        }
      }
      return exit_code;
      /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
    } /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
    
    /* END main */
    

    代码中, 0邮箱用于标准帧发送, 1邮箱用于扩展帧发送, 2邮箱用于接收ID为0x119的CAN报文… 邮箱数不大于上面设置的Number of buffers, 默认16, 最大可手动设置32.

    接收中断中把接收到的CAN报文原封不动返还, 然后重新开始接收.

    调试验证

    连接CAN0到CAN分析仪, 记得总线上至少有120Ω终端电阻, 打开CAN上位机工具, 波特率设置为500k, 打开, 可以看到0x119, 0x120, 0x1234567, 0x1234568都可以正常回传, 0x121和0x1234569被滤掉了:
    在这里插入图片描述

    微信公众号

    欢迎扫描关注我的微信公众号, 及时获取最新文章:
    在这里插入图片描述

    展开全文
  • S32K148芯片烧写问题

    2020-06-09 09:39:42
    S32K148芯片烧写问题 使用NXP的S32K148芯片,使用SEGGER J-Flash进行擦写,擦除整个片子以后,无法再次连接,报错如下,求大神帮忙解决。
  • S32K148----SDK笔记----LwIP以太网测试

    千次阅读 2019-10-25 19:35:39
    S32K148含字母E或者J的有以太网, 如FS32K148UJ, 使用RMII接口连接PHY芯片, 官方的开发板带的PHY是TJA1101, 车载以太网, 传输使用两根线而不是标准4根线的百兆以太网, 这里我们还是用传统的方式来测试, 外接的是KSZ...
  • S32K148 SDK3.0 PE配置 PWM

    千次阅读 2019-12-03 17:23:29
    S32K1xx Series Reference Manual的pdf文档45章介绍的是FTM(FlexTimer Module), S32K148有7个FTM: 本节中用到的是FTM4, Channel2, 使用引脚PTE22, 外挂一颗无源蜂鸣器: 蜂鸣器参数: 只要给4kHz, 50%占空比, ...
  • S32K148----SDK笔记----CAN收发

    千次阅读 2019-10-24 18:50:22
    S32K148自带3路CAN, 官方的SDK给了can_pal的例程, 本文更基础一点, 直接用flexcan组件相关的函数, CANFD需要相应的电平转换芯片速率上的支持, 我暂时用不到CANFD, 就只拿来做基础的CAN通信. 先测试CAN发送, 然后测试...
  • S32K148----SDK笔记----LPUART_含printf支持

    千次阅读 2019-10-23 19:19:02
    S32K148自带3路LPUART(0/1/2), 除此之外, 还有FLEXIO中的两路(两对收发, 或者4收, 或者4发?), 从某宝淘了个最小系统板和Jlink V9, 本文就用它们做一个LPUART的笔记: 左边是Jlink V9, 支持虚拟串口(没有的话试试 J-...
  • S32K148_ProcessorExpert之定时器中断

    万次阅读 2019-09-24 21:15:52
    文章目录目标建立工程ProcessorExpert配置代码拖动和补全调试设置工程源码 目标 通过定时器每1s翻转一次 LED_GREEN(引脚PTE22) 的亮灭状态...Processors 选择 S32K148, Project Name 填你自己的工程名 Select SDK: S...
  • 最近在做一些关于S32K148开发板的使用,研读了些该开发板关于ENET模块的官方文档。 2 Ethernet MAC (ENET) 2.1 Chip-specific ENET information S32K148有一个ENET模块实例。S32K1xx系列的其他产品没有ENET...
  • S32K 原理图

    2018-12-20 19:25:49
    S32K的原理图,可以用于硬件分析,需要与原理图一起用
  • S32K148_ProcessorExpert之Blink

    千次阅读 2019-09-21 10:07:00
    文章目录流程新建工程ProcessorExpert配置拖动补全代码GPIO函数调试运行工程下载 ...先来看一下S32K148EVB板上LED的原理图: 新建工程 ProcessorExpert配置 如上图, 重命名PTE21/22/23为 LED_R...
  • S32K-RM参考手册

    2018-08-10 16:09:45
    S32K-RM是开发必备手册,芯片所有的资源都有介绍,非常详细。
  • S32K148 SDK3.0 PE配置 看门狗(WDOG)

    千次阅读 2019-12-03 15:30:36
    文章目录前言建立工程ProcessorExpert配置代码补全完整工程下载微信公众号 前言 S32K1xx Series ... 本文中用到LPUART2(PTA8, PTA9), 用的J-Link调试, S32K148_SDK 3.0.0. 建立工程 打开S32 Design Studio fo...
  • LPIT是S32K中的一种低功耗中断定时器,中断的目的是为了充分利用MCU的资源,定时器是为了实现在指定的时间节点执行任何动作。 LPIT配置 代码补全 LPIT初始化 LPIT_DRV_Init(INST_LPIT1, &lpit1_InitConfig);...
  • 看门狗框图 S32K1xx Series Reference Manual 第23章给出了看门狗的框图: 看门狗配置 Components Library 中添加 wdog 组件,配置wdog: 时钟源默认 WDOG_LPO_CLOCK (默认128kHz,可到 clock_manager 中修改为32kHz...
  • 内容包括蓝宙代理的NXP的开发板S32K144的驱动程序说明和相应的代码,包括ADC,GPIO,时钟,计时器等模块在编写驱动时必要的知识,以及对应测试工程。同时附有相应模块的说明,以及编程规范的说明。可以作为开发驱动...
  • s32k144-uart/can/flash驱动

    2018-11-26 16:46:14
    s32k144上直接对寄存器操作的驱动程序,有利于对此芯片的深刻学习及研究.并附带了freeRtos的移植.使用的keil环境,并兼容s32-ds环境上使用.
  • 最近接触NXP的S32K148 芯片,使用keil5创建工程时遇到了Error: L6218E: Undefined symbol的问题,该添加的文件都已经添加过了,按以前创建STM32工程遇到此类问题的解决方法也未成功,整了一天多,最终在...
  • DuPower_S32K148_FBL_PROF.zip

    2021-09-15 22:44:53
    uds下载
  • S32K144_LPUART_IRQ_2019.7z

    2019-11-19 11:58:43
    串口中断模式演示例程,可以依照此例程对照PE的配置。程序功能为上电发送串口指引,指引输入小写a,b,c,d其中之一,按指引输入其中一个看程序返回的输入成功或输入失败(输入的不是a,b,c,d)验证串口功能是否正常。
  • 手头的项目要使用NXP的S32K144,之前从没用过,这个芯片的技术支持不是很多,LPSPI的使用,自己分析了官方的HAL库,慢慢调试总结的配置详解,里面有代码和我用示波器检测的波形图,很清晰,一看就明白了;
  • 这个文档讲述了S32K144从KEIL上面开发的第一步,工程的移植,网上大多说的不详细,其中很多重要的细节都没说,我把过程重新整理了一下(不详细回来给差评),只要一步一步照着我的步骤做,移植肯定能成功。...
  • S32K142 KEIL 串口程序可以实现发送和接收,参照https://blog.csdn.net/weixin_41700578/article/details/84958274编写 模板程序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,183
精华内容 1,673
关键字:

s32k148

友情链接: HHO.rar