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

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

3天内不再提示

AT32讲堂044 | AT32 MCU CAN入门指南

雅特力 AT32 MCU 2023-01-16 11:06 次阅读

CAN概述

CAN是Controller Area Network的缩写(以下称为CAN),它的设计目标是以最小的CPU负荷来高效处理大量的报文。1986年德国电气BOSCH公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO11898及ISO11519进行了标准化,现在在欧洲已是汽车网络的标准协议。现在,CAN的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。CAN协议特点:

  • 多主控制:在总线空闲时,所有节点均可发送信息。如果出现两个及以上节点同时开始发送信息时,总线会根据标识符(Identifier以下称为ID)进行仲裁,ID越小则优先级高,则仲裁优胜,仲裁优胜的节点继续发送,仲裁失利的节点立即转入接收状态。需注意,ID并不是表示节点地址,而是指示所发送的报文的优先级。
  • 系统的灵活性:如上所述,与CAN总线的各节点没有类似于“地址”的信息。因此在总线上增减节点时,连接在总线上的其它节点的软硬件设计均不受影响。
  • 高可靠性:CAN协议具有错误检测、错误通知、故障封闭和错误恢复功能。CAN总线上的任意节点均可检测错误(错误检测);检测到错误后向总线发送错误帧以通知其他节点(错误通知);同时每个节点内部有一个错误计数功能,每次检测到错误之后,错误计数值累加,当某节点持续错误导致计数连续累加,直到大于256后,此故障节点从总线上断开,避免影响其他节点(故障封闭)。且发送节点如果在发送信息的过程中检测到错误,待错误结束后会自动重发此信息直到成功发送(错误恢复)。
  • 通信速度较快,通信距离远:最高1Mbps(距离小于40m),最远可达10km(速率低于5Kbps)。
  • 可连接节点多:CAN总线是可同时连接多个节点。节点数量理论上是没有限制的。但实际上节点数量受总线时间延迟及电气负载的限制。降低通信速度,可连接的节点数增加;提高通信速度,则可连接的节点数减少。

正是因为CAN协议的这些特点,使得CAN特别适合工业过程监控设备的互连,因此,越来越受到工业界的重视,并已公认为最有前途的现场总线之一。CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。本文例程使用的是1Mbps的通信速率,使用的是ISO11898标准。

CAN协议介绍

本章主要介绍CAN的网络拓扑结构、总线物理层特性、帧类型、帧结构、位填充机制、位格式、同步机制、仲裁机制、错误处理机制等。另外还有CAN协议的更多细节请参考BOSCH CAN协议,本文不再详述。

CAN网络拓扑结构

如下图1:CAN总线由两条差分线CANH和CANL组成,各个节点通过较短的支线接入CAN总线。各节点从通信协议而言是没有主从和地址区分的,每个节点均可以平等的收发数据。另外,在CAN总线的两端各有一个120Ω的终端电阻,来做阻抗匹配,以减少回波反射。图1 CAN网络拓扑结构3d82801e-9419-11ed-ad0d-dac502259ad0.png

CAN总线物理层特性

如下图2:显性电平对应逻辑“0”,CANH和CANL压差2.5V左右。而隐性电平对应逻辑“1”,CANH和CANL压差为0V。在总线上,显性电平具有优先权,只要有一个节点输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的节点都输出隐性电平,总线上才为隐性电平。图2 CAN总线电平特性3d90d7cc-9419-11ed-ad0d-dac502259ad0.png

帧类型

如下表1,CAN包含了以下5种帧类型。其中数据帧和远程帧由用户控制收发;错误帧、过载帧和间隔帧是CAN总线上各节点硬件根据对应状态发送,用户不能也无需控制。表1 CAN帧类型3db5c122-9419-11ed-ad0d-dac502259ad0.png如下图3,包含了各类型帧结构示意。图3 CAN各帧类型3dd98170-9419-11ed-ad0d-dac502259ad0.png

帧结构

