CAN_集成手册

目标

本集成手册用于指导客户进行通信栈集成,文档主要包括的内容为:通信栈集成指导。

由于各项目的需求不同,集成示例不会针对于特定的商业项目做详细讲解。

缩写词和术语

表 2‑1

** 缩写词/术语**

描述

BSW

Basic Software 基础软件层

BswM

Basic Software Mode Manager基础软件模式管理器

MCAL

  • Microcontroller Abstraction Layer 微控制器抽象层

CANIF

CAN Interface module CAN接口模块

CanSm

CAN State Manager module CAN状态管理器模块

ComM

Communication Manager module通信管理器模块

EcuM

ECU State Manager module ECU状态管理器模块

SchM

Scheduler Module调度程序模块

参考文档

[1]参考手册_CanIf.pdf

[2]参考手册_Com.pdf

[3]参考手册_EcuC.pdf

[4]参考手册_PduR.pdf

[5]参考手册_CanSM.pdf

Can通信栈集成

项目交付的内容为:Can通信栈源码和ORIENTAIS Configurator配置工具。通信栈细分为通信栈的各模块及其对应的配置工具模块。

通信栈各配置模块的功能介绍,参见表 4‑1通信栈各配置模块介绍。

使用通信栈源码和配置工具,进行通信栈的集成的步骤,参见表 4‑2 通信栈集成的步骤。

表 4‑1通信栈各配置模块介绍

模 块名

功能

Can

CAN驱动配置。(由mcal配置工具导入,详见章节5.2.1)

CanIf

CanIf模块主要处理上层模块与底层驱动的之间 PDU的传递,为上层模块提供统一的接口来管理不同的CAN硬件模块

EcuC

用于辅助配置工具完成配置的模块。主 要提供Pdu的定义,其它模块通过关联EcuC中Pdu,相互关联起来。

PduR

PDU Router主要为通讯接口模块(CANIF)、传输协议模 块、诊断通讯管理模块以及通讯模块提供基于I-PDU的路由服务。

Com

COM模块主要提供I-PDU和信号相关管理功能

CanSM

主要功 能是与通信硬件抽象层和系统服务层产生交互,为每一个CAN通信 总线定义一个总线相关的状态管理,并为相关的总线提供流控制。

表 4‑2 通信栈集成的步骤

步 骤 *

操作

说明

1

ORIENTAIS Stuido配置工具 工程搭建和通信栈模块加载

若配置工具已经搭建 ,则仅需进行通信栈模块的加载操作。

2

模块配置及配置文件生成

NA

3

代码集成

现有工程、 通信栈源代码和配置生成文件的集成。

4

验证测试

NA

注意:通信栈集成之前,用户须确保已经有基础工程,且本通信栈相关的其他通信栈能正常工作。

新建ORIENTAIS Configurator配置工程及模块加载

  1. 安装ORIENTAIS Configurator软件后,双击软件图标打开软件。

../../_images/image1161.png

图 4‑1 配置工程-1

  1. 菜单栏File🡪New🡪Project,新建工程。

../../_images/image2104.png

图 4‑2 配置工程-2

  1. 在弹出的新建窗口中选择Autosar下的 [BSW Project],选择Next。

../../_images/image380.png

图 4‑3 配置工程-3

  1. 在弹出的窗口中输入工程名,选择Finish。

../../_images/image470.png

图 4‑4 配置工程-4

  1. 在弹出的窗口中选择Yes。

../../_images/image560.png

图 4‑5 配置工程-5

  1. 选择[Bsw_Builder],右键单击,选择New ECU Configuration。

image1

图 4‑6 配置工程-6

  1. 在弹出的窗口中输入ECU名,然后选择Next。

../../_images/image749.png

图 4‑7 配置工程-7

  1. 在弹出的窗口中勾选需添加的模块,点击Finish。

../../_images/image845.png

图 4‑8 配置工程-8

../../_images/image944.png

图 4‑9 配置工程-9

  1. 新建工程如下所示,步骤⑦中添加的模块已经被加入到工程中。

../../_images/image1038.png

图 4‑10 配置工程-10

模块配置及代码生成

模块配置

模块的具体配置,取决于具体的项目需求。该通信栈各模块配置项的详细介绍,参见表 4 3通信栈各模块配置参考文档。

表 4‑3通信栈各模块配置参考文档

** 模块**

参考文档及其章节

说明

Can

MCAL对应的Can配置手册

CanIf

参考手册_CanIf.pdf

PduR

