HAL  v0.6.1
Hardware Abstraction Layer
Loading...
Searching...
No Matches
CAN

Controller Area Network. More...

Collaboration diagram for CAN:

Data Structures

struct  can_channel_attr_t
 
struct  can_handle_t
 

Enumerations

enum  can_result_t {
  CAN_RESULT_OK ,
  CAN_RESULT_INVALID ,
  CAN_RESULT_UNSUPPORTED ,
  CAN_RESULT_BUSY ,
  CAN_RESULT_OVERFLOW ,
  CAN_RESULT_OVERLOAD ,
  CAN_RESULT_BIT_ERROR ,
  CAN_RESULT_BIT_STUFF_ERROR ,
  CAN_RESULT_FRAME_ERROR ,
  CAN_RESULT_ACK_ERROR ,
  CAN_RESULT_CRC_ERROR ,
  CAN_RESULT_ERR ,
  TOTAL_CAN_RESULT
}
 
enum  can_status_t {
  CAN_STATUS_UNKNOWN ,
  CAN_STATUS_OK ,
  CAN_STATUS_BUSY ,
  CAN_STATUS_STOP ,
  CAN_STATUS_SENDING ,
  CAN_STATUS_RECEIVING ,
  CAN_STATUS_ERR ,
  TOTAL_CAN_STATUS
}
 
enum  can_frame_t {
  CAN_FRAME_DATA ,
  CAN_FRAME_REMOTE ,
  CAN_FRAME_ERROR ,
  CAN_FRAME_OVERLOAD ,
  TOTAL_CAN_FRAME
}
 
enum  can_mode_t {
  CAN_MODE_CLASSIC ,
  CAN_MODE_FD ,
  CAN_MODE_LISTEN ,
  CAN_MODE_RESTRICTED ,
  CAN_MODE_INTERNAL_LOOP ,
  CAN_MODE_EXTERNAL_LOOP ,
  TOTAL_CAN_MODE
}
 
enum  can_baudrate_t {
  CAN_BAUDRATE_10KBPS ,
  CAN_BAUDRATE_20KBPS ,
  CAN_BAUDRATE_50KBPS ,
  CAN_BAUDRATE_125KBPS ,
  CAN_BAUDRATE_250KBPS ,
  CAN_BAUDRATE_500KBPS ,
  CAN_BAUDRATE_1MBPS ,
  CAN_BAUDRATE_2MBPS ,
  CAN_BAUDRATE_5MBPS ,
  CAN_BAUDRATE_8MBPS ,
  CAN_BAUDRATE_10MBPS ,
  CAN_BAUDRATE_12MBPS ,
  TOTAL_CAN_BAUDRATE
}
 

Functions

can_result_t hal_can_init (can_handle_t *handle, const can_channel_attr_t attr)
 Configure CAN channel with specific attributes.
 
can_result_t hal_can_write (can_handle_t *handle, const uint32_t id, const can_frame_t frame, const uint8_t *tx_buffer, const size_t len)
 Write data to CAN bus.
 
can_result_t hal_can_read (can_handle_t *handle, uint32_t *id, can_frame_t *frame, uint8_t *rx_buffer, const size_t len)
 Read data from CAN bus.
 
can_result_t hal_can_stop (can_handle_t *handle)
 Stop CAN bus operation.
 
can_result_t hal_can_mutex_take (const uint8_t channel, const uint32_t timeout_ms)
 Try acquire RTOS mutex for specified channel.
 
can_result_t hal_can_mutex_give (const uint8_t channel)
 Release RTOS mutex for specified channel.
 

Detailed Description

Controller Area Network.

Enumeration Type Documentation

◆ can_baudrate_t

#include <can/public_inc/hal_can.h>

Enumerator
CAN_BAUDRATE_10KBPS 
CAN_BAUDRATE_20KBPS 
CAN_BAUDRATE_50KBPS 
CAN_BAUDRATE_125KBPS 
CAN_BAUDRATE_250KBPS 
CAN_BAUDRATE_500KBPS 
CAN_BAUDRATE_1MBPS 
CAN_BAUDRATE_2MBPS 
CAN_BAUDRATE_5MBPS 
CAN_BAUDRATE_8MBPS 
CAN_BAUDRATE_10MBPS 
CAN_BAUDRATE_12MBPS 
TOTAL_CAN_BAUDRATE 

