- 积分
- 0
贡献0
飞刀0 FD
注册时间2016-5-6
在线时间0 小时
扫一扫,手机访问本帖
|
之前说请发一下can的手册和例程,回答我去下载区,可是下载区根本没有。
现在我自己试了一下,但是还没有成功。
我用的内核是28的,编译的时候我就直接把can里面本来选做模块的那个直接include了。
进入系统后我就用了
ifconfig can0 up
然后它就说是normol mode了,之后我就用了一个网上查到的一个基本的socketcan的程序,如下- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/ioctl.h>
- #include <net/if.h>
-
- #include <linux/can.h>
- #include <linux/can/raw.h>
- #include <string.h>
- #include <stdio.h>
-
- /* At time of writing, these constants are not defined in the headers */
- #ifndef PF_CAN
- #define PF_CAN 29
- #endif
-
- #ifndef AF_CAN
- #define AF_CAN PF_CAN
- #endif
-
- int main()
- {
- /* Create the socket */
- int skt = socket( PF_CAN, SOCK_RAW, CAN_RAW );
-
- /* Locate the interface you wish to use */
- struct ifreq ifr;
- strcpy(ifr.ifr_name, "can0");
- ioctl(skt, SIOCGIFINDEX, &ifr); /* ifr.ifr_ifindex gets filled
- * with that device's index */
-
- /* Select that CAN interface, and bind the socket to it. */
- struct sockaddr_can addr;
- addr.can_family = AF_CAN;
- addr.can_ifindex = ifr.ifr_ifindex;
- bind( skt, (struct sockaddr*)&addr, sizeof(addr) );
-
- /* Send a message to the CAN bus */
- struct can_frame frame;
- frame.can_id = 0x123;
- strcpy( frame.data, "foo" );
- frame.can_dlc = strlen( frame.data );
- int bytes_sent = write( skt, &frame, sizeof(frame) );
- printf("byte_sent:%d \n", bytes_sent);
-
- /* Read a message back from the CAN bus */
- int bytes_read = read( skt, &frame, sizeof(frame) );
- printf("byte_read:%d \n", bytes_read);
- return 0;
- }
复制代码 程序发送的部分能跑过去,但是实际can口并不正常,我用示波器看了一下,运行之后就一直在不停地发送,即使程序停掉之后也不会停止。看了波特率大概在230k左右。我用我的usb-can转换口也没有接到,置于接收部分就停在那了。
希望客服能给我一个可以工作的完整的包括发送与接收的例程,还有能告诉我一下设置波特率的方法,我是要做一个项目,时间比较紧,对驱动之类的我也不懂,之所以选择你们的板子就是因为你们驱动什么的都有。我现在界面储存之类的都没有问题就差一个can通讯了,希望能赶快给我些帮助。 |
|