MPC574x平台学习——CAN通信

2023-05-16

前言

MPC574x是恩智浦公司出的一个系列的芯片,本人所接触的主要是MPC5742,最近在调试MPC5742的CAN通信,使用S32自带的SDK生成CAN驱动。通过网络的教程去完成,但是跟着教程走,不能跑通CAN的收发,下面就结合自己的学习过程,尽可能详细的将步骤复现出来,如有不对之处,还请指出。

创建项目

这里不做过多的解释,直接上图。
1.选择新建S32DS Application Project
2.选择芯片(我选择的是MPC5742)
3.选择SDK
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样我们就创建好我们的新项目了。

配置CAN

1.在状态栏中选择Processor Expert=》show views,打开配置界面
在这里插入图片描述
2.选择flexcan,双击或者右键选择Add to project
在这里插入图片描述
3.添加完成
在这里插入图片描述
4.配置CAN引脚,这里取决于实际的情况(根据芯片原理图选择)
在这里插入图片描述
5.打开StandBy(这个也取决于芯片原理图),将SIUL2/gpio/42勾选out。
在这里插入图片描述

6.配置时钟
在这里插入图片描述
在这里插入图片描述
7.CAN配置
在这里插入图片描述
8.生成代码
在这里插入图片描述
9.生成代码后都是驱动代码,需要自己去把驱动封装

封装源码

1.CAN初始化

void FlexCAN_Inital(void)
{
	uint32_t mailbox = 8;
	flexcan_id_table_t filterTable[8];
	status_t status = 0;
	status = FLEXCAN_DRV_Init(INST_CANCOM1,&canCom1_State,&canCom1_InitConfig0);

	flexcan_data_info_t dataInfo =
	{
			.data_length = 8U,
			.msg_id_type = FLEXCAN_MSG_ID_STD
	};

	FLEXCAN_DRV_ConfigRxFifo(INST_CANCOM1,FLEXCAN_RX_FIFO_ID_FORMAT_A,filterTable);

	FLEXCAN_DRV_SetRxFifoGlobalMask(INST_CANCOM1,FLEXCAN_RX_FIFO_ID_FORMAT_A,0);
}

2.发送

void FlexCAN_SendData(uint8_t *data,uint32_t len)
{
	uint32_t mailbox = 9;
	flexcan_data_info_t dataInfo =
	{
			.data_length = len,
			.msg_id_type = FLEXCAN_MSG_ID_STD
	};

	FLEXCAN_DRV_ConfigTxMb(INST_CANCOM1,mailbox,&dataInfo,SendID);
	FLEXCAN_DRV_Send(INST_CANCOM1,mailbox,&dataInfo,SendID,data);
}

3.接收

uint8_t FlexCAN_ReceiveData(uint8_t *data)
{
	flexcan_msgbuff_t recvBuff;
	volatile status_t Receive_status;
	Receive_status = FLEXCAN_DRV_RxFifo(INST_CANCOM1,&recvBuff);
	if(FLEXCAN_DRV_GetTransferStatus(INST_CANCOM1,0) == STATUS_BUSY)
	{
		if(recvBuff.msgId == ReceiveID)
		{
			uint8_t i;
			for(i = 0; i<recvBuff.dataLen;i++)
			{
				data[i] = recvBuff.data[i];
			}
			return recvBuff.dataLen;
		}
	}
	return 0;
}

4.main函数

#include "Cpu.h"
#include "FlexCAN.h"