参考手册_PduR.pdf

Com

参考手册_Com.pdf

CanSM

参考手册_CanSM.pdf

EcuC

参考手册_EcuC.pdf

ComM

参考手册_ComM.pdf

配置代码生成

  1. 在ORIENTAIS Stuido主界面左方,选择对应的通信栈,单击右键弹出Validate All和Generate All菜单。

../../_images/image1162.png

图 4‑11 模块配置

  1. 选择Validate All对本通信栈各配置选项进行校验,没有错误提示信息即校验通过。若有错误信息,请按照错误提示修改。

  2. 选择Generate All,生成配置文件。右下角的Console窗口输出生成的配置文件信息。

../../_images/image1236.png

图 4‑12 模块配置

  1. 将ORIENTAIS Configurator切换到Resource模式,即可查看生成的配置文件。

../../_images/image1332.png

图 4‑13 模块配置

功能集成

代码集成

通信栈代码包括两部分:项目提供的通信栈源码和ORIENTAIS Configurator配置生成代码。通信栈集成包括通信栈源码(CAN、CanIf、PduR、ComM、CanSM等)、定时器源码和部分其他模块源码,具体文件见表4-4。

用户须将通信栈源码和章节4.2.2生成的源代码添加到集成开发工具的对应文件夹。通信栈集成的文件结构,见章节④。

表4-4通信栈源码文件

移库文件夹

移库文件

说明

ComM

ComM.c、

ComM.h、

ComM_BusSM.h、

ComM_Com.h、

ComM_Dcm.h、

ComM _EcuMBswM.h、ComM_Internal.c、C omM_Internal.h、ComM_MemMap.h、

ComM_Nm.h

通信栈源码

CanIf

CanIf.c、

CanIf.h、

CanIf_Cbk.h 、CanIf_MemMap.h、CanIf_Types.h

CanSM

CanSM.c、

CanSM.h、

CanSM_BswM.h、

CanSM_Cbk.h、

CanSM_ComM.h、CanSM_MemMa p.h、CanSM_TxTimeoutException.h

PDUR

PduR_CanIf.h、

PduR_Com.h、P duR_Internal.c、PduR_Internal.h 、PduR_MemMap.h、PduR_Types.h、

PduR.c、

PduR.h

Com

Com.c、

Com.h、

Com_Cbk.h、Com_GwInternal.c、C om_Internal.c、Com_Internal.h、 Com_MemMap.h、Com_RxInternal.c 、Com_TxInternal.c、Com_Types.h

SchM

SchM.c、

SchM.h、

SchM_Com.h、

SchM_ComM.h、

SchM_CanIf.h、

SchM_PduR.h、

SchM部分源码

BswM

BswM.c、

BswM.h、

BswM_CanSM.h、

BswM_ComM.h、

BswM部分源码

EcuM

EcuM_Types.h、

EcuM.h、

EcuM部分源码

注意:通信栈集成之前,用户须确保已经有基础工程,且本通信栈相关的其他通信栈能正常工作。

集成注意事项

对于集成过程中,通信栈特殊要求和用户经常出现的问题,归类总结形成 表 4‑5通信栈集成约束清单。用户需逐一排查表中的约束项,以避免集成问题出现。

表 4‑5 通信栈集成约束清单

编 号 *

类别*

约束限制

** 1**

中断

通信栈 有中断、轮询或混合三种工作模式。若选取中断或混合模 式,用户需在通信栈配置对应的中断并填充中断服务API。

** 2**

堆栈

用户需确保为任务堆栈和中断堆栈分配足够的堆栈空间。

** 3**

头文件

  • 添加通信

栈代码之后,用户需更新集成开发工具中的头文件路径。

  • 调用通信栈API的源文件,需要包含通信栈的头文件。

** 4**

初始化

以CAN通信为例,通信栈的初始化顺序为:Can_Init, CanIf_Init, PduR_Init, Com_Init,CanSM_Init。

** 5**

周 期函数

Com_MainFunctionRx,Com_MainFunctionRouteSi gnals和Com_MainFunctionTx需要被周期性任务函数调用。

集成示例

本章节通过普通的CAN通信栈为例,向用户展示通信栈的集成过程。用户可以据此熟悉通信栈配置工具的配置过程,以及如何应用配置工具生成的配置文件。

为让用户更清晰的了解工具的使用,所用的配置均逐一手动完成。用户可以使用工具中的DBC导入功能,快速完成配置。DBC导入功能不属于本文档介绍范畴,具体操作请参照《ORIENTAIS Configurator DBC导入功能.pdf》。

