Mbed OS Reference
Loading...
Searching...
No Matches
RawCAN Class Reference

Creates an unlocked CAN interface connected to specific pins. More...

#include <RawCAN.h>

Inheritance diagram for RawCAN:
CAN can

Public Member Functions

 CAN (PinName rd, PinName td)
 Creates a CAN interface connected to specific pins. More...
 
 CAN (PinName rd, PinName td, int hz)
 Initialize CAN interface and set the frequency. More...
 
 CAN (const can_pinmap_t &pinmap)
 Initialize CAN interface. More...
 
 CAN (const can_pinmap_t &pinmap, int hz)
 Initialize CAN interface and set the frequency. More...
 
int frequency (int hz)
 Set the frequency of the CAN interface. More...
 
int write (CANMessage msg)
 Write a CANMessage to the bus. More...
 
int read (CANMessage &msg, int handle=0)
 Read a CANMessage from the bus. More...
 
void reset ()
 Reset CAN interface. More...
 
void monitor (bool silent)
 Puts or removes the CAN interface into silent monitoring mode. More...
 
int mode (Mode mode)
 Change CAN operation to the specified mode. More...
 
int filter (unsigned int id, unsigned int mask, CANFormat format=CANAny, int handle=0)
 Filter out incoming messages. More...
 
unsigned char rderror ()
 Detects read errors - Used to detect read overflow errors. More...
 
unsigned char tderror ()
 Detects write errors - Used to detect write overflow errors. More...
 
void attach (Callback< void()> func, IrqType type=IrqType::RxIrq)
 Attach a function to call whenever a CAN frame received interrupt is generated. More...
 

Detailed Description

Creates an unlocked CAN interface connected to specific pins.

Example:

#include "mbed.h"
Ticker ticker;
DigitalOut led1(LED1);
DigitalOut led2(LED2);
//The constructor takes in RX, and TX pin respectively.
//These pins, for this example, are defined in mbed_app.json
RawCAN can1(MBED_CONF_APP_CAN1_RD, MBED_CONF_APP_CAN1_TD);
RawCAN can2(MBED_CONF_APP_CAN2_RD, MBED_CONF_APP_CAN2_TD);
unsigned char counter = 0;
void send() {
if(can1.write(CANMessage(1337U, &counter, 1))) {
printf("Message sent: %d\n", counter);
counter++;
}
led1 = !led1;
}
int main() {
ticker.attach(&send, 1);
CANMessage msg;
while(1) {
if(can2.read(msg)) {
printf("Message received: %d\n\n", msg.data[0]);
led2 = !led2;
}
ThisThread::sleep_for(200);
}
}
CANMessage class.
Definition: InterfaceCAN.h:50
A digital output, used for setting the state of a pin.
Definition: DigitalOut.h:55
Creates an unlocked CAN interface connected to specific pins.
Definition: RawCAN.h:73
MBED_FORCEINLINE void attach(F &&func, float t)
Attach a function to be called by the Ticker, specifying the interval in seconds.
Definition: Ticker.h:92

Definition at line 73 of file RawCAN.h.

Member Function Documentation

◆ CAN() [1/4]

CAN ( PinName  rd,
PinName  td 
)

Creates a CAN interface connected to specific pins.

Parameters
rdread from transmitter
tdtransmit to transmitter

Example:

#include "mbed.h"
Ticker ticker;
DigitalOut led1(LED1);
DigitalOut led2(LED2);
//The constructor takes in RX, and TX pin respectively.
//These pins, for this example, are defined in mbed_app.json
CAN can1(MBED_CONF_APP_CAN1_RD, MBED_CONF_APP_CAN1_TD);
CAN can2(MBED_CONF_APP_CAN2_RD, MBED_CONF_APP_CAN2_TD);
unsigned char counter = 0;
void send() {
if(can1.write(CANMessage(1337U, &counter, 1))) {
printf("Message sent: %d\n", counter);
counter++;
}
led1 = !led1;
}
int main() {
ticker.attach(&send, 1);
CANMessage msg;
while(1) {
if(can2.read(msg)) {
printf("Message received: %d\n\n", msg.data[0]);
led2 = !led2;
}
ThisThread::sleep_for(200);
}
}
A can bus client, used for communicating with can devices.
Definition: CAN.h:45

◆ CAN() [2/4]

CAN ( PinName  rd,
PinName  td,
int  hz 
)

Initialize CAN interface and set the frequency.

Parameters
rdthe read pin
tdthe transmit pin
hzthe bus frequency in hertz

◆ CAN() [3/4]

CAN ( const can_pinmap_t pinmap)

Initialize CAN interface.

Parameters
pinmapreference to structure which holds static pinmap

◆ CAN() [4/4]

CAN ( const can_pinmap_t pinmap,
int  hz 
)

Initialize CAN interface and set the frequency.

Parameters
pinmapreference to structure which holds static pinmap
hzthe bus frequency in hertz

◆ frequency()

int frequency ( int  hz)
inherited

Set the frequency of the CAN interface.

Parameters
hzThe bus frequency in hertz
Returns
1 if successful, 0 otherwise

◆ write()

int write ( CANMessage  msg)
inherited

Write a CANMessage to the bus.

Parameters
msgThe CANMessage to write.
Returns
0 if write failed, 1 if write was successful

◆ read()

int read ( CANMessage msg,
int  handle = 0 
)
inherited

Read a CANMessage from the bus.

Parameters
msgA CANMessage to read to.
handlemessage filter handle (0 for any message)
Returns
0 if no message arrived, 1 if message arrived

◆ reset()

void reset ( )
inherited

Reset CAN interface.

To use after error overflow.

◆ monitor()

void monitor ( bool  silent)
inherited

Puts or removes the CAN interface into silent monitoring mode.

Parameters
silentboolean indicating whether to go into silent mode or not

◆ mode()

int mode ( Mode  mode)
inherited

Change CAN operation to the specified mode.

Parameters
modeThe new operation mode (CAN::Normal, CAN::Silent, CAN::LocalTest, CAN::GlobalTest, CAN::SilentTest)
Returns
0 if mode change failed or unsupported, 1 if mode change was successful

◆ filter()

int filter ( unsigned int  id,
unsigned int  mask,
CANFormat  format = CANAny,
int  handle = 0 
)
inherited

Filter out incoming messages.

Parameters
idthe id to filter on
maskthe mask applied to the id
formatformat to filter on (Default CANAny)
handlemessage filter handle (Optional)
Returns
0 if filter change failed or unsupported, new filter handle if successful

◆ rderror()

unsigned char rderror ( )
inherited

Detects read errors - Used to detect read overflow errors.

Returns
number of read errors

◆ tderror()

unsigned char tderror ( )
inherited

Detects write errors - Used to detect write overflow errors.

Returns
number of write errors

◆ attach()

void attach ( Callback< void()>  func,
IrqType  type = IrqType::RxIrq 
)
inherited

Attach a function to call whenever a CAN frame received interrupt is generated.

This function locks the deep sleep while a callback is attached

Parameters
funcA pointer to a void function, or 0 to set as none
typeWhich CAN interrupt to attach the member function to (CAN::RxIrq for message received, CAN::TxIrq for transmitted or aborted, CAN::EwIrq for error warning, CAN::DoIrq for data overrun, CAN::WuIrq for wake-up, CAN::EpIrq for error passive, CAN::AlIrq for arbitration lost, CAN::BeIrq for bus error)