CAN文档
最近在搞stm32试验板的can现场总线试验,之前只是搞过STC51的串口通信,相比之下,觉察can总线都挺简单的。开头时,知道自己是新手,只知道can总线跟串行通信,485通信,I2C通信一样都是用来传输数据通信的,在该模式下,bxCAN的时钟停顿了,但软件仍旧可以访问邮箱存放器。
*当bxCAN处于睡眠模式,软件想通过对CAN_MCR存放器的INRQ位置1,来进入初始化式,那么软件必需同时对SLEEP位清0才行
*有2种方式可以唤醒(退出睡眠模式)bxCAN:通过软件对SLEEP位清0,或硬
件检测CAN总线的活动。
工作流程
那么毕竟can是怎样发送报文的呢?
发送报文的流程为:
应用程序选择1个空发送邮箱;设置标识符,数据长度和待发送数据;
然后对CAN_TIxR存放器的TXRQ位置1,来恳求发送。TXRQ位置1后,邮箱就不再是空邮箱;而一旦邮箱不再为空,软件对邮箱存放器就不再有写的权限。TXRQ位置1后,邮箱立刻进入挂号状态,并等待成为最高优先级的邮箱,参见发送优先级。一旦邮箱成为最高优先级的邮箱,其状态就变为预定发送状态。一旦CAN总线进入空闲状态,预定发送邮箱中的报文就立刻被发送(进入发送状态)。一旦邮箱中的报文被胜利发送后,它立刻变为空邮箱;硬件相应地对CAN_TSR存放器的RQCP和TXOK位置1,来说明一次胜利发送。
假如发送失败,由于仲裁引起的就对CAN_TSR存放器的ALST位置1,由于发送错误引起的
就对TERR位置1。
原来发送的优先级可以由标识符和发送恳求次序打算: 由标识符打算
当有超过1个发送邮箱在挂号时,发送挨次由邮箱中报文的标识符打算。依据CAN协议,标识符数值最低的报文具有最高的优先级。假如标识符的值相等,那么邮箱号小的报文先被发送。
由发送恳求次序打算
通过对CAN_MCR存放器的TXFP位置1,可以把发送邮箱配置为发送FIFO。在该模式下,发送的优先级由发送恳求次序打算。 该模式对分段发送很有用。
时间触发通信模式
在该模式下,CAN硬件的内部定时器被激活,并且被用于产生时间戳,分别存储在
CAN_RDTxR/CAN_TDTxR存放器中。内部定时器在接收和发送的帧起始位的采样点位置被采样,并生成时间戳(标有时间的数据)。
接着又是怎样接收报文的呢? 接收治理
接收到的报文,被存储在3级邮箱深度的FIFO中。FIFO完全由硬件来治理,从而节约了CPU
的处理负荷,简化了软件并保证了数据的全都性。应用程序只能通过读取
CAN文档 来自淘豆网m.daumloan.com转载请标明出处.