电子产业一站式赋能平台

PCB联盟网

搜索
查看: 434|回复: 0
收起左侧

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

[复制链接]

483

主题

483

帖子

3046

积分

四级会员

Rank: 4

积分
3046
发表于 2024-7-30 08:00:00 | 显示全部楼层 |阅读模式
点击上方蓝字关注我们

hmgnqg53huy6402033330.png

hmgnqg53huy6402033330.png

一、新建工程

jl1kxbciwju6402033430.png

jl1kxbciwju6402033430.png


可参考往期推文:
https://mp.weixin.qq.com/s/W_HxZ89pkW9VvyGt2mYzwA



二、引脚配置



cqtsikqcanv6402033530.png

cqtsikqcanv6402033530.png


此实例选择CAN0进行配置。

三、外设配置


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

bqsykov2rgw6402033630.png

bqsykov2rgw6402033630.png

CAN基础配置:

2jfi5phvkld6402033731.png

2jfi5phvkld6402033731.png

CAN的用户回调配置:

中断配置:

k1yxh1trx3b6402033831.png

k1yxh1trx3b6402033831.png

配置完毕后更新代码:

n1ilklhf2wu6402033931.png

n1ilklhf2wu6402033931.png

tgxq2pj0wws6402034031.png

tgxq2pj0wws6402034031.png





四、部分代码展示

  • /** * @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;    }}

    五、注意事项

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

    irblop3v3jb6402034131.png

    irblop3v3jb6402034131.png


    rx5yx3czexd6402034232.png

    rx5yx3czexd6402034232.png


    lxs4lkoff3t6402034332.png

    lxs4lkoff3t6402034332.png



    六、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】

    gjqyzvl54mm6402034432.png

    gjqyzvl54mm6402034432.png

    欢迎转发分享给需要的好友!

    4pr1j4h14f26402034532.png

    4pr1j4h14f26402034532.png


    微信号:zls_it

    扫描下方二维码添加充电站小助手微信,可以加入微信交流群

    群内每天分享一些大厂的经典C语言、C++面试题以及知识点解析、技术话题分享、常见错误、易混淆的概念答疑等,等你来Get!!

    howqoiaqdbf6402034632.png

    howqoiaqdbf6402034632.png

    suggcijdgup6402034732.png

    suggcijdgup6402034732.png

    START

    g5hfv5blvak6402034832.png

    g5hfv5blvak6402034832.png

    beyvp33zusm6402034932.png

    beyvp33zusm6402034932.png


    4nyt1gnkv4z6402035032.png

    4nyt1gnkv4z6402035032.png
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条


    联系客服 关注微信 下载APP 返回顶部 返回列表