CAN通信三——正点原子资料(库函数)1版本1

来源:互联网 发布:java常用接口 编辑:程序博客网 时间:2024/06/05 15:06

本章,我们使用的是 450Kbps 的通信速率,使用的是 ISO11898 标准,
显性电平对应逻辑 0, CAN_H 和 CAN_L 之差为 2.5V 左右。而隐性电平对应逻辑 1, CAN_H 和 CAN_L 之差为 0V。在总线上显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。另外,在 CAN 总线的起止端都有一个 120Ω的终端电阻,来做阻抗匹配,以减少回波反射。

由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。
 同步段(SS)
 传播时间段(PTS)
 相位缓冲段 1(PBS1)
 相位缓冲段 2(PBS2)
这些段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成。
1 位分为 4 个段,每个段又由若干个 Tq 构成,这称为位时序。
1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定
位时序,多个单元可同时采样,也可任意设定采样点。

CAN的发送流程
(1)程序选择 1 个空置的邮箱(TME=1) 【1_空置:RQCP=X TXOK=X TME=1】
(2)设置标识符(ID)
(3)数据长度和发送数据
(4)设置 CAN_TIxR 的 TXRQ 位为 1,请求发送
(5)邮箱挂号(等待成为最高优先级)【2_挂号:RQCP=0 TXOK=0 TME=0】 
(6)预定发送(等待总线空闲)【3_预定:RQCP=0 TXOK=0 TME=0】 
(7)发送【4_发送:RQCP=0 TXOK=0 TME=0】
(8)邮箱空置。【5_发送成功后空置:RQCP=1 TXOK=1 TME=1】
OTHERS
(9) 不强制退出发送(ABRQ=1) 发送失败处理。

CAN接收到的有效报文,被存储在3级邮箱深度的FIFO中,FIFO完全由硬件来管理。
应用程序只能通过读取 FIFO
输出邮箱,来读取 FIFO 中最先收到的报文。这里的有效报文是指那些正确被接收的(直到 EOF
都没有错误)且通过了标识符过滤的报文。前面我们知道 CAN 的接收有 2 个 FIFO,我们每个
滤波器组都可以设置其关联的 FIFO,通过 CAN_FFA1R 的设置,可以将滤波器组关联到FIFO0/FIFO1。

原创粉丝点击