发布时间:2026/8/31 20:09:41
简易的AUTOSAR BSW层 CAN通信配置总结 前言近期公司为产品新增车控模块功能这要求我们在原有的裸机运行架构基础上引入符合 AUTOSAR 规范的 BSW基础软件层以实现与底层硬件的标准化交互。本文聚焦于 BSW 层与 MCAL微控制器抽象层的配置实践不涉及应用层开发。在完整工程交付前我搭建了一条简易的 BSW 层 CAN 通信链路手动配置了几个信号将其绑定到 IPDU再映射至 CanIf 层最终与 MCAL 层的 CAN 收发器和控制器对接实现了最基础的 CAN 通信功能。MCAL 层采用常见的 EB 工具进行配置过程中也遇到了不少问题后续将另文总结。需要说明的是当前几个 BSW 协议栈能够正常运行的前提是 MCAL 层已实现了一套类裸机的任务调度系统。BSW 的初始化及报文周期发送均依托于 GPT通用定时器中断函数来驱动。未来引入操作系统OS后底层调度机制还需进一步调整这也留待后续探讨。一条报文从 SWC软件组件调用 Rte运行时环境发送接口开始穿越 BSW 层的各个协议栈经历打包、路由、控制器选择直至最终执行 can_write其完整流程如下Com_SendSignal →Com_MainFunctionTx_ComMainFunctionTx0 →Com_PduPeriodicTxProcess →Com_PduCycleSend →Com_OnePduSend →PduR_ComTransmit →PduR_Local_Transmit →CanIf_Transmit → can_write该流程涵盖了 Com、PduR、CanIf 三个核心协议栈。下文将逐一详解各层的具体配置步骤。一、Com配置ComGeneral按模块默认配置就行需要注意的是当前只需要CAN能正常收发就行而且没有配OS所以这里要取消多核勾选。只有CAN一种通信方式的情况下不需要网关转发ComGwMapping无需配置。从Com到PduR是以IPDU的形式传输所以在ComIPdus下面分别添加一条ComIPdu_rx和ComIPdu_tx这里着重讲tx。ComIPdu_tx分为ComTxModeFalse和ComTxModeTrue。ComTxModeFalse指数据变化时触发式发送ComTxModeTrue是周期性发送两个可以同时配上。ComIPduGroup中可按收发各配置一条一般项目中如果收发报文数量较少就按报文单独发送或者只配一个IPduGroup即可这里的ID就是后续Com_IpduGroupStart的入参。ComMainFunctionRxs和ComMainFunctionTxs用于生成收发主函数只需设置收发主函数的周期。最关键的就是具体的信号内容了包括信号的起始位信号的大小大小端排序可以给你的信号取一个高分辨度的名称方便后续在代码中查找当然实际生成代码中一个报文中生成的信号宏都是从0开始排序二、PduR配置在配置PduR之前需要先在EcuC中添加两个PdusEcuC相当于BSW中的全局变量定义和管理模块为其他模块提供索引的锚点。报文发送是从Com出发所以添加一个tx pdu索引Com module。接收都是从CanIf上送所以添加一个rx pdu索引CanIf module。回到PduR的配置首先就是添加两个BswModules这里暂不考虑诊断、存储的情况下PduR的上下层分别只有Com和CanIf各自索引到对应模块。工具会根据你选择的module自行区分该协议栈是PduR的upper还是lower module。在PduRDestPdus和PduRSrcPdus中分别新增一个tx和rx配置项注意PduRDestPdus_tx和PduRSrcPdus_tx要索引EcuC中同一个PduR信号。接着在PduRRoutingPath中对源端和目的端引用的PduR进行组合收发各配置一条routingpath。接着在PduRRoutingPath中对源端和目的端引用的PduR进行组合收发各配置一条routingpath。三、CanIf配置最后是CanIf的配置首先与MCAL层对应的配4个can控制器和4个can收发器当然这里配的can收发器和控制器的参数并不会真正用得到这里只是保证CanIf索引到对应的can控制器ID具体还是用的MCAL层can相关的配置。CanHardwareObjects中先配接收再配发送里面具体的内容还是以MCAL层的配置为准这里也可以简单配下CanHandleType选BASIC即一个硬件对象邮箱能处理一个范围的CAN ID选FULL的话一个邮箱只能处理某一具体ID的can报文CanIdType选MIXED表示既可以收/发can类型也可以收/发canfd类型的报文。注意下面的can控制器索引一定要选对RXTX要选同一个can控制器。波特率啥的可以就不配了只要CanIf索引到对的can控制器的ID号就行剩下交给MCAL层来实现。这里同样取消勾选多核由于裸机GPT中断触发机制的局限性这里取消txbuffer。简单说下原因就是在当前简易工程下开启这个buffer会误读未初始化的数据发送的 CAN 报文ID都为0且内容为空。本次暂不配置网络管理相关的协议栈这里所有相关交互模块暂时就选复杂驱动回调函数设空。接着看CanIfHthCfg和CanIfHrhCfg选择对应的can控制器后通过Hth和Hrh可以连接到具体收/发的硬件对象。这里底层只有can控制器1可用所以将分别索引到can控制器1的收/发object。然后到CanIfBufferCfgCanIfBufferCfg特指发送缓冲区Txbuffer可配置多个不同容量的缓冲区。 这里大小设为 0索引通过本CanIfBufferCfg引用对应的硬件发送通道即CanIfHthCfg。再到CanIfTxPduCfgsCanIfTxPduRef绑定到EcuC中定义的PduCanIf的上层选PduR最后绑定具体的txbuffer。这样就通过EcuC模块将每条PDU绑定到了对应的CAN控制器。BSW侧的三个协议栈的配置就到这边了。实际代码运行时还需要添加初始化和周期运行函数INITvoid Bsw_Init(void){CanIf_Init(NULL_PTR);PduR_Init(PduRPBConfig);Com_Init(NULL_PTR);Com_IpduGroupStart(COM_IPDU_GROUP_COMIPDUGROUP_TX_INDEX, TRUE);CanIf_SetControllerMode(0, CAN_CS_STARTED);CanIf_SetControllerMode(1, CAN_CS_STARTED);CanIf_SetControllerMode(2, CAN_CS_STARTED);CanIf_SetControllerMode(3, CAN_CS_STARTED);CanIf_SetPduMode(0, CAN_CONTROLLER_ONLINE);CanIf_SetPduMode(1, CAN_CONTROLLER_ONLINE);CanIf_SetPduMode(2, CAN_CONTROLLER_ONLINE);CanIf_SetPduMode(3, CAN_CONTROLLER_ONLINE);}10ms任务调度void Bsw_MainFunction10ms(void){Com_MainFunctionTx_ComMainFunctionTx0();Com_MainFunctionRx_ComMainFunctionRx0();PduR_MainFunction();}修改具体的信号后也可以触发式发送一次该信号所属报文。调用函数如下Com_SendSignal(COMCONF_COMSIGNAL_COMIPDU_TX_COMSIGNAL_VEHICLESPEED, speed);总结与注意事项配置要点总结Com层配置取消多核勾选配置ComIPdu_tx的ComTxModeFalse触发式发送和ComTxModeTrue周期性发送合理设置ComIPduGroup注意信号起始位、大小和大小端排序。PduR层配置先在EcuC中添加tx和rx PDU然后在PduR中添加BswModules确保PduRDestPdus_tx和PduRSrcPdus_tx索引同一个PduR信号最后在PduRRoutingPath中完成路由组合。CanIf层配置配置与MCAL层对应的CAN控制器和收发器取消多核勾选根据裸机环境特点取消txbuffer。裸机环境下的特殊处理多核支持在ComGeneral和CanIf配置中都需要取消多核勾选因为裸机环境没有操作系统支持多核调度。缓冲区管理由于GPT中断触发机制的局限性需要取消CanIf的txbuffer每次只发送一帧报文避免缓冲区索引回绕导致发送未初始化数据。任务调度BSW的初始化和报文周期发送需要在GPT中断函数中进行这要求MCAL层已实现裸机任务调度系统。收发器控制CanIf配置的收发器需要MCAL层自行封装接口在控制CAN控制器时同步处理收发器的唤醒和休眠动作。实践建议在配置前确保MCAL层的基础驱动和任务调度系统已正常工作。按照Com→PduR→CanIf的顺序进行配置确保各层间的PDU索引正确对应。对于简单的CAN通信需求可以只配置一个IPduGroup减少配置复杂度。为信号取高分辨度的名称便于后续在代码中查找和维护。在实际项目中需要根据具体的硬件资源和性能要求调整缓冲区大小和发送策略。

