您当前所在的位置: www.kashbet.net > 洗衣 > 正文

八)STM32的CAN模块尝试

发布时间:2019-05-13 浏览次数:

  的处置负荷,简化了软件并了数据的分歧性。使用法式只能通过读取FIFO输出邮箱,来读取FIFO中最先收到的报文。

  取得同步,即正在CANRX引脚上监测到11个持续的现性位(等效于总线空闲)后,bxCAN才能一般领受和发送报文。

  *当bxCAN处于初始化模式时,报文的领受和发送都被,而且CANTX引脚输呈现性位(高电平)

  *软件通过对CAN_MCR寄放器的SLEEP1,来请求进入这一模式。正在该模式下,bxCAN的时钟遏制了,但软件仍然能够拜候邮箱寄放器。

  工做流程大要就是这个样子,接着就是一大堆烦人的can寄放器,看了一遍总算有了大要的领会,何况这么多的寄放器要一下子把他们都记住是不成能的。按照以往的经验,只需用多几回,对寄放器的功能就能记住。

  过滤器初值的设置不需要正在初始化模式下进行,但必需正在它处正在非激活形态下完成(响应的FACT位为0)。而过滤器的位宽和模式的设置,则必需正在初始化模式下,进入一般模式前完成。

  共有14个位宽可变/可设置装备摆设的标识符过滤器组,软件通过对它们编程,从而正在引脚收到的报文当选择它需要的报文,而把其它报文丢弃掉。

  正在初始化完成后,软件该当让硬件进入一般模式,以便一般领受和发送报文。软件能够通过对CAN_MCR寄放器的INRQ位清0,来请求从初始化模式进入一般模式,然后要期待硬件对CAN_MSR寄放器的INAK1简直认。正在跟CAN

  CAN_RDTxR/CAN_TDTxR寄放器中。内部按时器正在领受和发送的帧起始位的采样点被采样,并生成时间戳(标有时间的数据)。

  ─ FIFO1领受到一个新报文,CAN_RF1R寄放器的FMP1位不再是00。

  *当bxCAN处于睡眠模式,软件想通过对CAN_MCR寄放器的INRQ1,来进入初始化式,那么软件必需同时对SLEEP位清0才行

  然后对CAN_TIxR寄放器的TXRQ1,来请求发送。TXRQ1后,邮箱就不再是空邮箱;而一旦邮箱不再为空,软件对邮箱寄放器就不再有写的权限。TXRQ1后,邮箱马长进入挂号形态,并期待成为最高优先级的邮箱,拜见发送优先级。一旦邮箱成为最高优先级的邮箱,其形态就变为预定发送形态。一旦CAN总线进入空闲形态,预定发送邮箱中的报文就顿时被发送(进入发送形态)。一旦邮箱中的报文被成功发送后,它顿时变为空邮箱;硬件响应地对CAN_TSR寄放器的RQCP和TXOK1,来表白一次成功发送。

  正在领受一个报文时,其标识符起首取设置装备摆设正在标识符列表模式下的过滤器比拟较;若是婚配上,报文就被存放到相联系关系的FIFO中,而且所婚配的过滤器的序号被存入过滤器婚配序号中。

  *软件通过对CAN_MCR寄放器的INRQ1,来请求bxCAN进入初始化模式,然后期待硬件对CAN_MSR寄放器的INAK1来进行确认

  正在CAN和谈里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因而,发送者以的形式把报文发送给所有的领受者。(注:不是一对一通信,而是多机通信)节点正在领受报文时-按照标识符的值-决定软件能否需要该报文;若是需要,就拷贝到SRAM里;若是不需要,报文就被丢弃且无需软件的干涉。

  * 一旦往FIFO存入1个报文,硬件就会更新FMP[1:0]位,而且若是CAN_IER寄放器的FMPIE位为1,那么就会发生一个中缀请求。

  通过对CAN_MCR寄放器的TXFP1,能够把发送邮箱设置装备摆设为发送FIFO。正在该模式下,发送的优先级由发送请求次序决定。

  正在领受到一个报文后,软件就能够拜候领受FIFO的输出邮箱来读取它。一旦软件处置了报文(如把它读出来),软件就该当对CAN_RFxR寄放器的RFOM位进行置1,来该报文,以便为后面收到的报文留出存储空间。

  * 当FIFO变满时(即第3个报文被存入),CAN_RFxR寄放器的FULL位就被置1,而且若是CAN_IER寄放器的FFIE位为1,那么就会发生一个满中缀请求。

  领受到的报文,被存储正在3级邮箱深度的FIFO中。FIFO完全由硬件来办理,从而节流了CPU

  *软件通过对CAN_MCR寄放器的INRQ位清0,来请求bxCAN退出初始化模式,当硬件对CAN_MSR寄放器的INAK位清0就确认了初始化模式的退出。

  * 正在溢出的环境下,FOVR位被置1,而且若是CAN_IER寄放器的FOVIE位为1,那么就会发生一个溢出中缀请求

  若是报文标识符没有跟过滤器中的任何标识符相婚配,那么硬件就丢弃该报文,且不会对软件有任何打搅。

  当有跨越1个发送邮箱正在挂号时,发送挨次由邮箱中报文的标识符决定。按照CAN和谈,标识符数值最低的报文具有最高的优先级。若是标识符的值相等,那么邮箱号小的报文先被发送。

  是根基扩展CAN(Basic Extended CAN)的缩写,它支撑CAN和谈2.0A和2.0B。它的设想方针是,以最小的CPU负荷来高效处置大量收到的报文。它也支撑报文发送的优先级要求(优先级特征可软件设置装备摆设)。

  ─ FIFO0领受到一个新报文,CAN_RF0R寄放器的FMP0位不再是00。

  *有2种体例能够(退出睡眠模式)bxCAN:通过软件对SLEEP位清0,或硬件检测CAN总线的勾当。

  bxCAN占用4个公用的中缀向量。通过设置CAN中缀答应寄放器(CAN_IER),每个中缀源都能够零丁答应和禁用。

  为满脚这一需求,bxCAN为使用法式供给了14个位宽可变的、可设置装备摆设的过滤器组(13~0),以便只领受那些软件需要的报文。硬件过滤的做法节流了CPU开销,不然就必需由软件过滤从而占用必然的CPU开销。每个过滤器组x由2个32位寄放器,CAN_FxR0和CAN_FxR1构成。

  相关链接: