while ( (CAN1->TSR & CAN_TSR_TME0) == 0) { } // 2. 包装要发送的数据帧 // 2.1 设置标准ID CAN1->sTxMailBox[0].TIR &= ~CAN_TI0R_STID; CAN1->sTxMailBox[0].TIR |= stdID << 21; // 2.2 设置为标准帧 CAN1->sTxMailBox[0].TIR &= ~CAN_TI0R_IDE; // 2.3 设置为...
TxMessage.RTR=0; TxMessage.DLC=len; if ((CANx->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) //判断哪个邮箱为空 { transmit_mailbox = 0; } else if ((CANx->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) { transmit_mailbox = 1; } else if ((CANx->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)...
if((CANx->TSR & (0x1UL << 26)) != 0) { mbox = 0; // 邮箱0为空 state = CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0; } else if((CANx->TSR & (0x1UL << 27)) != 0) { mbox = 1; // 邮箱1为空 state = CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1; ...
CAN1->sFilterRegister[0].FR1 = 0x00000000; /* id每位都是0 */ /* 4.7.5 设置过滤器组0 屏蔽位寄存器FR2 */ CAN1->sFilterRegister[0].FR2 = 0x00000000; /* 屏蔽位是0,表示不关心ID对应的位。都是0,表示接收所有消息 */ /* 4.7.6 激活过滤器组0 */ CAN1->FA1R |= CAN_FA1R_FACT0;...
if ((hcan->Instance->TSR & CAN_TSR_TME0) != RESET) { // 检查发送邮箱0状态 如果邮箱0空闲就将待发送数据放入FIFO0 TxMailboxX = CAN_TX_MAILBOX0; } else if ((hcan->Instance->TSR & CAN_TSR_TME1) != RESET) { TxMailboxX = CAN_TX_MAILBOX1; ...
rt_hw_can_isr(&drv_can1.device, RT_CAN_EVENT_TX_DONE | 0 << 8); } else { rt_hw_can_isr(&drv_can1.device, RT_CAN_EVENT_TX_FAIL | 0 << 8); } /* Write 0 to Clear transmission status flag RQCPx */ SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0); ...
if((state == HAL_CAN_STATE_READY) ||(state == HAL_CAN_STATE_LISTENING)){/* Check that all the Tx mailboxes are not full */if(((tsr & CAN_TSR_TME0) !=0U) ||((tsr & CAN_TSR_TME1) !=0U) ||((tsr...
if ((hcan->Instance->TSR & CAN_TSR_TME0) != RESET) { // 检查发送邮箱0状态 如果邮箱0空闲就将待发送数据放入FIFO0 TxMailboxX = CAN_TX_MAILBOX0; } else if ((hcan->Instance->TSR & CAN_TSR_TME1) != RESET) { TxMailboxX = CAN_TX_MAILBOX1; ...
把stm32f1xx_hal_can.c文件里面的HAL_CAN_AddTxMessage函数里面的transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos;改为 if(CAN_TSR_TME0 == (tsr & CAN_TSR_TME0)){transmitmailbox = 0;}else if(CAN_TSR_TME1 == (tsr & CAN_TSR_TME1)){transmitmailbox = 1;}else if(...
if (((tsr & CAN_TSR_TME0) != 0U) || ((tsr & CAN_TSR_TME1) != 0U) || ((tsr & CAN_TSR_TME2) != 0U)) 发送邮箱一直是满的,进不到if(osOK == osMessageQueueGet(osMessageQueueId_RACKRX_RxMsg,(void *)&LocalMsgType,NULL,osWaitForever)) ...