0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于恩智浦MPC5744P的CAN驱动开发和测试

嵌入式程序员 来源:嵌入式程序猿 作者:武国平 2021-09-03 11:35 次阅读

摘要

本篇笔记主要记录基于恩智浦MPC5744P的CAN驱动开发和测试,接口设计,封装为BSP驱动,为之后实现CAN的高层通信打下基础。。

准备工作

安装S32DS for PA, 因为我们在S32DS下开发MPC5744P。

安装S32DS 的SDK, 我们使用最新版3.0.3

CAN

恩智浦的MPC5744P控制器局域网络CAN,跟我们之前使用的恩智浦Kinetis KV, 等系列的flexCAN结构基本是一样的,MPC5744P不仅仅支持经典CAN,还支持CANFD。

从系统框图也可以看出,总体包含消息缓冲RAM,发送仲裁,接收匹配,和协议引擎。要正常与其他CAN设备通信,必须外接收发器。关于MPC5744P的 flexCAN模块的特性可以参考收据手册,这里不在赘述。有四种工作模式,正常模式,监听模式,回环模式,和禁止模式。CAN外设的寄存器比较多,需要多参考查阅手册。

消息缓冲区结构

恩智浦不管是ARM系列还是PA系列架构的片子, flexCAN模块的消息缓冲机制基本都是一样的。这个结构非常重要,是CAN消息数据处理的基础,SDK底层这部分的处理代码就是按照这个结构。自己实现代码也必须是按照这个结构去实现。

更多CAN详细的介绍请参考官方收据手册。

驱动实现

良好的驱动封装,可以方便应用开发,并且可以容易移植到其他项目,代码重用率高,所以数据和接口是你不得不考虑的问题,怎么样方便的实现,还要通用易用。

数据封装

首先根据MPC5744P的CAN外设结构,我们来封装数据结构体,方便后面软件实现开发,可以新建bsp_can.c和bsp_can.h, 在头文件中封装结构体定义。

88563cf6-0be0-11ec-8fb8-12bb97331649.png

在.c文件中定义封装一些变量,这些变量数组也是通用,在多款产品中都采用,大家也可以参照。

886685a2-0be0-11ec-8fb8-12bb97331649.png

可以实现多个CAN口驱动。如果只有一个CAN口,将CAN_PORTS宏定义为1,几个就定义为几。

这个封装大家可以记着,我在多款器件上都是这么封装的,之前在NXP的KE06, KEA, KV46, K64等系列,在ST的F103, F446, H743等等CAN通信都采用这种封装BSP驱动。

初始化

参考官方的例程,根据自己的硬件去实现,做相应修改。我们一般发送接收要采用中断或者DMA实现,这里以中断方式实现,根据实际可能还需要添加滤波,配置缓冲等。

888491dc-0be0-11ec-8fb8-12bb97331649.png

中断回调函数

最主要的就是通信传输回调函数的实现,MPC5744P的回调函数参数有事件,所以可以根据事件来判断是接收还是发送。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    56

    文章

    2464

    浏览量

    459147
  • 通信
    +关注

    关注

    18

    文章

    5699

    浏览量

    134359
  • 封装
    +关注

    关注

    123

    文章

    7262

    浏览量

    141076

原文标题:用这种结构做CAN通信数据封装太爽了