本文仅对标准数据帧进行详细介绍,其他帧类型可参考图3与标准数据帧进行对比理解。一帧标准数据帧包含如下部分:帧起始:为1bit显性位。由于CAN总线空闲时是隐性电平,帧起始的显性位用于提示总线上的节点“一帧信息传输开始了”。仲裁段:表示该帧优先级的段,包含标识符和帧类型(数据/远程帧)。控制段:表示数据的字节数、标识符类型(标准/扩展标识符)及保留位的段。数据段:数据,一帧可发送0~8个字节的数据(数据长度根据控制段的DLC决定)。CRC段:发送节点将CRC计算区域(不包含填充位)进行CRC计算后放入CRC段发送。接收节点也对CRC计算区域进行CRC计算,并与收到的CRC域进行对比,若CRC对比结果有误则向总线发送错误帧,若对比结果正确则随后发送应答。ACK段:含应答位(ACK SLOT)和应答间隔符(ACK DELIMITER)。发送节点在ACK段均发送隐性电平;接收节点如果在接收过程中没有检测到错误,则在应答位输出1bit显性电平,以通知发送节点“这帧数据被正确的接收了”。帧结束:表示数据帧结束的段,为7bit隐性电平。图4 CAN标准数据帧3de8d602-9419-11ed-ad0d-dac502259ad0.png

位填充

由于CAN总线只有CANH/CANL两条差分线,没有CLK线来做同步,所以CAN是直接通过数据流中间的跳变沿来做同步的(参考下文同步机制)。而为了避免数据流中出现大段没有跳变沿的情况,CAN加入了“位填充”机制。即发送器只要检测到位流里有5个连续相同值的位,便自动在位流里插入一相反电平的填充位。例如,原始数据流为“0000000111110001…”,经过位填充后实际输出到CAN总线的数据流为“000001001111100001…”,加下划线的位即为填充位。位填充的范围为帧起始(SOF)~CRC域(不含CRC间隔符),参考上图4。

位格式

AT32的CAN一个bit可分为3段:

  • 同步段(SYNC_SEG)
  • 位段1(BIT SEGMENT 1),包括CAN标准里的PROP_SEG和PHASE_SEG1,记为BSEG1。
  • 位段2(BIT SEGMENT 2),即CAN标准里的PHASE_SEG2,记为BSEG2。

这些段又由Time Quantum(以下称为Tq)的最小时间单位构成。1位分为3个段,每个段又由若干个Tq构成,这称为位时序。1位由多少个Tq构成、每个段又由多少个Tq构成等,可以任意设定位时序。用户通过设定位时序和Tq长度来设定CAN的波特率和采样点。关于波特率和采样点设置,后文详细介绍。各段作用及AT32的CAN可配置的Tq数见下表2:表2 位的各段的作用3e1992ba-9419-11ed-ad0d-dac502259ad0.png如下图5,同步段、位段1和位段2组成一个bit。BSEG1和BSEG2段交界处为采样点,即接收节点采样的时间点。图5 位时序3e42b1fe-9419-11ed-ad0d-dac502259ad0.png

同步机制

硬同步(HARD SYHCHRONIZATION):硬同步后,内部的位时间从同步段重新开始。因此,硬同步强迫由硬同步引起的沿处于重新开始的位时间同步段之内。即下图6的理想跳变沿情况。重新同步跳转宽度(RESYHCHRONIZATION JUMP WIDTH):重新同步的结果,使位段1增长,或使位段2缩短。位段增长或缩短的数量有一个上限,此上限由重新同步跳转宽度给定。重新同步跳转宽度应设置于1~4Tq之间。如下图6:当在BSEG1段检测到下降沿,则BSEG1段增长Tdelay,当前bit整体增长Tdelay,其中Tdelay<=重新同步跳转宽度。当在BSEG2段检测到下降沿,则BSEG2段缩短Tadvance,当前bit整体缩短Tadvance,其中Tadvance<=重新同步跳转宽度。图6 重同步跳跃3e568350-9419-11ed-ad0d-dac502259ad0.png

仲裁机制

