Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CAN总线
请教CAN总线调试问题
发布于 2019-04-19 14:26:51 浏览:2723
订阅该版
关于CAN总线的使用,目前遇到一个问题,我现在手里没设备,所以直接用STM32连接了一个CAN控制器,CAN控制器又连了一个USB转CAN的转换器;然后再调试软件中可以看到stm32发的数据可以发出来,但是接收的一直不行,如下:红色框是发送过来的,显示成功收到,但是橙色框发送到主机的,主机那边没反应: ![微信图片_20190419141456.png](/uploads/201904/19/142851msi300sb6l78r02b.png) 代码是bsp里面的示例代码改的,然后现发给主机在debug的时候,会进不了图中的两个if语句,导致数据出不来,请问下这个怎么解决呢: ![微信图片_20190419141456.png](/uploads/201904/19/142744gw0qu0m07zwf37zj.png) 附上代码: ```c #include
#include
#include
#define RT_CAN_THREAD_PRIORITY 15 struct can_app_struct { const char *name; struct rt_can_filter_config *filter; rt_uint8_t eventopt; struct rt_event event; }; static struct can_app_struct can_data[2]; static rt_err_t can1ind(rt_device_t dev, void *args, rt_int32_t hdr, rt_size_t size) { rt_event_t pevent = (rt_event_t)args; rt_event_send(pevent, 1 << (hdr)); return RT_EOK; } static rt_err_t can2ind(rt_device_t dev, void *args, rt_int32_t hdr, rt_size_t size) { rt_event_t pevent = (rt_event_t)args; rt_event_send(pevent, 1 << (hdr)); return RT_EOK; } struct rt_can_filter_item filter1item[4] = { RT_CAN_FILTER_STD_INIT(1, can1ind, &can_data[0].event), RT_CAN_FILTER_STD_INIT(2, can1ind, &can_data[0].event), RT_CAN_STD_RMT_FILTER_INIT(3, can1ind, &can_data[0].event), RT_CAN_STD_RMT_DATA_FILTER_INIT(4, can1ind, &can_data[0].event), }; struct rt_can_filter_item filter2item[4] = { RT_CAN_FILTER_STD_INIT(1, can2ind, &can_data[1].event), RT_CAN_FILTER_STD_INIT(2, can2ind, &can_data[1].event), RT_CAN_STD_RMT_FILTER_INIT(3, can2ind, &can_data[1].event), RT_CAN_STD_RMT_DATA_FILTER_INIT(4, can2ind, &can_data[1].event), }; struct rt_can_filter_config filter1 = { 4, 1, filter1item, }; struct rt_can_filter_config filter2 = { 4, 1, filter2item, }; static struct can_app_struct can_data[2] = { { "can1", &filter1, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, }, { "can2", &filter2, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, }, }; #define CANUSERCONFIG \ {\ CAN1MBaud,\ RT_CANMSG_BOX_SZ,\ RT_CANSND_BOX_NUM,\ RT_CAN_MODE_LOOPBACK,\ }; static rt_err_t can_rx_indicate(rt_device_t dev, rt_size_t size) { printf("rev:%ld",size); return RT_EOK; } static void rt_can_thread_entry(void *parameter) { struct rt_can_msg msg; struct can_app_struct *canpara = (struct can_app_struct *) parameter; rt_device_t candev; // rt_uint32_t e; rt_uint8_t rev_data[8]; struct can_configure config = CANUSERCONFIG; candev = rt_device_find("can1"); RT_ASSERT(candev); // rt_event_init(&canpara->event, canpara->name, RT_IPC_FLAG_FIFO); //rt_device_set_rx_indicate(candev, can_rx_indicate); rt_device_open(candev, (RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX)); rt_device_control(candev, RT_CAN_CMD_SET_FILTER, canpara->filter); rt_device_control(candev, RT_CAN_CMD_SET_MODE, &config); msg.ide=RT_CAN_STDID; msg.rtr=CAN_RTR_DATA; msg.len=8; msg.id=0x5a; msg.data[0]=0x01; msg.data[1]=0x02; msg.data[2]=0x03; msg.data[3]=0x04; msg.data[4]=0x04; msg.data[5]=0x06; msg.data[6]=0x07; msg.data[7]=0x08; while (1) { #if 0 if (rt_event_recv(&canpara->event,(1 << canpara->filter->items[0].hdr), canpara->eventopt,RT_WAITING_FOREVER, &e) != RT_EOK) { continue; } if (e & (1 << canpara->filter->items[0].hdr)) { msg.hdr = canpara->filter->items[0].hdr; while (rt_device_read(candev, 0, &msg, sizeof(msg)) == sizeof(msg)) { rt_device_write(candev, 0, &msg, sizeof(msg)); rt_kprintf("write data ok
"); } } #endif rt_device_write(candev, 0, &msg, sizeof(msg)); rt_kprintf("write data ok
"); rt_thread_mdelay(1000); rt_size_t rev_size = rt_device_read(candev,0,rev_data,sizeof(rev_data)); rt_kprintf("%d:",rev_size); } // rt_device_close(candev); } static int rt_can_app_init(void) { rt_thread_t tid; tid = rt_thread_create("canapp1", rt_can_thread_entry, &can_data[0], 512, RT_CAN_THREAD_PRIORITY, 20); if (tid != RT_NULL) rt_thread_startup(tid); return 0; } MSH_CMD_EXPORT(rt_can_thread_entry, can device test); INIT_APP_EXPORT(rt_can_app_init); ```
查看更多
7
个回答
默认排序
按发布时间排序
aozima
2019-04-19
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
用逻辑分析仪也可以观察总线。 如果接收端有ACK发出,那收不到一般都是过滤器没匹配上。
MTYGH
2019-04-19
这家伙很懒,什么也没写!
>用逻辑分析仪也可以观察总线。 如果接收端有ACK发出,那收不到一般都是过滤器没匹配上。 ... 请问过滤器怎么配置呢?目前发现的问题就是过滤器那里没配好
MTYGH
2019-04-19
这家伙很懒,什么也没写!
请问CAN的过滤器怎么配置呢?
moss
2019-04-22
这家伙很懒,什么也没写!
```c RT_CAN_FILTER_STD_INIT(1, can1ind, &can_data[0].event), RT_CAN_FILTER_STD_INIT(2, can1ind, &can_data[0].event), RT_CAN_STD_RMT_FILTER_INIT(3, can1ind, &can_data[0].event), RT_CAN_STD_RMT_DATA_FILTER_INIT(4, can1ind, &can_data[0].event), ``` 这边设置的CAN的ID是1,你用CAN调试工具发个ID是1的试试
MTYGH
2019-04-22
这家伙很懒,什么也没写!
>这边设置的CAN的ID是1,你用CAN调试工具发个ID是1的试试 嗯嗯,没注意到,我先看看
yaomo718
2019-04-24
这家伙很懒,什么也没写!
楼主在关闭过滤器RT_CAN_USING_HDR这个宏的时候,能正确接收数据吗? 另外过滤器配置后能正常工作吗?我在调试的时候也遇到了问题,可以交流一下吗?
MTYGH
2019-04-25
这家伙很懒,什么也没写!
>楼主在关闭过滤器RT_CAN_USING_HDR这个宏的时候,能正确接收数据吗? 另外过滤器配置后能正常工作吗?我在 ... 还不行,我还没搞懂滤波器怎么配置
撰写答案
登录
注册新账号
关注者
0
被浏览
2.7k
关于作者
MTYGH
这家伙很懒,什么也没写!
提问
7
回答
33
被采纳
0
关注TA
发私信
相关问题
1
我也来传一个CANOpen移植,RTT+STM32F107+CanOpenNode
2
谁有STM32裸跑的CANopen程序啊???
3
CAN驱动程序框架
4
CAN驱动接口如何规范一下
5
RTT无法进入线程.Cannot access Memory
6
编译提示arm-none-eabi/bin/ld: cannot find crt0.o: No such file o
7
rtt 2.1.0 正式版 mdk4 bsp/stm32 编译canapp.c错误
8
STM32F10XCAN驱动使用的问题
9
2.1版本stm32f10x分支bxcan驱动波特率设置的bug
10
rtthread2.1.0下,找不到can1设备
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部