文章出处:【微信号:InterruptISR,微信公众号:嵌入式程序员】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    汽车CAN FD总线测试原理及应用

    CAN FD总线报文周期一致性测试方法,可自动实现监控测试并快速生成测试报告,主要根据CAPL语言设计建立测试应用工程。
    发表于 04-01 12:53 139次阅读
    汽车<b class='flag-5'>CAN</b> FD总线<b class='flag-5'>测试</b>原理及应用

    CAN控制器、CAN收发器、CAN驱动器的区别是什么?

    CAN总线结构中,CAN控制器、CAN收发器和CAN驱动器是三个不同的组件,各自具有特定的功能和作用。
    的头像 发表于 01-30 09:44 1054次阅读
    <b class='flag-5'>CAN</b>控制器、<b class='flag-5'>CAN</b>收发器、<b class='flag-5'>CAN</b><b class='flag-5'>驱动</b>器的区别是什么?

    示波器是如何测试CAN信号的?

    示波器是如何测试CAN信号的? 示波器是一种用于检测和分析电子信号的仪器,可实时显示信号的波形,并帮助用户诊断和解决电路故障。在汽车行业中,CAN(控制器局域网络)是一种常用的通信协议,用于在车
    的头像 发表于 12-07 13:37 1396次阅读

    LPC55S69 ARM TrustZone CORTECT-M33教程

    本实验的目的是使用ARM KEIL MDK工具包向您介绍Cortex™-M33处理器系列,该工具包采用μVision®集成开发环境。 在本教程结束时,您将自信地使用
    发表于 08-24 07:46

    基于博流BL606P音视频开发板的CAN扩展模块收发测试

    本文是关于开发者 zhanghui 基于BL606P-DVK开发板实战开发的系列文章中的第五篇,主要介绍了CAN扩展模块收发测试,后面还会持
    的头像 发表于 07-03 10:06 407次阅读
    基于博流BL606P音视频<b class='flag-5'>开发</b>板的<b class='flag-5'>CAN</b>扩展模块收发<b class='flag-5'>测试</b>

    NXP i.MX 6ULL评估板测试手册(下)

    目录2 WIFI模块测试... 502.1WIFISTA功能测试2.2WIFIAP功能测试.2.3USBWIFI驱动编译3 蓝牙模块测试4
    发表于 06-14 14:41

    NXP i.MX 6ULL评估板测试手册(中)

    串口1.10 CAN接口测试1.11 USB接口测试1.11.1USB HOST模式读写测试1.11.2USB DEVICE模式功能测试1.
    发表于 06-14 14:25

    NXP i.MX 6ULL评估板测试手册(上)

    组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。评估板接口资源丰富,引出双路网口、双路RS485、双路CAN、三路USB、多路DI/DO、LCD等接口
    发表于 06-14 09:45

    求助,需要MPC5121开发方面的帮助

    5121 开发 SPDIF 模块。 我需要所有支持文档、BSP、驱动程序代码以及与 MPC5121 相关的任何相关应用说明或演示示例。这些资源将极大地帮助我的项目,因为我的目标是理解和开发
    发表于 06-12 07:09

    MPC5744p如何优化程序执行时间?

    作为 MPC5744p 的新手,我遇到了一个关于如何优化程序执行时间的问题。 这是我的中断服务例程中代码行的图片。 ↓这张图片显示了执行我测试过的代码行之前的定时器值 ↓这张图片显示了执行我测试
    发表于 06-05 12:50

    是德Agilent安捷伦N5744A直流电源

    Agilent安捷伦N5744A直流电源 N5744A 是 Agilent 的 760 W、20 V、38 A 直流电源。提供直流电压和电流以测试、设计和排除电气和电子电路故障。应用包括老化、QA
    的头像 发表于 05-25 08:26 245次阅读
    是德Agilent安捷伦N<b class='flag-5'>5744</b>A直流电源

    求助,索取有关在带有MPC5744P MCU的RD33771 EVB中启用锁步功能的文档

    我目前正在从事电池管理系统 (BMS) 项目并使用 RD33771 EVB以及开发软件由 NXP 提供用于开发目的。该板配备MPC5744P微控制器,支持锁步功能。 如果您能协助我提供有
    发表于 05-24 08:27

    有没有办法在MPC5744P中为每个应用程序配置一个内存区域而不必为每个区域设置进程ID ?

    你好 有没有办法在MPC5744P中为每个应用程序配置一个内存区域而不必为每个区域设置进程ID ?
    发表于 05-05 07:25

    MPC5744P上的CAN ID掩码问题求解

    我遇到了一个关于 CAN ID 过滤器的问题。以下是我的代码的一部分 我应该得到 CAN 消息的 0x7XX 和 0x6XX ID,但它只得到 0x700 和 0x600。而IRMQ是1。 然后我
    发表于 05-04 08:45

    软件如何判断MPC5777C当前正在使用哪种模式?

    MPC5777C 如何检测 XOSC 模式的故障(旁路模式外部时钟连接到 EXTAL 引脚与使用外部振荡器)?软件如何判断 MPC5777C 当前正在使用哪种模式?参考手册称 XOSC 没有任何软件可访问寄存器,因此不清楚
    发表于 04-25 06:17