只要总线空闲,任何单元都可以开始发送报文。如果2个或2个以上的单元同时开始传送报文,那么就会有总线访问冲突。通过对ID进行逐位仲裁可以解决这个冲突。仲裁的机制确保了报文和时间均不损失。当具有相同ID的数据帧和远程帧同时初始化时,数据帧优先于远程帧。仲裁期间,每一个发送节点都对发送位的电平与被监控的总线电平进行比较。如果电平相同,则这个节点可以继续发送。如果发送的是一“隐性”电平而监测到是一“显性”电平(见总线电平),那么该节点就失去了仲裁,必须立即退出发送状态并转入接收状态。例如下图7,节点1和节点2同时发送一帧数据,ID段前几bit相同。直到红色处,节点1发送隐性电平“1”,节点2发送显性电平“0”。此时节点2仲裁优胜,继续发送,总线电平和节点2发送值一致;而节点1仲裁失利,在下一bit转入接收,后续节点1的发送引脚保持隐性电平。图7 仲裁机制

3e79e0ca-9419-11ed-ad0d-dac502259ad0.png

错误处理机制

错误类型

CAN协议定义了以下5种不同的错误类型:

  • 位错误(Bit Error)单元在发送位的同时也对总线进行监视。如果所发送的位值与所监视的位值不相符合,则在此位时间里检测到一个位错误。AT32将位错误细分为显性位错误(发送显性位但检测到隐性位)和隐性位错误(发送隐性位但检测到显性位)。CAN节点在发送状态会出现此类错误。但是在仲裁场(ARBITRATION FIELD)的填充位流期间或应答间隙(ACK SLOT)发送一“隐性”位的情况是例外的——此时,当监视到一“显性”位时,不会发出位错误。当发送器发送一个被动错误标志但检测到“显性”位时,也不视为位错误。
  • 位填充错误(Stuff Error)如果在使用一帧报文的位填充区域(参考图4的“位填充区域”)检测到6个连续相同的位电平时,将检测到一个位填充错误。CAN节点在接收状态会出现此类错误。
  • CRC错误(CRC Error)CRC序列包括发送器的CRC计算结果。接收器计算CRC的方法与发送器相同。如果计算结果与接收到CRC序列的结果不相符,则检测到一个CRC错误。CAN节点在接收状态会出现此类错误。
  • 格式错误(Form Error)当一个固定形式的位场含有1个或多个非法位,则检测到一个格式错误。例如在CRC间隔符/ACK间隔符的位场检测到显性位,则会检测到格式错误。例外:接收器的帧末尾最后一位期间的显性位不被当作帧错误。CAN节点在接收状态会出现此类错误。
  • 应答错误(Acknowledgment Error)只要在应答位(ACK SLOT)期间所监测的位不为“显性”,则发送器会检测到一个应答错误。CAN节点在发送状态会出现此类错误。

错误状态CAN节点检测到错误之后,根据不同状态和错误类型会对发送错误计数器(TEC[7:0])/接收错误计数器(REC[7:0])进行加1或加8(具体增加规则请参考BOSCH CAN协议),每正确的发送/接收一帧数据后,发送/接收错误计数器减1。因此发送/接收错误计数器值表明了CAN节点和网络的稳定程度。根据发送/接收错误计数器值,一个节点的状态会处于以下三种之一:

  • 错误主动“错误主动”的节点可以正常地参与总线通讯并在错误被检测到时发出主动错误标志(6个显性位)。见下图8,TEC<128且REC<128即为错误主动状态。
  • 错误被动“错误被动”的节点可参与总线接收和发送数据/远程帧。但检测到错误时只能发送错误被动标志(6个隐形位)。见下图8,255≥TEC>128且255≥REC>128即为错误被动状态。
  • 离线“离线”的节点相当于直接从CAN总线断开,不能收/发任何信息。见下图8,TEC>255即为离线状态。

AT32离线管理:AT32 CAN从离线状态恢复分两种情况:1)当CAN主控制寄存器(CAN_MCTRL)AEBOEN位为‘0’时,需要软件请求进入冻结模式,再请求退出冻结模式,然后在通信模式下等待CAN节点RX检测到128次11个连续隐性位,随后该节点会从离线状态恢复。2)当AEBOEN位为‘1’时,通信模式下CAN节点RX检测到128次11个连续隐性位,就自动从离线状态恢复。图8 错误状态3e8cbcd6-9419-11ed-ad0d-dac502259ad0.png

AT32的CAN

