Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2007532
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类: C/C++

2012-03-12 16:46:30

Stm32 固件库中关于NART的误解

禁止自动重传模式NART

该模式主要用于满足CAN标准中,时间触发通信选项的需求。通过对CAN_MCR寄存器的NART位置1,来让硬件工作在该模式。 

在该模式下,发送操作只会执行一次。如果发送操作失败了,不管是由于仲裁丢失或出错,硬件都不会再自动发送该报文。 

网上有很多can的程序在注释的时候有这样的错误:

将 CAN_InitStructure.CAN_NART=DISABLE理解成为失能自动重传

但是NART的英文全称应该是no automatic retransmission,也就是没有自动重传。

那么CAN_InitStructure.CAN_NART=DISABLE的意思就是使能自动重传。(双重否定等于肯定)

另外对照stm32的数据手册和固件库的相关代码可以发现这一点:

    /* Set the no automatic retransmission */

    if (CAN_InitStruct->CAN_NART == ENABLE)

    {

      CAN->MCR |= MCR_NART;

    }

    else

    {

      CAN->MCR &= ~MCR_NART;

}

根据上面代码和文字,可以看出CAN->MCR |= MCR_NART为禁止自动重传模式。

阅读(11378) | 评论(0) | 转发(2) |
0

上一篇:stm32时钟分析

下一篇:常用软件下载

给主人留下些什么吧!~~