首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CAN总线协议的实现

CAN总线协议的实现
EN

Stack Overflow用户
提问于 2013-03-04 02:46:57
回答 4查看 11.8K关注 0票数 6

我想学习和实现CAN总线协议。使用MSP430 Launchpad在软件上实现了串口、串行接口、I2C和One Wire Bus协议。现在我想了解一下CAN总线协议。我有mBed LPC1768 Cortex M3开发板。mBed有Can总线库,但我想编写自己的库,这样我就可以详细了解它,即像我对其他通信协议所做的那样。

我无法找到合适的资源开始,材料似乎分散在网络上。谁可以指导我如何用我提供的开发板编写和实现Can总线协议。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-14 19:57:42

与I2C或SPI相比,开发CAN库相对容易。这是因为你的大脑皮层的CAN控制器会处理大多数复杂的事情。

要传输数据,必须在指定的寄存器中写入ID和数据,并设置位以传输数据。

恩智浦的This应用笔记对您非常有用。

我建议您实现以下功能:

  1. InitCAN -这应该设置CAN.
  2. SetFilters的指定波特率-大多数CAN控制器都带有接受过滤器,所以最好有
  3. SendData-确保您接受像ID_Type和RTRs RTRs这样的参数-这可以是基于阻塞或中断的。

在开始之前,先读一下罐头基础知识来理解。Microchip的应用笔记AN713AN754是一个很好的资源。还有Vector的网站和维基百科的文章。

此外,您可以随时在此处或Electronics.StackExchange.com上发布您的疑问:)

票数 7
EN

Stack Overflow用户

发布于 2019-01-24 20:42:01

好吧,这篇文章很老了,但人们可能会再看一遍,所以:首先,Can总线并不像USART或IC2那样是用户友好的协议,所以你必须非常精确地确定你的can位定时,有一些工具可以做到这一点,但我建议你手工计算它们。对于微控制器,我建议使用STM32,在我看来应该远离PIC系列。如果它只是CAN总线,没有更高级别的协议,如SAE J1939,步骤非常简单和直接:

1)初始化Can

2)将CAN设置为配置模式,并记住只能在配置模式下设置波特率、掩码和滤波器!

3)设置波特率寄存器。

4)设置掩码和滤镜。如果需要接收所有消息,只需将掩码设置为0x00即可。那么过滤器就会被忽略。

5)将CAN设置为正常或环回模式。(环回模式主要用于调试目的。)

人们在一开始尝试实现can的一些要点可能会遗漏:*您至少需要2个工作的CAN节点才能成功传输。(当然要有匹配的波特率)。所以,如果你想用1个节点通过CAN发送一些数据,那是不会成功的。因为您的发送器节点将不会收到ACK。

*你最有可能需要一个易拉罐转换器。不要忘记在发射器的Tx和Rx引脚之间放置一个100欧姆或类似值的电阻。

票数 1
EN

Stack Overflow用户

发布于 2017-12-11 23:09:02

当我学习如何使用hcs12龙板实现can协议时,我使用软件拼接与mcp25050交谈。这很有帮助,因为当你坐上公交车时,canking会为你初始化一切,你所要做的就是学习如何写和接收。如果您想了解如何初始化这些步骤,请执行以下步骤:

  1. 通过设置can控制寄存器1上的位来启用CAN总线
  2. 启用can初始化控制寄存器0
  3. 等待,直到can总线处于初始化模式通过检查控制寄存器1位
  4. 通过再次设置can控制寄存器1上的位来启用CAN总线,并设置时钟源-使用总线定时寄存器设置总线时钟或时钟

H19设置预分频器波特率和Tq H111设置采样时间和prop_seg1,prop_seg2,标识符接受寄存器0-3或0-7上的phase_seg

  1. set接受id -要将can设置为接收所有内容,请将这些设置为00因为在进行比较时,can总线是否与
  2. 设置标识符掩码寄存器0-3或0-7中的id进行补码比较,如果您不想关心任何位,请将它们全部设置为FF
  3. 将标识符接受控制寄存器设置为32位扩展或11位-I使用32
  4. 将控制寄存器0设置回正常模式
  5. 通过检查控制寄存器1

<>G223等待总线成为正常模式

在此之后,您可以开始更改寄存器或读取数据。为此,您必须选择空的can缓冲区,写入您的id以写入或请求数据,然后在写入时在3个发射器寄存器中输入地址、掩码和值,然后指定dlc (写入时为3,读取时为8-1 )。要传输id和数据,则必须将can传输标志设置为与can传输缓冲器选择相等。**根据您使用的id,位移位可能很繁琐,因此如果您有问题,我建议您调试并查看传输缓冲区选择寄存器保存的内容。我出现这个错误是因为我在向mcp25050发送消息时没有正确转换

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15189390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档