相关新闻

2026/8/29 22:15:12

AD7175-8与PIC18F96J94高精度数据采集系统设计

1. 为什么选择AD7175-8与PIC18F96J94组合? 在工业测量和精密仪器领域,信号采集系统的性能往往决定了整个设备的精度上限。AD7175-8作为ADI公司推出的32位Σ-Δ型ADC,其关键特性完美契合高精度测量需求: 超低噪声性能 &#xff1…

2026/8/31 9:02:10

【LeetCode868】二进制间距

目录 题目 解法一、双指针 解法二、尾零个数 题目 解法一、双指针 int max(int a, int b) {return a > b ? a : b; }int max_gap(unsigned int n) {int prev -1;int curr 0;int len 0;while (n) {if (n & 0x01) {if (prev ! -1)len max(len, curr - prev);prev…

2026/8/31 20:05:01

Vorssaint快速切换:一键深浅模式、清空废纸篓、锁定屏幕

Vorssaint快速切换:一键深浅模式、清空废纸篓、锁定屏幕 【免费下载链接】vorssaint-utils Free and open-source macOS menu bar toolkit. 项目地址: https://gitcode.com/GitHub_Trending/vo/vorssaint-utils Vorssaint 是一款免费开源的 macOS 菜单栏工具…

2026/8/31 20:05:01

DAB双向有源桥变换器Simulink建模与PRS移相控制仿真分析

简介:本资源是一个面向通信工程专业学生与数字广播技术初学者的DAB(数字音频广播)MATLAB仿真项目,聚焦OFDM发送端核心流程实现,帮助理解DAB标准中从基带编码到时域信号生成的完整链路。压缩包共2个文件(1个…

2026/8/31 20:05:01

基于STM32的智能家居控制系统设计:红外遥控空调实现详解

简介:这是一套面向嵌入式开发初学者与物联网实践者的STM32智能家居控制系统完整工程资源,聚焦红外遥控空调控制这一特色功能,解决环境感知、本地自动决策与多模态远程交互的典型应用问题。压缩包含448个文件,总大小82.36MB&#x…

2026/8/31 20:05:01

claude-obsidian doctor命令使用指南:快速诊断vault就绪问题

claude-obsidian doctor命令使用指南:快速诊断vault就绪问题 【免费下载链接】claude-obsidian Self-organizing AI second brain for Obsidian Claude Code. Drop any source and Claude reads, links, and files it into one connected knowledge graph of plain…

2026/8/31 20:05:01

IMX6ULL外接SPI LCD跑QT:从设备树到framebuffer完整指南

简介:本资源是面向嵌入式Linux初学者与Qt移植实践者的IMX6ULL平台SPI LCD图形界面开发套件,聚焦解决ARM Cortex-A7平台下ILI9341驱动的TFT屏(MSP2402模组)与Qt应用协同显示的核心问题。压缩包共含多个关键文件,涵盖适配…

2026/8/31 20:00:00

Shannon自动化渗透测试实战:从安装到漏洞报告只需四步

Shannon自动化渗透测试实战:从安装到漏洞报告只需四步 【免费下载链接】shannon Shannon is an AI pentester for web applications and APIs. It analyzes your source code, identifies attack vectors, and executes real exploits to prove vulnerabilities bef…

2026/8/31 1:05:20

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/8/31 2:14:20

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/8/31 1:41:28

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/8/31 0:07:32

STM32C5设备支持包(IAR DFP)安装指南与常见坑

上一阵子在IAR里折腾一块基于STM32C5系列的新板子,工程从STM32CubeMX导出来之后怎么都编译不过。报错信息很干脆:找不到设备描述文件。跟着错误路径去查,发现指向的是一个让我愣了一下的名字:STMicroelectronics.stm32c5xx.2.1.0.…

2026/8/31 0:07:32

STM32N657 SWO引脚矛盾:CubeMX显示PB3,数据手册为PB5

拿到STM32N657这颗料的第一天,我就撞上了一个让人原地懵圈的引脚矛盾:CubeMX里清清楚楚显示SWO在PB3,翻开数据手册的引脚说明表,却赫然写着PB5。对于一个靠SWO输出调试日志吃饭的人而言,这种"工具和手册打架"…

2026/8/31 12:44:45

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/31 9:19:59

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/31 6:53:02

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…