打印
[其它应用]

求助,RT-Thread如何使用can通信收发多字节数据?

[复制链接]
2961|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
powerantone|  楼主 | 2024-4-24 16:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
官方例程只有标准帧8字节传输数据,如何收发长度大于8字节的数据呢?

使用特权

评论回复
沙发
LEDyyds| | 2024-4-25 11:53 | 只看该作者
分两个或多个发送呗

使用特权

评论回复
板凳
豌豆爹| | 2024-4-25 15:16 | 只看该作者
c
#include <rtthread.h>  
#include <rtdevice.h>  
  
/* CAN设备名称 */  
#define CAN_DEV_NAME "can1"  
  
/* 发送多字节数据 */  
void send_multi_byte_data(rt_device_t can_dev, rt_uint32_t id, const rt_uint8_t *data, rt_uint32_t len) {  
    rt_can_msg_t msg;  
    rt_err_t result;  
    int i, chunk_size;  
  
    msg.id = id;  
    msg.len = 8; /* 假设每个CAN消息最多携带8字节数据 */  
  
    for (i = 0; i < len; i += chunk_size) {  
        chunk_size = (len - i > 8) ? 8 : (len - i);  
        rt_memcpy(msg.data, data + i, chunk_size);  
        result = rt_device_control(can_dev, RT_DEVICE_CTRL_CAN_SEND, &msg);  
        if (result != RT_EOK) {  
            /* 处理发送失败的情况 */  
        }  
    }  
}  
  
/* 接收回调函数 */  
void can_rx_ind(rt_device_t dev, rt_size_t size) {  
    rt_can_msg_t msg;  
    rt_err_t result;  
  
    result = rt_device_read(dev, 0, &msg, sizeof(msg));  
    if (result != RT_EOK) {  
        /* 处理读取失败的情况 */  
        return;  
    }  
  
    /* 根据消息ID和数据长度处理接收到的数据 */  
    /* ... */  
}  
  
int main(void) {  
    rt_device_t can_dev;  
    rt_uint8_t multi_byte_data[] = { /* 多字节数据 */ };  
    rt_uint32_t data_len = sizeof(multi_byte_data);  
  
    /* 查找CAN设备 */  
    can_dev = rt_device_find(CAN_DEV_NAME);  
    if (can_dev == RT_NULL) {  
        /* 处理找不到CAN设备的情况 */  
        return -1;  
    }  
  
    /* 初始化CAN设备(设置波特率、过滤器等) */  
    /* ... */  
  
    /* 设置接收回调函数 */  
    rt_device_set_rx_indicate(can_dev, can_rx_ind);  
  
    /* 发送多字节数据 */  
    send

使用特权

评论回复
地板
亚瑟| | 2024-5-24 23:24 | 只看该作者
可以自己构建个函数

使用特权

评论回复
5
yangjiaxu| | 2024-5-27 21:39 | 只看该作者
你看看八个字节可否调节,如果不能就分包发吧

使用特权

评论回复
6
yangxiaor520| | 2024-6-10 09:32 | 只看该作者
连续收发数据三

使用特权

评论回复
7
gouguoccc| | 2024-6-10 17:42 | 只看该作者
CAN2.0的数据长度是固定的,连续发送就是了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

562

主题

2465

帖子

4

粉丝