这种问题很可能是,由于开发板上没有120R的终端电阻引起的。简单的方法,把CAN盒的终端电阻开关开启,然后把CAN盒和开发板一起接入总线试一下。
找你的开发板的光盘资料,里面应该有CAN的例程,拿过来改改。
看了一下全部内容,说一点看法,题主那个图片只是一个can的发送函数,函数规定了初始化帧结构和调用底层发送函数。
1,can通信可以先用回环模式来验证你的收发逻辑是否正确,can环境是否配置好,可以通过自收自发打印收发数据依次判断是否适配好。如果有需要,我可以提供适配的can环境,并且可以按照题主相关要求修改参数。
2,伺服电机没调过,但是如果只是通协议,可以把协议指令直接封装成对应函数,过程会快很多。
目前已经转转动了,谢谢各位大哥~ Flyshine~ 阿濂已打赏,奖金不能分开,两位大哥麻烦注意一下~
我自己记录一下,防止后面忘记,使用自己主板硬石的CAN程序:
1、Can分析仪的频率和STM32 要一样,先调通这2个,再调通电机。STM32中的速率调整
https://blog.csdn.net/qq_41976419/article/details/83585301?ops_request_misc=&request_id=&biz_id=102&utm_term=CAN%20stm32%E9%A2%91%E7%8E%871M&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-83585301.142^v51^new_blog_pos_by_title,201^v3^control_1&spm=1018.2226.3001.4187
hCAN.Init.Prescaler = 6; // BTR-BRP 波特率分频器 定义了时间单元的时间长度 36/(1+3+2)/36=1Mbps 电机就是1000k
hCAN.Init.Mode = CAN_MODE_NORMAL; // 正常工作模式
hCAN.Init.SJW = CAN_SJW_1TQ; // BTR-SJW 重新同步跳跃宽度 1个时间单元
hCAN.Init.BS1 = CAN_BS1_3TQ; // BTR-TS1 时间段1 占用了3个时间单元
hCAN.Init.BS2 = CAN_BS2_2TQ; // BTR-TS1 时间段2 占用了2个时间单元
2、标准还是扩展模式, hCAN.pTxMsg->IDE=CAN_ID_STD; //扩展模式CAN_ID_STD;;;CAN_ID_EXT标准模式和扩展模式,一般都是标准模式;
3、数据长度修改: hCAN.pTxMsg->DLC=6; //数据长度为6字节
hCAN.pTxMsg->Data[0]=0xFF;
hCAN.pTxMsg->Data[1]=0x82;
hCAN.pTxMsg->Data[2]=0x00;
hCAN.pTxMsg->Data[3]=0x61;
hCAN.pTxMsg->Data[4]=0x00;
hCAN.pTxMsg->Data[5]=0x64;