硬汉嵌入式论坛

 找回密码
 立即注册
查看: 737|回复: 3
收起左侧

[CAN/FDCAN] CANopenNode协议栈使用CO_TPDOsendRequest函数只有最后一条生效

[复制链接]

2

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2024-6-21 14:39:58 | 显示全部楼层 |阅读模式
代码如下只会发最后一句3F 00 20 4E 00 00,要怎么设置才能顺着发送呢

[C] 纯文本查看 复制代码
void ctlPP(CO_t* pco_obj,uint8_t nodeID){
    CO_NMT_sendCommand(pco_obj->NMT, CO_NMT_ENTER_OPERATIONAL, nodeID);//节点复位
    CO_SYNCsend(pco_obj->SYNC);
    OD_RAM.x2000_control_word=0x80;
    OD_RAM.x2003_target_position=0;
    CO_TPDOsendRequest(&pco_obj->TPDO[0]);//发TPO0
    OD_RAM.x2000_control_word=0x06;
    OD_RAM.x2003_target_position=0;
    CO_TPDOsendRequest(&pco_obj->TPDO[0]);//发TPO0
    OD_RAM.x2000_control_word=0x07;
    OD_RAM.x2003_target_position=0;
    CO_TPDOsendRequest(&pco_obj->TPDO[0]);//发TPO0
    OD_RAM.x2000_control_word=0x0f;
    OD_RAM.x2003_target_position=0;
    CO_TPDOsendRequest(&pco_obj->TPDO[0]);//发TPO0
    //06->07->0F
    CO_SYNCsend(pco_obj->SYNC);
    OD_RAM.x2000_control_word=0x2f;
    OD_RAM.x2003_target_position=20000;
    CO_TPDOsendRequest(&pco_obj->TPDO[0]);//发TPO0
    OD_RAM.x2000_control_word=0x3f;
    OD_RAM.x2003_target_position=20000;
    CO_TPDOsendRequest(&pco_obj->TPDO[0]);//发TPO0
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-6-22 09:26:50 | 显示全部楼层
每次发送后,延迟1秒,测试下是不是正常的。
回复

使用道具 举报

2

主题

2

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2024-6-23 14:28:58 | 显示全部楼层
eric2013 发表于 2024-6-22 09:26
每次发送后,延迟1秒,测试下是不是正常的。

我是在freeRTOS中使用的,加了vTaskDelay(pdMS_TO_TICKS(1000))或者是用bsp_DelayUS(1e6)均没有效果。使用HAL_Delay(1e3)更是不行了。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-6-24 08:19:48 | 显示全部楼层
isdy 发表于 2024-6-23 14:28
我是在freeRTOS中使用的,加了vTaskDelay(pdMS_TO_TICKS(1000))或者是用bsp_DelayUS(1e6)均没有效果。使 ...

后面会做个CANopen组网实战案例,届时我试试这个。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-29 06:06 , Processed in 0.242250 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表