注意:本示例不代表用户的实际配置情况,用户需要根据自己的实际需求,决定各个参数的配置。

集成目标

CAN报文需求:

表 5‑1

报 文ID

报文

名称

发 送

/接 收*

发 送

模 式

报 文

周 期

报文

长度

工 作

模 式

0x100

CAN_Tx_Message1

发送

周期

50ms

8字节

轮询

0x105

CAN_Tx_Message2

发送

触发

8字节

轮询

0x120

CAN_Rx_Message1

接收

NA

100ms

8字节

轮询

0x125

CAN_Rx_Message2

接收

NA

8字节

轮询

CAN报文信号需求:

  • CAN_Tx_Message1(0x100)包含的信号

../../_images/image1430.png

图 5‑1 集成示例-1

  • image2CAN_Tx_Message2(0x105) 包含的信号

图 5‑2 集成示例-2

  • CAN_Rx_Message1(0x120) 包含的信号

../../_images/image1624.png

图 5‑3 集成示例-3

  • CAN_Rx_Message1(0x125) 包含的信号

../../_images/image1724.png

图 5‑2 集成示例-4

模块的配置

新建配置工程及模块加载操作,请参考本文档4.2章节。

Can模块配置

有多种工具可以用于配置mcal,本章介绍如何使用EB工具配置Can模块,但是只涉及到与通信栈中报文收发有关系的部分(主要是HardwareObeject),其余配置选项请参考EB工具的帮助手册进行配置。

  1. 打开EB工具,新建CAN模块后,在以下路径配置HardwareObject:

CAN模块🡪CanConfigSet🡪CanHardwareObject。

根据本次配置示例的目标,需要配置4个HardwareObject,如下图所示:

../../_images/image1822.png

图 5‑3 模块配置-1

注意:HardwareObject定义的时候,必须接收报文放在发送报文前面。

  1. 完成EB配置后,生成Can模块的配置文件,替换工程中原有的Can模块的配置文件。

  2. 导出EB的配置文件。

  3. 将③导出的配置文件,导入到ORIENTAIS Configurator中。

导入后工程如下图所示:

../../_images/image1919.png

图 5‑4 模块配置-2

CanIf模块配置

  1. 双击CanIf模块,打开CanIf模块的配置界面。

../../_images/image2016.png

图 5‑5 模块配置-3

  1. CanIfPublicCfg、CanIfPrivateCfg、CanIfDispatchCfg、CanIfTrcvDrvCfg标签页均保持默认值,不需要配置。

  2. 在CanIfInitCfg标签页下的容器[CanIfInitCfg]上,右边新建一个CanIfInitHohCfg对象。

../../_images/image2122.png

图 5‑6 模块配置-4

  1. CanIfCtrlDrvCfg配置。

[CanIfCtrlDrvCfg_0]的配置项CanIfCtrlDrvInitHohConfigRef需要关联到步骤③中创建的HOH对象。

[CanIfCtrlDrvNameRef]的配置项选Can。

../../_images/image2219.png

图 5‑7 模块配置-5

  1. CanIfCtrlCfg配置:

将默认生成的[CanIfCtrlCfg_0]名字改为[CanIfCtrlCfg_Controller0]。

参数CanIfCtrlCanCtrlRef,选择CanController_0。

../../_images/image2317.png

图 5‑8 模块配置-6

可在容器[CanIfInitCfg]上右键,新建CanIfBufferCfg、CanIfInitHohCfg、CanIfRxPduCfg、CanIfTxPduCfg。

../../_images/image2416.png

图 5‑9 模块配置-7

  1. 新建一个CanIfInitHohCfg,再在新建的容器[CanIfInitHohCfg_0]上右键新建2个CanIfHrhCfg和2个CanIfHthCfg。然后将新建的容器改为有意义的名字。

每个发送报文需要一个CanIfHrhCfg,每个接收报文需要一个CanIfHthCfg。

../../_images/image2514.png

图 5‑10 模块配置-8

  1. 配置CanIfHrhCfg_Rx_Message1和CanIfHrhCfg_Rx_Message2。

../../_images/image2613.png

图 5‑11 模块配置-9

../../_images/image2712.png

图 5‑12 模块配置-10

  1. 配置CanIfHthCfg_Tx_Message1和CanIfHthCfg_Tx_Message2。

../../_images/image2812.png

图 5‑13 模块配置-11

../../_images/image2912.png