volatile int exit_code = 0;
void ReceiveData(void)
{
	uint8_t data[8] = {0};
	uint8_t dataLen = 8;
	dataLen = FlexCAN_ReceiveData(data);
	if(dataLen != 0)
	{
		PINS_DRV_TogglePins(PTD,1<<1);
		data[0] += 1;
		FlexCAN_SendData(data,dataLen);
	}
}
uint32_t count = 0;
int main(void)
{
  /* Write your local variable definition here */
    uint8_t data[8] = {0};
    uint8_t dataLen = 8;
  /*** 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_POLICY_AGREEMENT);
    CLOCK_SYS_UpdateConfiguration(0U,CLOCK_MANAGER_POLICY_AGREEMENT);
    CLOCK_DRV_Init(g_clockManConfigsArr[0]);
    PINS_DRV_Init(NUM_OF_CONFIGURED_PINS,g_pin_mux_InitConfigArr);
    FlexCAN_Inital();

    while(1)
    {
    	count++;
    	if(count > 800000){
    		ReceiveData();
//    		dataLen = FlexCAN_ReceiveData(data);
//    		if(dataLen != 0)
//    		{
//    			PINS_DRV_TogglePins(PTD,1<<1);
//    			data[0] += 1;
//    			FlexCAN_SendData(data,dataLen);
//    		}
    		count = 0;
    	}


    }

  /*** 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!!! ***/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MPC574x平台学习——CAN通信 的相关文章

  • STM32基础(10)串口重定向

    原理 C 语言中 printf 函数默认输出设备是显示器 xff0c 如果要实现在串口或者 LCD 上显示 xff0c 必须重定义标准库函数里调用的与输出设备相关的函数 重定向 xff1a 重写库函数 xff0c 对原函数进行覆盖 xff0
  • pcl_conversions

    CMake Error at opt ros melodic share catkin cmake catkinConfig cmake 83 find package Could not find a package configurat
  • 在 Ubuntu 上安装 Bazel

    在 Ubuntu 上安装 Bazel 链接 https github com bazelbuild bazel 本页面介绍了在 Ubuntu 上安装 Bazel 的选项 此外 xff0c 它还提供指向 Bazel 完成脚本和二进制安装程序的
  • slam算法有哪些

    1 基于激光雷达的SLAM算法 xff1a Hector SLAM Gmapping Cartographer Karto SLAM Horn SLAM等 xff1b 激光雷达传感器作为主要感知设备来进行SLAM Hector SLAM是一
  • ubuntu(15):对‘casadi::MX::MX(casadi::MX const&)’未定义的引用

    catkin build 编译报错 xff0c 找不到CASADI的头文件目录CASADI INCLUDE DIRS或者库文件也达不到CASADI LIBRARIES xff1b 对 casadi MX horzsplit casadi M
  • Cmake修改FetchContent_Declare为本地代码构建

    在构建代码时 xff0c 某些项目可能需要额外下载第三方库 然而 xff0c 由于网络不稳定 xff0c 克隆过程可能会出现问题 在这种情况下 xff0c 您需要手动修改项目配置 xff0c 将其指向已经下载到本地的库文件 Fetch do
  • OTA开源代码

    有许多开源项目可用于实现 OTA xff08 Over The Air xff09 更新 以下是一些流行的开源 OTA 更新项目 xff0c 您可以根据自己的需求和设备类型选择合适的项目 xff1a Mender xff08 适用于嵌入式
  • 摄像头接口标准

    UVC xff08 USB Video Class xff09 xff1a UVC是一种通用的USB摄像头接口标准 xff0c 使得摄像头设备能够与各种操作系统兼容 xff0c 实现即插即用的功能 CSI xff08 Camera Seri
  • win10安装Anaconda、cuda9.0、cudnn、tensorflow-gpu=1.12.0详细步骤

    最近刚想起写自己的博客 xff0c 每天遇到了问题都会阅览博客 xff0c 也想把自己遇到了的一些问题写成文章给博友们参考 xff0c 所以我想从最基础的配置环境开始写起 xff0c 如看到问题也请多多指教 准备工作 Anaconda下载地
  • 【SpringSecurity教程】认证 1.Basic认证

    前言 Basic 认证是在请求接口之前要输入账号密码 xff0c 是简单的Http验证模式 本章主要描述 xff1a SpringBoot如何整合Basic认证 后端Okhttp和前端Vue Axios如何请求Basic认证的接口 Spri
  • 【SpringSecurity教程】认证 2.Digest摘要认证

    前言 Digest xff08 摘要 xff09 认证是在请求接口之前要输入账号密码 xff0c 是在Basic认证传输账号密码的基础上加密 SpringBoot整合Digest pom xml span class token tag s
  • VIM3刷系统

    一 升级到最新系统 如果你的板子上已经运行的是官方发布的Ubuntu固件 xff0c 那么你可以通过如下命令升级系统到最新版本 span class token function sudo span span class token fun
  • 设置Chrome页面为黑色

    文章目录 1 设置主题2 设置页面 1 设置主题 设置 gt 外观 gt 主题背景 gt 选择一个黑色的主题 2 设置页面 输入chrome flags enable force dark将其设置为Enable即可
  • 网线每根的含义以及类别和距离传输问题

    文章目录 1 八芯线每根的含义2 传输距离限制3 双绞线的主要分类 1 八芯线每根的含义 网线采用8根线芯 xff0c 主要是为了减少电磁信号的相互干扰 xff0c 只用四根 xff0c 另外四根可做备份使用 每两根按一定的密度缠绞在一起
  • Windows快捷键

    文章目录 1 创建虚拟桌面2 虚拟桌面间切换3 虚拟桌面关闭4 锁住PC5 显示桌面6 从任务栏打开新应用7 两个应用分屏8 应用切换9 打开文件管理视窗10 打开放大镜11 截取屏幕12 打开操作中心13 进入设置14 与Cortana或
  • ubuntu(18):对‘pthread_create’未定义的引用

    报错 xff1a 对 pthread create 未定义的引用 usr local lib libbenchmark a benchmark runner cc o xff1a 在函数 benchmark internal Benchma
  • Git修改与删除commit记录

    Git修改与删除commit记录 修改commit信息删除未push的commit删除已push的commit 修改commit信息 1 修改最近一次commit的信息 git commit span class token operato
  • 电机转矩、功率、转速之间的关系及计算公式

    P 61 W T 61 FS T 61 FV T 61 F R V 61 2 RN N 转速 所以 P 61 FV 61 T R 2 RN 61 2 TN T 61 P 2 n 用千瓦 xff08 KW xff09 和转 分 xff08 r
  • 使用示波器测量串口波特率

    使用示波器测量串口波特率 波特率和bit时间计算关系基础概念基础知识 xff1a 测量结果 波特率和bit时间计算关系 基础概念 简而言之 xff0c 串口传输的波特率即为每秒钟传输二进制的位数 脱离枯燥乏味的文字描述 xff0c 我们用波
  • 雷达基本原理和组成

    雷达由天线辐射电磁波 xff0c 并通过天线接收目标反射回的电磁波 目标回波 xff0c 然后通过接收机和信号处理机从目标回波中提取信息 提取的目标信息主要包括距离 方位 俯仰和速度等 雷达系统的主要组成如图所示 xff0c 主要由发射机

随机推荐

  • 雷达坐标转换

    function r azimuth elevation flag AE r a etrue flag AE Truenum coordinate conversion XYZ t Angle Az Angle El 1 a 雷达直角坐标系
  • STM32F4驱动GPS(寄存器版)

    本次使用STM32F4的USART1对GPS模块进行驱动 xff0c 并且将GPS的时间 经纬度通过串口打印出来 gps模块与接线图 注意 xff1a GPS 模块需放到窗户边 阳台 xff0c 否则可能收不到 GPS 信号 1 GPS驱动
  • 宏的使用 extern

    https www cnblogs com chulin p 9389254 html
  • 【linux tcp抓包之三次握手】

    linux tcp抓包之三次握手 写在前面三次握手tcpdump参数说明返回值说明IP 127 0 0 1 42004 gt 127 0 0 1 5051Flags S win 43690 options mss 65495 sackOK
  • 姿态解算原理(一)——旋转矩阵

    像我们常见的MPU6050 MPU9250等等都是一种捷联式的惯性元件 xff0c 还是一种低成本的 xff0c 还有一种是平台式的惯性导航 xff0c 不过我们能够用得起的就是低成本的MEMS惯性元件 xff0c 本文的内容是姿态解算的原
  • 【c++编译】makefile与CMake【转】

    makefile与CMake 简单介绍CMake简介检查是否安装CMake常用指令简单应用 简单介绍 我们一般使用makefile文件组织大型C C 43 43 或者含有多个C C 43 43 文件的项目 xff0c 有人认为makefil
  • octomap(1):octomap_server报错MessageFilter [target=odom_combined ]: Dropped 100.00% of messages so far

    报错 xff1a WARN 1652516663 964101392 MessageFilter target 61 odom combined Dropped 100 00 of messages so far Please turn t
  • QT定位地图制作

    一 qt绘画图形 1 创建绘图事件函数 nbsp nbsp nbsp nbsp lt 1 gt paintEvent QPaintEvent QPainter painter this 2 设置画布尺寸 确定原点 X Y轴方向 nbsp n
  • CMake学习

    1 引言 使用cmake管理SLAM工程很方便 xff0c 编译便捷 2 具体学习 推荐 cmake实践 1 MESSAGE在make时的输出 CMakeLists txt内容 PROJECT span class token punctu
  • 【深蓝学院】手写VIO第2章--IMU传感器--笔记

    0 内容 1 旋转运动学 角速度的推导 xff1a 左 61 omega wedge xff0c 而
  • 使用c语言实现的http get post请求

    这里写目录标题 背景参考案例 具体实现请求代码模板flask接收示例 背景 我目前需要解决一个需求 xff0c 将一个c工程中的特定数据转发到VUE前端框架上做界面展示 xff0c 且该框架已经有后端为flask框架 所以得考虑如何将c工程
  • WFLY 2.4G 遥控器接收机 STM32F1x开发

    一 遥控器和接收头类型 1 1 天地飞 WFT06X A 2 4GHz 6通道遥控器 商品规格 xff1a 六通道2 4G 1 2 WFR06S 2 4G 6通接收机 产品规格 频 段 xff1a 2 400GHz 2 483GHz 灵 敏
  • WWW网络请求

    文章目录 1 Get方法1 1 文本下载1 2 Texture下载 2 Post方法2 1 基本方法2 2 Post上传二进制文件 3 补充 1 Get方法 1 1 文本下载 span class token keyword private
  • Java抛出异常的处理方法

    今天在码代码的过程中 xff0c 在判定一个非法情况时 xff0c 往常是使用输出错误信息并return的方式处理 但今天突发奇想能否使用抛出异常的方式处理非法情况 xff08 即输出错误信息并退出程序 xff09 xff0c 于是在网络上
  • 2023-03-18 Android app 用进度条ProgressBar 圆形样式做加载loading效果,旋转动画

    一 activity main xml 布局文件 lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt lt RelativeLayout xmlns android 61 34 ht
  • MPLAB构建项目报错“recipe for target ‘.build-conf‘ failed”

    recipe for target build conf failed 刚入门单片机 xff0c 在写程序时 xff0c 当时写完 xff0c build成功 xff0c 但是第二天过来 xff0c 改写了部分代码 xff0c 然后去bui
  • C/C++开发人员要了解的几大著名C/C++开源库

    目录 1 多媒体处理开源库FFmpeg 2 实时音视频处理开源库WebRTC 3 Chrome浏览器内核开源库Chromium 4 Chromium嵌入式框架开源库CEF 5 多协议网络传输开源库libcurl 6 开源操作系统ReactO
  • ADC转换值和实际电压的关系

    1 首先确定ADC用几位表示 xff0c 最大数值是多少 比如一个8位的ADC xff0c 最大值是0xFF xff0c 就是255 xff08 一般芯片手册会有说明 xff09 2 然后确定最大值时对应的参考电压值 一般而言最大值对应3
  • 程序设置波特率和串口调试助手波特率设置不同才能通信

    本人小白一个 xff0c 在根据教程去做串口通信时 xff0c 程序码完之后 xff0c 调试助手一直显示乱码 网络上查找原因 xff0c 得知是波特率不对 xff0c 当串口的波特率是38400 xff0c 程序上是115200时 xff
  • MPC574x平台学习——CAN通信

    前言 MPC574x是恩智浦公司出的一个系列的芯片 xff0c 本人所接触的主要是MPC5742 xff0c 最近在调试MPC5742的CAN通信 xff0c 使用S32自带的SDK生成CAN驱动 通过网络的教程去完成 xff0c 但是跟着