AT32的CAN支持标准CAN协议2.0A和2.0B。且在兼容标准CAN协议的基础上增加了一些功能和可配置选项。其中CAN2.0A和2.0B的主要差别在于:CAN 2.0A仅支持11bitID,即只支持标准帧;CAN2.0B支持11bit/29bitID,即支持标准帧和扩展帧。本章节主要介绍AT32 CAN的主要设计结构和使用,介绍了AT32 CAN的正常通信流程,包括发送流程、接收流程、报文过滤、波特率及采样点设置等。其他AT32 CAN相关设计,例如错误管理、中断管理等,请参考RM相关章节。

整体功能介绍

随着CAN网络节点和报文数量的增加,需要一个增强的过滤机制处理各种类型的报文,减少接收报文的处理时间,采用FIFO的方案,使得CPU可以长时间处理应用层任务而不会丢失报文。同时发送报文由硬件控制发送优先级顺序。基于以上考虑,CAN控制器提供28组位宽可配置的标识符过滤器组,2个接收FIFO,每个FIFO都可以存放3个完整的报文。共有3个发送邮箱,发送调度器决定发送优先级顺序。整个收发过程完全由硬件管理,无需占用CPU资源。图9 AT32 CAN整体功能介绍3ea39550-9419-11ed-ad0d-dac502259ad0.png

CAN发送流程

CAN发送流程见下图10和以下的步骤:用户使用时只需操作1)~3)。4)~7)由硬件自动完成,无需用户代码参与,不占用CPU资源。1)程序选择1个空置的邮箱(发送邮箱空标志TMxEF=1)2)将需要发送的报文写入对应的空邮箱。报文内容包含:ID、帧类型、数据长度和发送数据等3)请求发送:将CAN_TMIx的TMSR位置14)邮箱挂号(等待成为最高优先级)5)预定发送(等待总线空闲)6)发送7)邮箱空置注:以上步骤1)~7)只简单介绍正常发送流程,下图10中还包含取消发送、发送失败、自动/不自动重传等情况,可参考RM文件报文发送一节,这里不再详述。下图10中标志位和操作位说明如下:TMxTCF:请求完成标志位(发送/中止请求)TMxTSF:发送成功标志位TMxEF:发送邮箱空标志位TMSR:请求发送TMxCT:中止发送PRSFEN:禁止自动重传(PRSFEN=1时,禁止自动重传;PRSFEN=0时,自动重传直到发送成功)图10 CAN发送流程3ec90f1a-9419-11ed-ad0d-dac502259ad0.png

CAN接收流程

CAN常用接收流程如下,即下图11的“空”和“挂号_1”两个状态间循环:1)FIFO空2)收到有效报文3)进入“挂号_1”状态(FIFO内有1条有效报文的状态)4)读取有效报文:读取接收邮箱寄存器(CAN_RFIx,CAN_RFCx,CAN_RFDTLx,CAN_RFDTHx)。5)释放邮箱:CAN_RFx寄存器RFxR位置1。注:用户使用时只需操作4)~5)。1)~3)由硬件自动完成,无需用户代码参与,不占用CPU资源。

有效报文:

当报文被正确接收(直到EOF域的最后一位都没有错误),且通过了标识符过滤,那么该报文被认为是有效报文。过滤器相关介绍见下一节。而如果接收过程中用户不参与操作(即不去读取有效报文和释放邮箱),硬件流程如下:1)收到有效报文2)进入“挂号_1”状态(FIFO内有1条有效报文的状态)3)收到有效报文4)进入“挂号_2”状态(FIFO内有2条有效报文的状态)5)收到有效报文6)进入“挂号_3”状态(FIFO内有3条有效报文的状态)7)收到有效报文8)进入“溢出”状态(FIFO内有3条有效报文,丢失了一条报文,溢出标志置起)

下图11中标志位和操作位说明如下:

RFxMN:FIFO内有效报文数量(取值0~3)RFxOF:溢出标志位RFxR:释放邮箱图11 CAN接收流程3ee3e718-9419-11ed-ad0d-dac502259ad0.png

过滤器

