返回列表 发帖

stm32 CAN(转载2_stm32库应用

 发送报文的流程为:利用法式挑选1个空发送邮箱;设置标识符、数据长度和待发送数据;然后
  为知足这一需求,bxCAN为利用法式供给了14个位宽可变的、可设置装备摆设的过滤器组(13~0),以便只领受那些软件需求的报文。硬件过滤的做法节省了CPU开支,不然就必需由软件过滤从而占用肯定的CPU开支。每个过滤器组x由2个32位寄放器CAN_FxR0和CAN_FxR1构成。  位宽为32位的过滤器,优先级高于位宽为16位的过滤器;


  3.[设置DLC待传输动态的帧长度]
  软件经过对CAN_MCR寄放器的INRQ位置1,来恳求bxCAN进入初始化方式,然前期待硬件对CAN_MSR寄放器的INAK位置1来停止确认。
  函数如下:
  领受办理
  CAN总线是多主机通讯的,不是点对点或许一主多从方式,系多主机的情况下,不然会使良多主机无法停止通讯,从而招致致命的结果,CAN总线普通用于很实时的情况。
  stm32 CAN(转载2_stm32库应用,软件经过对CAN_MCR寄放器的INRQ位清0,来恳求bxCAN加入初始化方式,当硬件对CAN_MSR寄放器的INAK位清0就确认了初始化方式的加入。
  过滤器初值的设置不需求在初始化方式下停止,但必需在它处在非激活形状下完成(呼应的FACT位为0)。而过滤器的位宽和方式的设置,则必需在进入普通方式之前,即初始化方式下完成。
  ─CAN进入睡眠方式。
  普通方式
  为了过滤出一个标识符,理应设置过滤器组任务在标识符列表方式。
  发送方面搞定了,但领受方面呢?似乎在主法式里看不到有领受的语句。
  再看看发送法式:
  关于位宽不异的过滤器,标识符列表方式的优先级高于屏障位方式;
  发送者以广播的方stm32 CAN(转载2_stm32库应用式把报文发送给一切的领受者(注:不是一对一通讯,而是多机通讯)节点在领受报文时依照标识符的值选择软件能否需求该报文;若是需求,就拷贝到SRAM里;若是不需求,报文就被抛弃且无需软件的干与。一旦往FIFO取出1个报文,硬件就会更新FMP[1:0]位,并且若是CAN_IER寄放器的FMPIE位为1,那么就会发作一个中缀恳求。中缀函数实施完后关中缀是要让出总线周期让其它的主机利用。
  经过设置CAN_FM0R的FBMx位,能够设置装备摆设过滤器组为标识符列表方式或屏障位方式。
  ─FIFO0领受到一个新报文,CAN_RF0R寄放器的FMP0位不再是‘00’。
  1.[挑选一个空的发送邮箱]
  由标识符选择。当有跨越1个发送邮箱在挂号时,发送挨次由邮箱中报文的标识符选择。依照CAN和谈,标识符数值最低的报文具有最高的优先级。若是标识符的值相等,那么邮箱号小的报文先被发送。
  领受邮箱(FIFO)
  ─发送邮箱0变为空,CAN_TSR寄放器的RQCP0位被置1。
  ─犯错情况,关于犯错情况的详细动态请参考CAN过失形状寄放器(CAN_ESR)。
  有2种体例能够叫醒(加入睡眠方式)bxCAN:经过软件对SLEEP位清0,或硬件检测CAN总线的勾当。
  发送的优先级能够由标识符或发送恳求顺序选择:
  由发送恳求顺序选择。经过对CAN_MCR寄放器的TXFP位置1,能够把发送邮箱设置装备摆设为发送FIFO。在该方式下,发送的优先级由发送恳求顺序选择。该方式对分段发送很有效。
  中缀
  睡眠方式(低功耗)
  标识符过滤
  原本是用中缀体例来领受数据,原本它和串口一样能够有两种体例领受数据,一种是中缀一种是轮询,若采用轮询体例则要挪用主函数的CAN_Polling(void)函数。
  在该方式下,CAN硬件的外部按时器被激活,并且被用于发作时分戳,别离存储在CAN_RDTxR/CAN_TDTxR寄放器中。外部按时器在领受和发送的帧肇端位的采样点位置被采样,并生成时分戳。
  ─发送邮箱2变为空,CAN_TSR寄放器的RQCP2位被置1。
  好了,到读详细考试考试法式的时分了,这时分当然要翻开“STM32库函数”的资料,因为它外面有STM32打包好的库函数的注释,对读法式很有辅佐。
  (4)过失和形状转变中缀可由下列事务发作:
  当FIFO变满时(即第3个报文被取出),CAN_RFxR寄放器的FULL位就被置1,并且若是CAN_IER寄放器的FFIE位为1,那么就会发作一个满中缀恳求。
  接着又碰着一个成绩,为什么中缀函数CAN_Interrupt(void)的最后要关中缀呢?
  ─FIFO1领受到一个新报文,CAN_RF1R寄放器的FMP1位不再是‘00’。
  任务方式
  过滤器优先级法则:
  ─叫醒情况,在CAN领受引脚上监视到帧肇端位(SOF)。
  过滤器的方式的设置:
  为了过滤出一组标识符,理应设置过滤器组任务在屏障位方式。
  在领受到一个报文后,软件就能够拜候领受FIFO的输入邮箱来读取它。一旦软件处置了报文(如把它读进去),软件就理应对CAN_RFxR寄放器的RFOM位停止置1,来开释该报文,以便为前面收到的报文留出存储空间。
  利用法式不用的过滤器组,理应连结在禁用形状。
  恳求发送语句:
  上面是主法式:
  CAN_TIxR寄放器的TXRQ位置1,来恳求发送。TXRQ位置1后,邮箱就不再是空邮箱;而一旦邮箱不再为空,软件对邮箱寄放器就不再有写的权限。TXRQ位置1后,邮箱马出息入挂号形状,并期待成为最高优先级的邮箱,拜见发送优先级。一旦邮箱成为最高优先级的邮箱,其形状就变为预定发送形状。当CAN总线进入空闲形状,预定发送邮箱中的报文就顿时被发送(进入发送形状)。邮箱中的报文被胜利发送后,它顿时变为空邮箱,硬件呼应地对CAN_TSR寄放器的RQCP和TXOK位置1,来剖明一次胜利发送。
  时分触发通讯方式:
  在初始化完成后,软件理应让硬件进入普通方式,同步CAN总线,以便普通领受和发送报文。软件经过对INRQ位清0来恳求从初始化方式进入普通方式,然后要期待硬件对INAK位清0来确认。在跟CAN总线取得同步,即在CANRX引脚上监测到11个继续的隐性位(等效于总线空闲)后,bxCAN才干普通领受和发送报文。
  bxCAN占用4个公用的中缀向量。经过设置CAN中缀承诺寄放器CAN_IER,每个中缀源都能够零丁承诺和禁用。
  领受到的报文,被存储在3级邮箱深度的FIFO中。FIFO完整由硬件来办理,从而节省了CPU的处置负荷,简化了软件并保证了数据的不合性。利用法式只能经过读取FIFO输入邮箱,来读取FIFO中最先收到的报文。依照CAN和谈,当报文被准确领受(直到EOF域的最后1位都没有过失),且经过了标识符过滤,那么该报文被以为是有效报文。
  接着又是如何领受报文的呢?
  ─发送邮箱1变为空,CAN_TSR寄放器的RQCP1位被置1。
  初始化方式
  stm32库利用软件经过对CAN_MCR寄放器的SLEEP位置1,来恳求进入这一方式。在该方式下,bxCAN的时钟遏制了,但软件依然能够拜候邮箱寄放器。
  若是发送失利,因为仲裁惹起的就对CAN_TSR寄放器的ALST位置1,因为发送过失惹起的就对TERR位置1。
  bxCAN有3个主要的任务方式:初始化、普通和睡眠方式。
  在CAN和谈里,报文的标识符不代表节点的地址,而是跟报文的形式相关的。因此,发送者以广播的方式将报文发送给一切的接收者。
  领受相关的中缀前提
  (2)FIFO0中缀可由下列事务发作:
  当bxCAN处于初始化方式时,报文的领受和发送都被制止,并且CANTX引脚输入隐性位(高电平)。初始化CAN放纵器,软件必需设置CAN_BTR和CAN_MCR寄放器。
  当bxCAN处于睡眠方式,软件想经过对CAN_MCR寄放器的INRQ位置1,来进入初始化式,那么软件必需同时对SLEEP位清0才行。
  (3)FIFO1中缀可由下列事务发作:
  那么事实can是如何发送报文的呢?
  节点在领受报文时依照标识符的值选择能否需求该报文;若是需求,就拷贝到SRAM里;若是不需求,报文就被抛弃且无需软件的干与。
  (1)发送中缀可由下列事务发作:
  任务流程
  一旦往FIFO取出1个报文,硬件就会更新FMP[1:0]位,并且若是CAN_IER寄放器的FMPIE位为1,那么就会发作一个中缀恳求。
  //到128次11位继续的隐性位,就加入离线形状。
  位宽和方式都不异的过滤器,优先级由过滤器号选择,过滤器号小的优先级高。
  任务流程大要就是这个样子,接着就是一大堆烦人的can寄放器,看了一遍总算有了大要的体会,况且这么多的寄放器要一会儿把他们都记住是不成能的。依照以往的经历,只需用多几回,对寄放器的功用就能记住。
  在溢出的情况下,FOVR位被置1,并且若是CAN_IER寄放器的FOVIE位为1,那么就会发作一个溢出中缀恳求。
一心一意做事,一心一意做人,做站如做人。关于网站上的事务你可以直接联系我:13320088060。

返回列表

最新关注 关闭


关于论坛注册,最新修改,请网友们注意

由于最近大量垃圾信息出现在我们的论坛,为了营造一个良好的氛围,目前论坛只开发邀请注册,你可以点击以下链接自动邀请注册(如果有人使用了点击下一个试一试) ...


查看
珩源工控论坛热诚欢迎您联系我们进行合作!

Powered by Discuz! 7.2© 2001-2009 Comsenz Inc.

珩源工控论坛 ( 桂ICP备19004328号) |论坛统计|WAP| 客服中心-www.hymcu.com
  

GMT+8, 2024-11-24 17:29, Processed in 1.067663 second(s), 5 queries, Gzip enabled.