我想学习和实现CAN总线协议。使用MSP430 Launchpad在软件上实现了串口、串行接口、I2C和One Wire Bus协议。现在我想了解一下CAN总线协议。我有mBed LPC1768 Cortex M3开发板。mBed有Can总线库,但我想编写自己的库,这样我就可以详细了解它,即像我对其他通信协议所做的那样。
我无法找到合适的资源开始,材料似乎分散在网络上。谁可以指导我如何用我提供的开发板编写和实现Can总线协议。
谢谢
发布于 2013-03-14 19:57:42
与I2C或SPI相比,开发CAN库相对容易。这是因为你的大脑皮层的CAN控制器会处理大多数复杂的事情。
要传输数据,必须在指定的寄存器中写入ID和数据,并设置位以传输数据。
恩智浦的This应用笔记对您非常有用。
我建议您实现以下功能:
在开始之前,先读一下罐头基础知识来理解。Microchip的应用笔记AN713和AN754是一个很好的资源。还有Vector的网站和维基百科的文章。
此外,您可以随时在此处或Electronics.StackExchange.com上发布您的疑问:)
发布于 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欧姆或类似值的电阻。
发布于 2017-12-11 23:09:02
当我学习如何使用hcs12龙板实现can协议时,我使用软件拼接与mcp25050交谈。这很有帮助,因为当你坐上公交车时,canking会为你初始化一切,你所要做的就是学习如何写和接收。如果您想了解如何初始化这些步骤,请执行以下步骤:
H19设置预分频器波特率和Tq H111设置采样时间和prop_seg1,prop_seg2,标识符接受寄存器0-3或0-7上的phase_seg
<>G223等待总线成为正常模式
在此之后,您可以开始更改寄存器或读取数据。为此,您必须选择空的can缓冲区,写入您的id以写入或请求数据,然后在写入时在3个发射器寄存器中输入地址、掩码和值,然后指定dlc (写入时为3,读取时为8-1 )。要传输id和数据,则必须将can传输标志设置为与can传输缓冲器选择相等。**根据您使用的id,位移位可能很繁琐,因此如果您有问题,我建议您调试并查看传输缓冲区选择寄存器保存的内容。我出现这个错误是因为我在向mcp25050发送消息时没有正确转换
https://stackoverflow.com/questions/15189390
复制相似问题