在CAN协议里,报文的ID不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据ID的值决定软件是否需要该报文;如果需要,就存到接收FIFO里,用户可通过软件读取接收邮箱寄存器获取该报文;如果不需要,报文就被丢弃且无需软件的干预。为满足这一需求,AT32CAN控制器为应用程序提供了28个硬件过滤器组(AT32F435系列有28个过滤器组,0~27;但AT32F403A等系列只有14个过滤器组,0~13。具体请参考相应型号的RM),以便只接收那些软件需要的报文。用户配置好需要的ID后,整个过滤过程无需软件参与,不占用CPU资源。

过滤器的位宽

每个过滤器组由2个32bit的寄存器,CAN_FiFB1和CAN_FiFB2组成。通过配置CAN_FBWCFG寄存器的FBWSELx位,可以设置2个16位宽或者1个32位宽的过滤器。32位宽的过滤器寄存器CAN_FiFBx包括:一组SID[10:0]、EID[17:0]、IDT和RTR位。16位宽的过滤器寄存器CAN_FiFBx包括:两组SID[10:0]、IDT、RTR和EID[17:15]位。

过滤器模式

通过设置CAN_FMCFG寄存器的FMSELx位可以设置过滤器寄存器工作在标识符掩码模式或者标识符列表模式,掩码模式用来指定ID的哪些位需要与预设ID相同,哪些位无需比较,列表模式表示ID的每个位都必须与预设ID一致。两种模式与过滤器位宽配合使用,可以有以下四种过滤方式:图12 32位宽标识符掩码模式3eefca7e-9419-11ed-ad0d-dac502259ad0.png图13 32位宽标识符列表模式3f07ea3c-9419-11ed-ad0d-dac502259ad0.png图14 16位宽标识符掩码模式

3f1e3c7e-9419-11ed-ad0d-dac502259ad0.png

图15 16位宽标识符列表模式3f357f92-9419-11ed-ad0d-dac502259ad0.png更多CAN过滤器说明,例如CAN过滤器匹配序号,优先级规则等可参考RM文件报文过滤一节,这里不再详述。过滤器配置流程见后文案例介绍--CAN接收过滤器使用。

CAN波特率及采样点计算

如前文CAN位格式一节所述,CAN的一个bit被分为几段。其中第一段同步段(SYNC_SEG)固定为1Tq,1Tq的长度由CAN位时序寄存器(CAN_BTMG)的分频系数BRDIV[11:0]位定义;位段1(BSEG1)通过配置CAN位时序寄存器的BTS1[3:0]位,可设定为1~16Tq;位段2(BSEG2)通过配置CAN位时序寄存器的BTS2[2:0]位,可设定为1~8Tq。用户通过配置CAN时序寄存器,可设置CAN波特率和采样点,整个CAN总线上各节点的波特率和采样点一致最佳,不过由于各节点主频可能不一样,所以比较难保证波特率和采样点均一致。用户使用时应首先保证波特率一致,采样点尽量保持在较小的偏差范围内,这样CAN总线可以支持更多的节点和更长的线路。波特率计算公式其中3f473d86-9419-11ed-ad0d-dac502259ad0.png例如,bsp例程project\at_start_f437\examples\can\communication_mode:APB时钟:APB1_CLK=144MHZCAN分频系数:BRDIV=12此时1Tq=1/(144MHZ/12)=(1/12)us同步段:SYNC_SEG=1Tq(固定不变,无需用户配置)位段1:BSEG1=8Tq(BTS1[3:0]=7)位段2:BSEG2=3Tq(BTS2[2:0]=2)此时Nomal Bit Timimg=1Tq*(SYNCSEG+BSEG1+BSEG12)=1us此时BaudRate=1/(Nomal Bit Timimg)=1/1us=1Mbps采样点计算公式sample point=(SYNC_SEG+BSEG1)/(SYNC_SEG+BSEG1+BSEG12)举例同上:此时sample point=(1+8)/(1+8+3)=75%关于采样点设置,CAN协议并没有明确规定,但根据各厂商CAN设备使用习惯,采样点设置建议如下表3:表3 采样点设置建议3f588b2c-9419-11ed-ad0d-dac502259ad0.png波特率计算工具为方便用户波特率设定,本文介绍一个AT专用波特率计算工具:3f74ae88-9419-11ed-ad0d-dac502259ad0.png使用步骤如下:1) 波特率设定:高速CAN波特率最大为1M,各厂商CAN设备常用波特率为125K、250K、333K、500K、1M等。用户可根据需要设定波特率。参考下图16“波特率(Kbit/S)”。2) CAN时钟源频率设定:参考下图16“PCLK1(MHZ)”。3) 采样位置设置:设置完波特率后,计算工具会自动填入一个推荐的采样位置值。若实际项目中无具体限定,可保持默认设定;若项目中有具体限定,根据需求更改即可。参考下图16“采样位置(%)”。4) 波特率偏差设定:建议在不勾选“允许波特率偏差”项,仅在没有符合要求的计算结果时,再勾选此项。由于同一CAN网络的节点波特率有误差会增大通信错误几率,建议“偏差”值设置尽量小。参考下图16“允许波特率偏差”和“偏差”。5)波特率配置结果选择:根据以上设定即可计算出多组结果。在页面左下角选择一项计算结果,即会在页面右下角显示对应软件代码配置,点击“复制全部”即可获得对应代码。图16 波特率配置工具3f91aa4c-9419-11ed-ad0d-dac502259ad0.png