图 5‑14 模块配置-12

  1. 新建2个CanIfBufferCfg,并修改名字。每个发送报文需要建立一个CanIfBufferCfg。

../../_images/image308.png

图 5‑15 模块配置-13

../../_images/image3115.png

图 5‑16 模块配置-14

  1. 新建2个CanIfRxPduCfg,并修改名字。每个接收报文需要在CanIf中配置对应的CanIfRxPduCfg。报文CAN_Rx_Message1对应的CanIfRxPduCfg参数配置如下:

表 5‑2

参数名

设置值

说明

CanIfRxPduCanId

0x120

报文ID(参照DBC)

CanIfRxPduCanIdType

STANDARD_CAN

帧类型:标准帧

CanIfRxPduDlc

8

报文长度 (参照DBC)

CanIfRxP duUserRxIndicationUL

PDUR

CanIf 模块收到报文后通知PduR模块

CanIfRxPduHrhIdRef

CanIfHr hCfg_Rx_Message1

关联到对 应的Hrh(本章节步骤⑧创建)

CanIfRxPduRef

CAN_Rx_Message1

关联到EcuC中定义的pdu,此 处命名规则为XXX(报文名)

../../_images/image3213.png

图 5‑17 模块配置-15

用同样的方法配置CanIfRxPduCfg_Rx_Message2

../../_images/image3312.png

图 5‑18 模块配置-16

  1. 新建2个CanIfTxPduCfg,并修改名字。每个接收报文需要在CanIf中配置对应的CanIfTxPduCfg。报文CAN_Tx_Message1对应的CanIfTxPduCfg参数配置如下:

表 5‑3

参数名

设置值

说明

CanIfTxPduCanId

0x100

CAN ID

CanIfTxPduCanIdType

STANDARD_CAN

帧类型:标准帧

CanIfTxPduType

STATIC

静态CAN ID

CanIfTxPdu UserTxConfirmationUL

PDUR

报文发送成功确 认通知传递给PDUR模块

CanIfTxPduBufferRef

C anIfHthCfg_Tx_Message1

关联到对应HtH

CanIfTxPduRef

CAN_Tx_Message1

关联到EcuC中的Pdu

../../_images/image3411.png

图 5‑19 模块配置-17

用同样的方法配置CanIfTxPduCfg_Tx_Message2

../../_images/image3511.png

图 5‑20 模块配置-18

  1. 校验配置,无错误信息,即配置完成。

EcuC模块配置

  1. 双击EcuC模块,打开EcuC模块的配置界面。

../../_images/image3611.png

图 5‑21 EcuC配置-1

  1. 右击EcucConfigSets新建EcucConfigSet,右击EcucConfigSet新建EcucPduCollections,右击EcucPduCollections新建EcucPduCollection,右击EcucPduCollections新建MetaDataTypes和Pdus,MetaDataTypes保持默认。

  2. 新建8个Pdu并修改名字,配置报文方向和报文长度。

注意:

此处配置pdu为两组,命名需要分开,方便后续配置需要使用。推荐规则为Com_XXX和XXX两种(XXX代表报文名)。

../../_images/image3711.png

图 5‑22 EcuC配置-2

  1. 其他页面保持默认即可。

Com模块配置

  1. 双击Com模块,打开Com模块的配置界面。

../../_images/image385.png

图 5‑23 Com配置-1

  1. ComSupportedIPduGroups填写数目,且与ComIPduGroup数量保持一致,其他配置选择默认。

../../_images/image395.png

图 5‑24 Com配置-2

  1. 选择ComConfig页面配置,新建目标数量的ComIPdu、ComIPduGroup、ComSignal并修改名称。

发送ComIPdu的属性配置如图。

接收ComIPdu的属性配置ComIPduDirection为RECEIVE和ComIPduGroupRef新建选择ComIPduGroup_Rx。

../../_images/image404.png

图 5‑25 Com配置-3

  1. 选中ComIPdu,配置发送ComIPdu的属性配置如图。

接收ComIPdu的属性配置ComIPduDirection为RECEIVE和ComIPduGroupRef新建选择ComIPduGroup_Rx。

注意:ComPduIdRef选择Com_XX的相应报文,此处对应EcuC的配置。

ComIPduSignalRef需要新建选择该报文所包含的所有信号。

../../_images/image4112.png

图 5‑26 Com配置-4

../../_images/image4212.png

图 5‑27 Com配置-5

  1. 在发送IPDU新建ComTxIPdu,配置ComMinimumDelayTime为0.005s,其他保持默认。

