Chinaunix首页 | 论坛 | 博客
  • 博客访问: 313300
  • 博文数量: 169
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 12
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-10 12:00
文章分类

全部博文(169)

文章存档

2014年(38)

2013年(131)

我的朋友

分类: C/C++

2014-02-24 22:09:18

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为禁止自动重传模式。

阅读(1148) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~