◆ can_frame_t

#include <can/public_inc/hal_can.h>

Enumerator
CAN_FRAME_DATA 
CAN_FRAME_REMOTE 
CAN_FRAME_ERROR 
CAN_FRAME_OVERLOAD 
TOTAL_CAN_FRAME 

◆ can_mode_t

enum can_mode_t

#include <can/public_inc/hal_can.h>

Enumerator
CAN_MODE_CLASSIC 
CAN_MODE_FD 
CAN_MODE_LISTEN 
CAN_MODE_RESTRICTED 
CAN_MODE_INTERNAL_LOOP 
CAN_MODE_EXTERNAL_LOOP 
TOTAL_CAN_MODE 

◆ can_result_t

#include <can/public_inc/hal_can.h>

Enumerator
CAN_RESULT_OK 

No error.

CAN_RESULT_INVALID 

Operation invalid.

CAN_RESULT_UNSUPPORTED 

Operation not supported.

CAN_RESULT_BUSY 

Bus busy.

CAN_RESULT_OVERFLOW 

FIFO overflow.

CAN_RESULT_OVERLOAD 

Bus overload.

CAN_RESULT_BIT_ERROR 

Data bit error.

CAN_RESULT_BIT_STUFF_ERROR 

Bit stuffing error.

CAN_RESULT_FRAME_ERROR 

CAN frame error.

CAN_RESULT_ACK_ERROR 

Receive device not acknowledge.

CAN_RESULT_CRC_ERROR 

Message CRC error.

CAN_RESULT_ERR 

Error occured.

TOTAL_CAN_RESULT 

◆ can_status_t

#include <can/public_inc/hal_can.h>

Enumerator
CAN_STATUS_UNKNOWN 

Unknown bus status.

CAN_STATUS_OK 

No error.

CAN_STATUS_BUSY 

Bus busy.

CAN_STATUS_STOP 

Channel stopped.

CAN_STATUS_SENDING 

Channel sending.

CAN_STATUS_RECEIVING 

Channel receiving.

CAN_STATUS_ERR 

Error occured.

TOTAL_CAN_STATUS 

Function Documentation

◆ hal_can_init()

can_result_t hal_can_init ( can_handle_t * handle,
const can_channel_attr_t attr )

#include <can/public_inc/hal_can.h>

Configure CAN channel with specific attributes.

can_handle_t handle = { .channel = BSP_CAN_CHANNEL_1 };
.rx_pin = CAN_RX_PIN,
.tx_pin = CAN_TX_PIN,
.mode = CAN_MODE_FD,
.baudrate = CAN_BAUDRATE_500KBPS,
.data_baudrate = CAN_BAUDRATE_2MBPS,
.low_power_enable = false
};
can_result_t result = hal_can_init( &handle, attr );
can_result_t
Definition hal_can.h:39
can_result_t hal_can_init(can_handle_t *handle, const can_channel_attr_t attr)
Configure CAN channel with specific attributes.
@ CAN_BAUDRATE_2MBPS
Definition hal_can.h:100
@ CAN_BAUDRATE_500KBPS
Definition hal_can.h:98
@ CAN_MODE_FD
Definition hal_can.h:82
Definition hal_can.h:110
gpio_pin_t rx_pin
CAN low (CANL)
Definition hal_can.h:111
Definition hal_can.h:121
uint8_t channel
CAN channel.
Definition hal_can.h:122
Parameters
[in,out]handleCAN handler
[in]attrCAN channel attributes
Return values
CAN_RESULT_OKSuccess configure CAN channel
CAN_RESULT_INVALIDConfiguration attributes invalid
CAN_RESULT_UNSUPPORTEDOperation not supported
CAN_RESULT_ERRFailed configure CAN channel

◆ hal_can_mutex_give()

can_result_t hal_can_mutex_give ( const uint8_t channel)

#include <can/public_inc/hal_can.h>

Release RTOS mutex for specified channel.

