CAN总线通信详解

描述

一、CAN相关芯片

1.CAN控制器

2.CAN收发器:CAN收发器的作用是负责逻辑电平和信号电平之间的转换。

即从CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上,CAN总线上的节点都可以决定自己是否需要总线上的数据。

总线

二、CAN的配置

void CAN1_Config_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

CAN_InitTypeDef CAN_InitStructure;

CAN_FilterInitTypeDef CAN_FilterInitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

总线

总线

三、CAN波特率计算公式

总线

CAN波特率=系统时钟/分频数/(1*tq+tBS1+tBS2)

其中

tBS1=tq*(TS1[3:0]+1)

tBS2=tq*(TS2[2:0]+1)

tq=(BRP[9:0]+1)*tPCLK

这里tq表示1个时间单元

tPCLK=APB时钟的时间周期

BRP[9:0],TS1[3:0]和TS2[2:0]在CAN_BTR寄存器中定义

总体配置保持

tBS1>=tBS2,tBS2>=1个CAN时钟周期,tBS2>=2tSJW

四、CAN的发送与CAN的接收

1、发送过程:CAN控制器将CPU传来的信号转换为逻辑电平(即逻辑0-显性电平或者逻辑1-隐性电平)。CAN发射器接收逻辑电平之后,再将其转换为差分电平输出到CAN总线上。

总线

2、接收过程:CAN接收器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。

总线

五、STM32 CAN控制器简介-发送流程和接收流程

程序选择1个空置的邮箱(TME=1)->设置标识符(ID),数据长度和发送数据->设置CAN_TIxR的TXRQ位为1,请求发送->邮箱挂号(等待成为最高优先级)->预定发送(等待总线空闲)->发送->邮箱空置

总线

FIFO空->收到有效报文->挂号_1(存入FIFO的一个邮箱,这个由硬件控制,我们不需要理会)->收到有效报文->挂号_2->收到有效报文->挂号_3->收到有效报文->溢出。

CAN收到的有效报文,存储在3级邮箱深度的FIFO中。FIFO接收到的报文数,我们可以通过查询CAN_RFxR的FMP寄存器来得到,只要FMP不为0,我们就可以从FIFO读出收到的报文。

总线

  审核编辑:汤梓红

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分