在接收IPDU中不需要新建ComTxIPdu。

../../_images/image4311.png

图 5‑28 Com配置-6

  1. 在发送ComTxIPdu新建ComTxModeTrue,按照需求选择ComTxModeMode为周期、事件或者混合型发送模式此处为周期型发送,ComTxModeNumberOfRepetitions、ComTxModeRepetitionPeriod、ComTxModeTimeOffset和ComTxModeTimePeriod按照不同发送模式配置具体请参照需求设置。

../../_images/image4411.png

图 5‑29 Com配置-7

  1. 选定信号后设置ComBitPosition、ComBitSize、ComSignalEndianness、ComSignalInitValue、ComSignalType和ComTransferProperty等参数。ComTransferProperty的配置,需要考虑与IPDU发送模式相配合从而实现相应的发送类型,此处为周期报文选择PENDING。

../../_images/image4511.png

图 5‑30 Com配置-8

  1. ComTimeBase配置保持默认。

../../_images/image4610.png

图 5‑31 Com配置-9

PduR模块配置

  1. 双击PduR模块,打开PduR模块的配置界面,PduRGeneral保持默认配置。

../../_images/image475.png

图 5‑32 PduR配置-1

  1. 打开PduRBswModules新建PduRBswModules_CanIf和PduRBswModules_Com,PduRBswModuleRef分别选择CanIf和Com,其他配置保持默认。

../../_images/image484.png

图 5‑33 PduR配置-2

  1. 打开PduRRoutingTables新建一个PduRRoutingTable,再PduRRoutingTable中新建PduRRoutingPath如图。

../../_images/image494.png

图 5‑34 PduR配置-3

  1. 找到并选中PduRDestPdu,配置右边PduRDestPduRef。

注意:

接收报文PduRDestPduRef选择Com_XXX(此处对应EcuC的配置);

发送报文PduRDestPduRef选择XXX(此处对应EcuC的配置);

如下图为发送报文配置目标pdu。

../../_images/image503.png

图 5‑35 PduR配置-4

  1. 找到并选中PduRSrcPdu,配置右边PduRSrcPduRef。

注意:

接收报文PduRSrcPduRef选择XXX(此处对应EcuC的配置);

发送报文PduRDestPduRef选择Com_XXX(此处对应EcuC的配置);

如下图为发送报文配置源pdu。

../../_images/image5112.png

图 5‑36 PduR配置-5

CanSM模块配置

  1. 找到并选中CanSMManagerNetwork,配置右边CanSMComMNetworkHandleRef此配置与ComM模块关联。

../../_images/image5212.png

图 5‑37 CanSMp配置-1

  1. 找到并选中CanSMController,配置右边CanSMControllerId此配置与CanIf模块关联。

../../_images/image5311.png

图 5‑38 CanSMp配置-2

ComM模块配置

  1. 找到并添加ComMUser

../../_images/image5411.png

图 5‑39 ComM模块配置-1

  1. 修改ComMChannel,配置右边ComMBusType为COMM_BUS_TYPE_CAN

../../_images/image5510.png

图 5‑40 ComM模块配置-2

  1. 找到ComMNetworkManagement配置,ComMNmVariant设置为NONE

../../_images/image564.png

图 5‑41 ComM模块配置-3

  1. 找到ComMUserPreChannels配置,将之前配置的user关联到channel

../../_images/image574.png

图 5‑42 ComM模块配置-4

源代码集成

项目交付给用户的工程结构如下:

../../_images/image584.png

图 5‑43 交付工程

  • BSW目录,这个目录放置所有基础软件相关代码,除了MCAL、Config文件夹之外,均按bsw源码路径放置

  • ASW目录,存放应用代码

  • Config目录,存放mcal和bsw生成的动态代码。

  • MCAL目录,存放mcal的静态代码

通信栈源代码集成步骤如下:

  1. 将5.2章节中EB MCAL生成的CAN模块配置文件和ORIENTAIS Configurator生成的配置文件复制到Config/BSW_Config文件夹中。

  2. 将MCAL提供的CAN模块源码和项目提供的通信栈源代码文件复制到BS W和MCAL文件夹中。

通信栈调度集成

通信栈调度集成步骤如下:

  1. 通信栈调度集成,需要逐一排查并实现表 5‑5通信栈集成约束清单 所罗列的问题,以避免集成出现差错。

  2. 编译链接代码,将生成的elf文件烧写进芯片。

通信栈有关的代码,在下方的main.c文件中给出重点标注。

