1.9.3.2 CANx_MessageTransmit Function
C
The prototype of CANx_MessageTransmit() varies based on device family. Refer to the generated header file for the actual prototype to be used.
bool CANx_MessageTransmit(uint32_t id, uint8_t length, uint8_t* data, uint8_t fifoNum, CAN_MSG_TX_ATTRIBUTE msgAttr) // x - Instance of the CAN peripheral bool CANx_MessageTransmit(uint32_t id, uint8_t length, uint8_t* data, uint8_t fifoQueueNum, CANFD_MODE mode, CANFD_MSG_TX_ATTRIBUTE msgAttr) // x - Instance of the CAN peripheral bool CANx_MessageTransmit(uint32_t id, uint8_t length, uint8_t* data, CAN_MAILBOX_TX_ATTRIBUTE mailboxAttr) // x - Instance of the CAN peripheral bool CANx_MessageTransmit(uint8_t bufferNumber, CAN_TX_BUFFER *txBuffer) // x - Instance of the CAN peripheral
Summary
Transmits a message into CAN bus.
Description
This routine transmits a message into CAN bus.
Precondition
CANx_Initialize must have been called for the associated CAN instance.
Parameters
Param | Description |
---|---|
id | 11-bit / 29-bit identifier (ID) |
length | Length of data buffer in number of bytes |
data | Pointer to source data buffer |
fifoNum | FIFO number |
fifoQueueNum | If fifoQueueNum is 0 then Transmit Queue otherwise FIFO |
mode | CAN mode Classic CAN or CAN FD without BRS or CAN FD with BRS |
msgAttr | Data frame or Remote frame to be transmitted |
mailboxAttr | Mailbox type TX Mailbox or Consumer Mailbox or Producer Mailbox |
bufferNumber | Tx buffer number |
txBuffer | Pointer to Tx buffer |
Returns
Request status. true - Request was successful.
false - Request has failed.
Example
uint8_t message[] = {0xAA, 0x55}; uint32_t messageID = 0x555; uint8_t messageLength = 2; CAN1_Initialize(); CAN1_MessageTransmit(messageID, messageLength, message, 0, CAN_MSG_TX_DATA_FRAME);
uint8_t message[] = {0xAA, 0x55}; uint32_t messageID = 0x555; uint8_t messageLength = 2; CAN1_Initialize(); CAN1_MessageTransmit(messageID, messageLength, message, 1, CANFD_MODE_NORMAL, CANFD_MSG_TX_DATA_FRAME);
uint8_t buf[] = {0xAA, 0x55}; CAN0_Initialize(); CAN0_MessageTransmit(0x555, sizeof(buf), buf, CAN_MAILBOX_DATA_FRAME_TX);
uint8_t loop_count = 0; uint8_t txFiFo[CAN0_TX_FIFO_BUFFER_SIZE]; CAN_TX_BUFFER *txBuffer = (CAN_TX_BUFFER *)txFiFo; memset(txFiFo, 0x00, CAN0_TX_FIFO_BUFFER_ELEMENT_SIZE); txBuffer->id = 0x100000A5; txBuffer->dlc = 8; txBuffer->xtd = 1; txBuffer->fdf = 1; txBuffer->brs = 1; for (loop_count = 0; loop_count < 8; loop_count++){ txBuffer->data[loop_count] = loop_count; } // Transmit message from Tx buffer 0 CAN0_MessageTransmit(0, txBuffer);
Remarks
None.