案例1 CAN正常通信-normal模式

注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

功能简介

实现两个CAN节点之间收发通信。

资源准备

1) 硬件环境:两套对应产品型号的AT-START BOARD+CAN电平转化器程序设计以bsp demo为例:CAN1_TX(PB9)连接电平转换器的TXD;CAN1_RX(PB8)连接电平转换器的RXD;两个CAN节点的电平转换器的CANH和CANL分别相连。CAN电平转换器硬件设计可参考下图:图17 CAN电平转换器硬件设计3fa240c8-9419-11ed-ad0d-dac502259ad0.png2) 软件环境:project\at_start_f435\examples\can\communication_mode

软件设计

1) 配置流程

  • 配置CAN1 TX和RX pin对应的GPIO引脚
  • 配置CAN基础选项
  • 配置CAN波特率
  • 配置CAN过滤器
  • 配置CAN中断

2) 代码介绍

  • main函数代码描述

3fcae5dc-9419-11ed-ad0d-dac502259ad0.png

  • CAN配置函数代码描述

3fe0acfa-9419-11ed-ad0d-dac502259ad0.png

  • CAN发送函数代码描述

40348186-9419-11ed-ad0d-dac502259ad0.png

  • CAN接收中断函数代码描述

4054da8a-9419-11ed-ad0d-dac502259ad0.png

  • GPIO配置函数代码描述

406d9200-9419-11ed-ad0d-dac502259ad0.png

实验效果

  • 如若数据传输无误,两块AT-START BOARD的LED2均会闪烁以指示收到ID=0x400的标准帧数据;LED4会持续闪烁以指示程序正常运行。

案例2 CAN接收过滤器使用

注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

功能简介

实现报文过滤:接收需要的报文,丢弃不需要的报文。

资源准备

1) 硬件环境:两套对应产品型号的AT-START BOARD+CAN电平转化器程序设计以bsp demo为例:CAN1_TX(PB9)连接电平转换器的TXD;CAN1_RX(PB8)连接电平转换器的RXD;两个CAN节点的电平转换器的CANH和CANL分别相连。CAN电平转换器硬件设计可参考下图:图18 CAN电平转换器硬件设计409bccd8-9419-11ed-ad0d-dac502259ad0.png2) 软件环境:project\at_start_f435\examples\can\filter

软件设计

1) 配置流程

  • 配置CAN1 TX和RX pin对应的GPIO引脚
  • 配置CAN基础选项
  • 配置CAN波特率
  • 配置CAN过滤器
  • 配置CAN中断

2) 代码介绍

  • 设定可通过过滤的ID

40b438b8-9419-11ed-ad0d-dac502259ad0.png

  • main函数代码描述

40d2ba22-9419-11ed-ad0d-dac502259ad0.png

  • CAN配置函数代码描述

410d623a-9419-11ed-ad0d-dac502259ad0.png

  • CAN发送函数代码描述

4192f3b4-9419-11ed-ad0d-dac502259ad0.png

  • CAN接收中断函数代码描述

41bcff2e-9419-11ed-ad0d-dac502259ad0.png

  • GPIO配置函数代码描述

41eb2b60-9419-11ed-ad0d-dac502259ad0.png

