参知识点:
报文id就决定了优先级;
控制板STM32F103ZET6
flash:512k
SRAM:65k
ODrive的CAN通信_odrive can通信-CSDN博客
ODrive的CAN通信采用标准帧格式,也就是11bit。Address = node_ID | cmd_ID。
节点ID(node_ID)为高6bit,设置范围1 — 0x3F,一个ODrive的M0/M1需设置为不同的node_ID。
命令ID(cmd_ID)为低5bit,
can收发函数参考
STM32,odrive之间的can通信配置_odrive can通信-CSDN博客
联合体的作用
CAN波特率设置
约定双方波特率位250000
代码
用can通信主要用odrive的代码和他通信
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_CAN_Init();
MX_IWDG_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
/*
for(int i =0;i==0;)
{
uint8_t txData3[8]={0x04,0x01, 0x04, 0xAA, 0x00, 0x00, 0x00, 0x00};
CAN_SendMessage_Custom(0x01, txData3 , 8);
uint8_t txData4[8]={0x04,0x02, 0x04, 0xAA, 0x00, 0x00, 0x00, 0x00};
CAN_SendMessage_Custom(0x02, txData4 , 8);
uint8_t txData7[8]={0x04,0x03, 0x04, 0xAA, 0x00, 0x00, 0x00, 0x00};
CAN_SendMessage_Custom(0x03, txData7 , 8);
uint8_t txData8[8]={0x04,0x04, 0x04, 0xAA, 0x00, 0x00, 0x00, 0x00};
CAN_SendMessage_Custom(0x04, txData8 , 8);
i=1;
}
*/
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
uint8_t node_id = 0x00;
float target_position = 1.0;
odrive_set_pos(node_id, target_position);
HAL_Delay(1000);
target_position = 0.5;
odrive_set_pos(node_id, target_position);
HAL_Delay(1000);
return 0;
}
//
uint8_t CAN_Send_Msg(CAN_HandleTypeDef *hcan,uint16_t StdID,uint8_t *msg,uint8_t len,uint8_t Frame_type)
{
CAN_TxHeaderTypeDef TxHeader;
uint8_t index=0;
uint32_t TxMailbox;
uint8_t send_buf[8] = {0};
TxHeader.StdId=StdID;
TxHeader.ExtId=0;
TxHeader.IDE=CAN_ID_STD;
TxHeader.RTR = Frame_type != CAN_RTR_REMOTE ? CAN_RTR_DATA : CAN_RTR_REMOTE;
TxHeader.DLC=len;
/***********/
for ( index = 0; index < len; index++) {
send_buf[index] = msg[index];
}
/**********/
if(HAL_CAN_AddTxMessage(hcan, &TxHeader, send_buf, &TxMailbox) != HAL_OK)//
{
return 1;
}
return 0;
}