加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 一、新建工程
    • 二、引脚配置
    • 三、外设配置
    • 四、部分代码展示
    •  五、注意事项
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

揭秘车载VCU项目之外挂界的“大哥”DMA

07/30 10:20
1693
阅读需 6 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、新建工程

可参考往期推文:S32K344 VCU实战项目之带你入门篇

二、引脚配置

此实例选择CAN0进行配置。

三、外设配置

对于DMA,其采用的固定映射,对于通道0至通道15,其映射一部分外设,通道16至通道31映射一部分外设,所以对于外设要使用DMA,也需要注意此项。

添加外设:

CAN基础配置:

CAN的用户回调配置:

中断配置:

配置完毕后更新代码:

四、部分代码展示

/** * @brief FlexCAN0中断回调函数 * * 该函数处理FlexCAN0模块的各类事件,根据事件类型执行相应的处理逻辑。 * 主要负责接收和发送CAN消息。 * * @param instance CAN实例号,此处固定为FlexCAN0。 * @param eventType 事件类型,指示当前中断的原因。 * @param buffIdx 接收缓冲区索引,指示接收消息所在的缓冲区。 * @param flexcanState FlexCAN状态结构体指针,包含FlexCAN模块的当前状态信息。 */void FlexCAN0_Callback(uint8 instance, Flexcan_Ip_EventType eventType, uint32 buffIdx,                       const Flexcan_Ip_StateType *flexcanState){    /* 忽略参数,防止编译器警告 */    (void)flexcanState;    (void)instance;    (void)buffIdx;
    /* 根据事件类型执行相应的处理逻辑 */    switch(eventType)    {        case FLEXCAN_EVENT_RX_COMPLETE:        {                txData[7] = 0;            /* 设置消息ID类型为标准ID,准备发送消息 */            tx_info.msg_id_type = FLEXCAN_MSG_ID_STD;            /* 发送消息,并从接收缓冲区读取新消息 */            FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, MSG_ID, (uint8 *)&txData);            FlexCAN_Ip_Receive(INST_FLEXCAN_0, RX_MB_IDX, &rxData, FALSE);        }break;        case FLEXCAN_EVENT_RXFIFO_COMPLETE:        {            /* RXFIFO完成事件的处理逻辑 */        }break;        case FLEXCAN_EVENT_TX_COMPLETE:        {            /* TX完成事件的处理逻辑 */        }break;        case FLEXCAN_EVENT_ENHANCED_RXFIFO_COMPLETE:        {            /* 增强型RXFIFO完成事件的处理逻辑 */        }break;        case FLEXCAN_EVENT_ENHANCED_RXFIFO_WATERMARK:        {            /* 增强型RXFIFO水位标记事件的处理逻辑 */        }break;        case FLEXCAN_EVENT_DMA_COMPLETE:        {                txData[7] = 11;            /* DMA完成事件的处理逻辑,发送消息并从FIFO读取数据 */            tx_info.msg_id_type = FLEXCAN_MSG_ID_STD;            FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, MSG_ID, (uint8 *)&txData);            FlexCAN_Ip_RxFifo(INST_FLEXCAN_0, &rxFifoData);        }break;        default:        {            /* 默认情况下,不做任何处理 */        }break;    }}

 五、注意事项

中断配置回调函数注意事项:

六、Reference

20240224【车载VCU项目简介】

20240226【车载VCU项目进度1】

20240304【车载VCU项目进度2】

20240308【车载VCU项目进度3】

20240323【车载VCU项目进度4】

20240420【车载VCU项目进度5】

20240619【车载VCU项目进度6】

20240719 【车载VCU项目进度7】20240726 【车载VCU项目进度8】

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
FSBB20CH60C 1 onsemi Intelligent Power Module, 600V, 20A, 60-TUBE
$26.91 查看
L9788 1 STMicroelectronics Multifunction IC for Automotive Engine Management System

ECAD模型

下载ECAD模型
暂无数据 查看
ACS758KCB-150B-PFF-T 1 Allegro MicroSystems LLC Analog Circuit, 1 Func, BICMOS, PACKAGE-5

ECAD模型

下载ECAD模型
$9.7 查看

相关推荐

电子产业图谱

微信公众号《朱老师IT充电站》主笔。先后从事电子工程师、单片机软件工程师、嵌入式linux软件工程师、物联网软件工程师、架构师等工作,教育品牌<朱老师物联网大讲堂>创始人,畅销书作者。擅长U-Boot、linux kernel等嵌入式底层和系统层开发、架构设计。擅长汇编、C/C++、Java、C#等常用开发语言。被授予:IBM技术专家、华为云享专家、51CTO学院金牌讲师等称号。