实验效果

  • 如若数据传输无误,AT-START BOARD的LED2/3/4会翻转一次,以指示收到ID=FILTER_EXT_ID1,FILTER_EXT_ID2,FILTER_STD_ID1,FILTER_STD_ID2的4帧数据。

案例3 CAN调试-loopback模式

注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

功能简介

实现单板的环回模式通信。环回模式(loopback mode):环回模式可用于自测试。在环回模式下,CAN在内部把TX输出回馈到RX输入上,而完全忽略CAN_RX引脚的实际状态。因此此模式下CAN对应的GPIO引脚可以不配置,而如果对应的GPIO引脚配置了,发送的报文可以在CAN_TX引脚上检测到。见下图19。另外,为了避免外部的影响,在环回模式下CAN内核忽略确认错误(在数据/远程帧的确认位时刻,不检测是否有显性位)。平转换器硬件设计可参考下图:图19 CAN loopback模式420438c6-9419-11ed-ad0d-dac502259ad0.png

资源准备

1) 硬件环境:一块对应产品型号的AT-START BOARD2) 软件环境:project\at_start_f435\examples\can\loopback_mode

软件设计

1) 配置流程

  • 配置CAN1 TX和RX pin对应GPIO(loopback模式下,此项可忽略不配置)
  • 配置CAN基础选项
  • 配置CAN波特率
  • 配置CAN过滤器
  • 配置CAN中断

2) 代码介绍

  • main函数代码描述

4215bb8c-9419-11ed-ad0d-dac502259ad0.png

  • CAN配置函数代码描述

42426f60-9419-11ed-ad0d-dac502259ad0.png

  • CAN发送函数代码描述

42b469d0-9419-11ed-ad0d-dac502259ad0.png

  • CAN接收中断函数代码描述

42d2c4d4-9419-11ed-ad0d-dac502259ad0.png

  • GPIO配置函数代码描述

42e5b6ca-9419-11ed-ad0d-dac502259ad0.png

实验效果

  • AT-START BOARD的LED2会闪烁以指示收到自己发送的ID=0x400的标准帧数据;LED4会持续闪烁以指示程序正常运行。

关于雅特力雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器(MCU)创新趋势的芯片设计公司,专注于ARM Cortex-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM Cortex-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G物联网、消费、商务及工控等领域。

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

    关注

    146

    文章

    16984

    浏览量

    350243
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2715

    浏览量

    463338