注意 : 本示例中,通信栈初始化的代码和启动通信的代码置于main.c文件,并不代表其他项目同样适用于将其置于main.c文件中。

#include <machine/wdtcon.h>

#include “Mcu.h”

#include “Port.h”

#include “Can_17_MCanP.h”

#include “CanIf.h”

#include “Com.h”

#include “PduR.h”

#include “ComM.h”

#include “CanSM.h”

#include “ComM_EcuMBswM.h”

int main(void)

{

/*Initialize ECUM Module*/

EcuM_Init(&EcuM_ConfigAlternative[0]);

/*Initialize FlsLoader*/

FlsLoader_Init(NULL_PTR);

/*Dem module Pre_Init*/

Dem_PreInit();

Can_17_MCanP_Init(&Can_17_MCanP_ConfigRoot[0]);

CanIf_Init(&CanIf_InitCfgSet);

PduR_Init(&PduR_PBConfigData);

Com_Init(&Com_PBConfigData);

CanSM_Init(&CanSM_Config);

Com_IpduGroupVector ipduGroupVector;

Com_SetIpduGroup(ipduGroupVector, ComIPduGroup_CAN_Rx,TRUE);

Com_SetIpduGroup(ipduGroupVector, ComIPduGroup_CAN_Tx,TRUE);

Com_ReceptionDMControl(ipduGroupVector);

Com_IpduGroupControl(ipduGroupVector,TRUE);

ComM_RequestComMode(ComMChannel_0, COMM_FULL_COMMUNICATION);

ComM_CommunicationAllowed(ComMUser_0, TRUE);

Gpt_EnableNotification(GptConf_GptChannel_Gpt_1ms);

Gpt_StartTimer(GptConf_GptChannel_Gpt_1ms, 100000);

/* infinite loop */

while (1)

{

if(Gpt_5msFlag == TRUE)

{

/* please insert your code here … */

uint64 u8_test = 0;

ComM_ModeType can_BusMode = COMM_NO_COMMUNICATION;

CanSM_MainFunction();

ComM_MainFunction_ ComMChannel_0();

ComM_GetCurrentComMode(ComMUser_0,&can_BusMode);

if (COMM_FULL_COMMUNICATION == can_BusMode)

{

Com_MainFunctionRx();

Com_MainFunctionRouteSignals();

/* Test Code */

if (TRUE == CAN_Rx_Message1_Signal1_Recevive_Flag)

{

CAN_Rx_Message1_Signal1_Recevive_Flag = FALSE;

Com_ReceiveSignal(CAN_Rx_Message1_Signal1,&u8_ComTest);

Com_SendSignal(CAN_Tx_Message1_Signal1,&u8_ComTest);

Com_ReceiveSignal(CAN_Rx_Message1_Signal2,&u8_ComTest);

Com_SendSignal(CAN_Tx_Message1_Signal2,&u8_ComTest);

Com_ReceiveSignal(CAN_Rx_Message1_Signal3,&u8_ComTest);

Com_SendSignal(CAN_Tx_Message1_Signal3,&u8_ComTest);

Com_ReceiveSignal(CAN_Rx_Message1_Signal4,&u8_ComTest);

Com_SendSignal(CAN_Tx_Message1_Signal4,&u8_ComTest);

}

if (TRUE == CAN_Rx_Message2_Signal1_Recevive_Flag)

{

CAN_Rx_Message2_Signal1_Recevive_Flag = FALSE;

Com_ReceiveSignal(CAN_Rx_Message2_Signal1,&u8_ComTest);

Com_SendSignal(CAN_Tx_Message2_Signal1,&u8_ComTest);

}

Com_MainFunctionTx();

}

}

return 1;

}

验证结果

根据集成目标,共配置了4个报文,其中1个周期发送报文,1个触发发送报文,还有2个与发送报文信号配置一致的接收报文。

  1. 系统启动后有一个报文发送(CAN_Tx_Message1),ID 0x100,周期50ms,初始化值和设置一致

../../_images/image594.png

图 5‑44 验证结果-1

  1. 本地发送一帧ID为0x120的报文(CAN_Rx_Message1)后,发送报文0x100(CAN_Tx_Message1)的值发生变化

../../_images/image603.png

图 5‑45验证结果-2

  1. 本地发送一帧ID为0x125的报文(CAN_Rx_Message2)后,开发板发送一帧ID为0x105的报文(CAN_Tx_Message2)

../../_images/image6112.png

图 5‑46验证结果-3