问题标签 [can-bus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
23225 浏览

stm32 - 如何为 CAN 配置 STM32103 并将引脚重新映射到 PB8 和 PB9

在这个阶段,我试图简单地使用 STM32F103 V8T6 上的 CAN 发送传输。该芯片是在我公司定制的板上实现的。查看原理图,我看到 CAN Tx 和 Rx 引脚被重新映射到 PB9 (Tx) 和 PB8 (Rx)。话虽如此,我已经能够成功地使用 LoopBack 模式(使用 STM "V3.5.0" 的最新示例),但无法让 Normal 模式正常工作。如果有人在我的初始配置中发现明显缺陷,可以告诉我吗?!我只包含了与配置相关的代码,省略了传输函数调用。

这是我的传输功能

该资源很有帮助,但最终不足。

STM32F103微控制器CAN报文

谢谢!

丹尼尔

0 投票
1 回答
327 浏览

multithreading - 如何处理——快速发送和接收数据——Linux 设备驱动程序

我期待在 Linux 中实现 CAN 总线通信的驱动程序。
需要一些设计建议。

Linux有用户空间和内核空间。驱动程序在用户空间的内核空间应用程序中运行。

1> 现在假设如果以非常高的速度接收数据包,那么驱动程序如何处理这种情况?

2> 如果数据包必须以高速率传输,那该怎么办?

3> 数据应该如何在用户和内核空间之间移动。我们应该使用系统调用还是除此之外的一些快速机制?

4> 可以在内核级别的线程中完成吗?但是,如果有两个线程在内核级别运行,从 CAN 总线到 TX,从 CAN 总线到 RX,那么我们是否必须使用互斥锁来保存关键部分(即我们的内部寄存器)

5> 如果假设共享库用于从应用程序访问驱动程序。共享库可以使用系统调用访问驱动程序功能吗?

完全混淆什么应该是正确的方法。

请建议。任何答复将是可观的。

0 投票
1 回答
235 浏览

java - CAN 硬件接收缓冲器的掩码生成

我正在使用 CAN(控制器局域网),我正在尝试提出一种算法来生成硬件缓冲区插槽的掩码和 ID。

例如:

我有两个整数数组,其中包含我希望微控制器接收的 ID,以及希望微控制器忽略的 ID。

我现在从最小掩码 0 到最大值,具体取决于表示 ID 的位数(11 位)。

所以我从 0 到 7FF 并尝试从我想要接受的 ID 列表中找到一个可以包含一条或多条消息的掩码,并且没有我不想接受的 ID。

最多7FF就可以了,这个算法可以用。尽管它不是最好的,但它已经达到了它的目的。但我试图找到更有效的东西,我也想把它应用到 29 位。从 0 到 7FFFFFFF 需要很长时间。

任何想法将不胜感激。

PS:算法应该是用Java编写的。

0 投票
1 回答
379 浏览

c++ - 读取 CAN 输入时更新 GUI 元素的效率/速度

在这个项目之前,我没有使用控制器区域网络 (CAN) 或 ValueCAN3 的经验,我使用 Intrepid 的一个示例来阅读消息。但是,我在显示我正在读取的模拟和数字信号的 GUI 的更新效率和频率方面存在问题。

我的 GUI 由 16 个用于模拟通道的数字上/下框和 36 个按钮组成,这些按钮会根据数字信号是打开 (1) 还是关闭 (0) 而变为绿色。在阅读我的 CAN 消息时,我会更新 GUI 控件以显示适当的反馈。然而,当我按下插入的 CAN 操纵杆上的按钮时,数字通道几乎会立即响应,而模拟信号不会随着我用来改变信号的弦壶而快速更新。有时模拟信号需要 1 - 2 秒才能响应。

目前我设置了 GUI 控件,然后我从 GUI 控件中读取值并通过套接字连接通过 UDP 将值发送到另一个应用程序。我可能应该将其更改为从我直接接收的信号中发送数据,而不是从我正在设置的 GUI 控件中读取数据,但我认为这不是问题所在。

我正在使用 System::Timers::Timer 对象来更新、读取消息和发送数据包。我需要 50hz - 100hz 的速率,最好接近 100hz。使用另一端的套接字,我可以看到我的数据包被发送得足够频繁,但是模拟通道的数据变化并不平滑或频繁。如果有人对我可能做错了什么有任何想法,或者如何以更有效的方式处理数据,请说明。

这是 Intrepid 读取 CAN 消息的代码段:

我的表单使用以下方法从我的 CanReader 对象请求一条消息:

并且该方法获取收到的最后一条消息。

我认为这个 GetLatestMsg() 似乎是实现检索最新消息的不好方法,但我不完全确定这对我的程序有多大影响,或者我还能如何做到这一点,因为 CanReader 与 Form 是分开的所以我必须传递一系列我认为否则的消息。我确实怀疑这可能会跳过消息,因为它只读取最后一个抓取的消息,而不是导致它的消息,如果读取这些消息,应该会使 GUI 输出在过渡时显得更平滑。

另一件要注意的是,我正在从 6 个不同的 PGN 中读取数据,模拟信号对应于 4 个 PGN,2 个对应于数字信号。

更新

在玩过我的应用程序并在不同的模拟通道上使用弦乐壶之后,我注意到一些通道比其他通道更新得更多。通过检查正在访问的 PGN,我发现我访问的 PGN 比其他 PGN 更频繁。

CAN 设备不是以相对相同的速率为不同的 PGN 广播数据吗?如果是,那么我的 GetLatestMsg() 方法一定不能有效地读取不同的 PGN。它每 5 毫秒读取一个新的 msg。

此外,有谁知道我是否应该制作单独的阅读计时器来分别检测不同的 PGN?

如果有其他代码我可以提供清晰的说明,请告诉我。

0 投票
1 回答
5855 浏览

embedded - 是否存在用于模拟具有可编程 CAN 节点的 CAN 总线的开源工具?

我正在寻找一种工具,以便更轻松地尝试对控制器局域网(CAN) 协议进行调整,以及在其之上尝试构建协议。

特别是,我正在寻找具有可编程节点的 CAN 总线模拟,以便每个节点能够完全控制它在任何给定数据包中在总线上输出的位,但通常的 CAN 节点行为(例如帧间间距)和 CAN 总线功能(如仲裁)仍然可用。

但是,如果存在与此类工具接近的任何东西并且是开源的,我很可能会对其进行修改以满足我的要求。

我查看了 CANOpen Magic 和 RTaW-Sim,但它们没有提供我正在寻找的确切功能,并且我无法修改它们来这样做,因为它们不是开源的。

如果不存在这样的库,请在评论中提及。

0 投票
1 回答
3387 浏览

linux - Linux CAN 套接字 - 处理错误帧

我知道,如果CAN传输出现错误,系统会生成特定的错误帧。但我不知道如何使它工作。

我设置了我的 CAN 套接字,然后写入数据:

总线上没有连接任何东西,所以我期待一个 CAN_ERR_ACK,但什么都没有到达。

PS:启用错误接收。

怎么了?

0 投票
4 回答
12095 浏览

serial-communication - CAN总线协议实现

我想学习和实现CAN BUS协议。我已经在软件中使用 MSP430 Launchpad 实现了 UART、SPI、I2C 和单线总线协议。现在我想了解CAN Bus协议。我有 mBed LPC 1768 Cortex M3 开发板。mBed 有 Can Bus 库,但我想编写自己的库,以便详细了解它,即我为其他通信协议所做的方式。

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

谢谢

0 投票
3 回答
3500 浏览

diagnostics - CAN 诊断

我必须开发一个与汽车诊断工具通信的智能手机应用程序。一般来说,诊断中使用的协议是KWP2000、UDS和OBD。我的问题是“如何与汽车通信?以及如何使用这些协议?

0 投票
2 回答
1514 浏览

arduino - 我可以使用 CAN 总线重新映射 ECU 吗?

我正在考虑使用这样的东西将 Arduino 连接到摩托车 ECU:http ://www.skpang.co.uk/catalog/arduino-canbus-shield-with-usd-card-holder-p-706.html

我从来没有做过这样的事情,我会知道是否使用 CAN 总线我只能读取 ECU 中的一些诊断参数,或者我是否也可以重新映射一些 ECU 参数。

你能帮我理解这件事吗?

0 投票
3 回答
1397 浏览

c++ - 如何在 Linux 上使用带有 EG20T 芯片组的 Intel Atom Q7 模块上的 CAN-Bus?

我想在带有 EG20T 芯片组的 Intel Q7 模块上使用 CAN-Bus 接口。我让它在 Windows 上工作,但现在我必须让它在 Linux 上工作,但我几乎找不到任何信息。

我只需要知道如何读取、写入消息、启动、停止和设置 CAN 总线的波特率。

到目前为止,我发现了这个:http : //cateee.net/lkddb/web-lkddb/PCH_CAN.html 和一些关于 can4linux 和 socketCan 的评论用于 shell 使用。

但我实际上需要知道如何在 C 或 C++ 程序中使用它。