收藏 人收藏

    评论

    相关推荐

    WinCC 7.5入门指南

    WinCC 7.5入门指南
    发表于 10-21 10:37 3次下载

    通用CAN芯片选型指南

    选择合适的CAN芯片对于确保系统性能至关重要。以下是一份通用的CAN芯片选型指南,旨在帮助工程师根据不同的应用需求选择合适的CAN芯片。
    的头像 发表于 10-12 14:11 364次阅读
    通用<b class='flag-5'>CAN</b>芯片选型<b class='flag-5'>指南</b>

    STM32转AT32代码转换

    1.引言在嵌入式开发中,我们经常会遇到更换单片机芯片的事情,若芯片是同一厂家的还好说,若是不同厂家的则需要重新写,重新调,重新去学习其底层驱动程序,比较费时费力。如:ST32转AT32、ST32转
    的头像 发表于 09-28 08:09 267次阅读
    STM32转<b class='flag-5'>AT32</b>代码转换

    AT32讲堂088 | 雅特力AT32F402/F405时钟配置

    简介时钟是芯片正确高效运行的基础,正确的时钟配置是芯片能正确运行的必要条件,其重要性不言而喻。AT32各系列产品的时钟配置部分可能存在细微的差异和需要注意的事项,本文档就着重针对各系列的情况来详细
    的头像 发表于 09-15 08:08 395次阅读
    <b class='flag-5'>AT32</b><b class='flag-5'>讲堂</b>088 | 雅特力AT32F402/F405时钟配置

    AT32讲堂087 | 雅特力AT32 IDE快速入门指南

    新建项目新项目向导AT32ID提供支持雅特力MCU的C语言项目模板,方便用户快速创建项目。菜单栏【File】>【New】>【CProject】。新建项目向导的对话框将出现。在对
    的头像 发表于 09-15 08:08 350次阅读
    <b class='flag-5'>AT32</b><b class='flag-5'>讲堂</b>087 | 雅特力<b class='flag-5'>AT32</b> IDE快速<b class='flag-5'>入门</b><b class='flag-5'>指南</b>

    MCAN(CAN FD)模块入门

    电子发烧友网站提供《MCAN(CAN FD)模块入门.pdf》资料免费下载
    发表于 09-14 10:08 0次下载
    MCAN(<b class='flag-5'>CAN</b> FD)模块<b class='flag-5'>入门</b>

    雅特力AT32 MCU的随机数生成

    概述产品和生态系统安全性的需求比以往任何时候都更加重要。真随机数是所有安全系统的核心,其质量会影响设计的安全性。因此在没有内置硬件TRNG的AT32的微控制器系列中,如何提高随机数的有效,来符合
    的头像 发表于 08-30 12:26 446次阅读
    雅特力<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>的随机数生成

    AT32讲堂085 | 雅特力AT32 MCU HICK时钟校准

    简介AT32系列MCU内部都有提供适合运行的内部高速时钟(HICK),其本质就是内置于芯片的RC振荡器。在25℃下,其典型值频率8MHz的精度由工厂校准到±1%,在-40到105℃,该内部高速时钟
    的头像 发表于 08-30 12:26 496次阅读
    <b class='flag-5'>AT32</b><b class='flag-5'>讲堂</b>085 | 雅特力<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b> HICK时钟校准

    HyperLynx入门指南

    HyperLynx入门指南
    发表于 05-06 10:17 4次下载

    雅特力AT32 MCU与SEGGER携手合作,开发量产事半功倍

    近日,雅特力与SEGGER共同宣布J-Link仿真调试器与Flasher在线烧录器全面支持AT32 MCU产品,SEGGER工具链的加持使AT32 MCU开发如虎添翼。 雅特力自201
    的头像 发表于 02-23 10:27 357次阅读

    AT32 定时器配置中pr和div的作用

    AT32定时器是51系列单片机中的一种定时器,可以实现多种定时功能。在AT32定时器中,pr和div是两个相关的参数,用于配置定时器的工作参数。 首先,需要了解pr和div分别代表什么含义。pr
    的头像 发表于 01-08 10:12 1227次阅读

    雅特力AT32 MCU HOGP开发指南

    HOGP概述HOGP(HIDoverGATT)是由BluetoothSIG维护的蓝牙配置文件规范,通过低功耗蓝牙实现HID的配置文件并作为与计算器之间的接口,消除HID中对电线或物理连接的需求。HID角色在HID中,以及在HOGP的延伸中,定义了两个角色,这些角色是HID主机和HID设备。HID设备一次只能主动连接到单个HID主机;然而一个HID主机可以连接
    的头像 发表于 12-30 08:14 608次阅读
    雅特力<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b> HOGP开发<b class='flag-5'>指南</b>

    润开鸿AT32开发平台通过OpenHarmony兼容性测评

    近期,江苏润开鸿数字科技有限公司(以下简称“润开鸿”)AT32开发平台通过OpenAtom OpenHarmony(以下简称\"OpenHarmony\")3.2.
    发表于 12-21 17:20

    润开鸿AT32开发平台通过OpenHarmony兼容性测评

    点击蓝字 ╳ 关注我们 开源项目 OpenHarmony 是每个人的 OpenHarmony 近期,江苏润开鸿数字科技有限公司(以下简称“润开鸿”)AT32开发平台通过OpenAtom
    的头像 发表于 12-20 21:10 656次阅读
    润开鸿<b class='flag-5'>AT32</b>开发平台通过OpenHarmony兼容性测评

    润开鸿AT32开发平台通过OpenHarmony兼容性测评

    近期,江苏润开鸿数字科技有限公司(以下简称“润开鸿”)AT32开发平台通过OpenHarmony3.2.Release版本兼容性测评,助力润开鸿基于该开发平台全新研发推出的行业终端设备顺利融入
    的头像 发表于 12-15 08:02 582次阅读
    润开鸿<b class='flag-5'>AT32</b>开发平台通过OpenHarmony兼容性测评