can_result_t result = hal_can_mutex_give( BSP_CAN_CHANNEL_1 );
can_result_t hal_can_mutex_give(const uint8_t channel)
Release RTOS mutex for specified channel.
Parameters
[in]channelCAN channel's mutex to be released
Return values
CAN_RESULT_OKSuccess release mutex
CAN_RESULT_INVALIDInvalid channel
CAN_RESULT_UNSUPPORTEDOperation not supported
CAN_RESULT_ERRFailed release mutex

◆ hal_can_mutex_take()

can_result_t hal_can_mutex_take ( const uint8_t channel,
const uint32_t timeout_ms )

#include <can/public_inc/hal_can.h>

Try acquire RTOS mutex for specified channel.

can_result_t result = hal_can_mutex_take( BSP_CAN_CHANNEL_1, 10U );
can_result_t hal_can_mutex_take(const uint8_t channel, const uint32_t timeout_ms)
Try acquire RTOS mutex for specified channel.
Parameters
[in]channelCAN channel's mutex to be locked
[in]timeout_msMutex acquiring timeout in milliseconds
Return values
CAN_RESULT_OKSuccess acquire mutex
CAN_RESULT_INVALIDInvalid channel
CAN_RESULT_UNSUPPORTEDOperation not supported
CAN_RESULT_ERRFailed acquire mutex

◆ hal_can_read()

can_result_t hal_can_read ( can_handle_t * handle,
uint32_t * id,
can_frame_t * frame,
uint8_t * rx_buffer,
const size_t len )

#include <can/public_inc/hal_can.h>

Read data from CAN bus.

uint32_t can_id = 0U;
can_frame_t frame = 0U;
uint8_t rx_buffer[8] = { 0U };
can_result_t result = hal_can_read( &handle,
&can_id,
&frame,
rx_buffer,
sizeof( rx_buffer ) );
can_frame_t
Definition hal_can.h:70
can_result_t hal_can_read(can_handle_t *handle, uint32_t *id, can_frame_t *frame, uint8_t *rx_buffer, const size_t len)
Read data from CAN bus.
Parameters
[in,out]handleCAN handler
[out]idReceived CAN identifier
[out]frameReceived CAN frame type
[out]rx_bufferReceiving buffer
[in]lenBuffer size
Return values
CAN_RESULT_OKSuccess read data from CAN bus
CAN_RESULT_INVALIDParameters invalid
CAN_RESULT_ERRFailed read data from CAN bus

◆ hal_can_stop()

can_result_t hal_can_stop ( can_handle_t * handle)

#include <can/public_inc/hal_can.h>

Stop CAN bus operation.

can_result_t result = hal_can_stop( &handle );
can_result_t hal_can_stop(can_handle_t *handle)
Stop CAN bus operation.
Parameters
[in,out]handleCAN handler
Return values
CAN_RESULT_OKSuccess stopped CAN channel
CAN_RESULT_UNSUPPORTEDFeature unsupported
CAN_RESULT_ERRFailed to stop CAN channel

◆ hal_can_write()

can_result_t hal_can_write ( can_handle_t * handle,
const uint32_t id,
const can_frame_t frame,
const uint8_t * tx_buffer,
const size_t len )

#include <can/public_inc/hal_can.h>

Write data to CAN bus.

const uint32_t can_id = 0x0A;
uint8_t tx_buffer[8] = { 1,2,3,4,5,6,7,8 };
can_result_t result = hal_can_write( &handle,
can_id,
tx_buffer,
sizeof( tx_buffer ) );
can_result_t hal_can_write(can_handle_t *handle, const uint32_t id, const can_frame_t frame, const uint8_t *tx_buffer, const size_t len)
Write data to CAN bus.
@ CAN_FRAME_DATA
Definition hal_can.h:71
Parameters
[in,out]handleCAN handler
[in]idCAN transmit identifier
[in]frameCAN frame type
[in]tx_bufferBuffer to be transmitted
[in]lenBuffer size
Return values
CAN_RESULT_OKSuccess write data to CAN bus
CAN_RESULT_INVALIDParameters invalid
CAN_RESULT_ERRFailed write data to CAN bus