HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
StmCan Class Reference

STM32 CAN implementation. More...

#include <StmCan.h>

Inheritance diagram for StmCan:
[legend]
Collaboration diagram for StmCan:
[legend]

Public Member Functions

 StmCan (CAN_HandleTypeDef *hcan) noexcept
 Construct for bxCAN.
 
 StmCan (FDCAN_HandleTypeDef *hfdcan) noexcept
 Construct for FDCAN.
 
 StmCan (const hf_stm32_can_config_t &config) noexcept
 Construct from config struct.
 
 ~StmCan () noexcept override
 
 StmCan (const StmCan &)=delete
 
StmCanoperator= (const StmCan &)=delete
 
hf_can_err_t Initialize () noexcept override
 Initialize the CAN controller (must be implemented by derived classes).
 
hf_can_err_t Deinitialize () noexcept override
 Deinitialize the CAN controller (must be implemented by derived classes).
 
hf_can_err_t SendMessage (const hf_can_message_t &message, hf_u32_t timeout_ms=1000) noexcept override
 Send a CAN message.
 
hf_can_err_t ReceiveMessage (hf_can_message_t &message, hf_u32_t timeout_ms=0) noexcept override
 Receive a CAN message.
 
hf_can_err_t SetReceiveCallback (hf_can_receive_callback_t callback) noexcept override
 Set callback for received messages.
 
hf_can_err_t SetAcceptanceFilter (hf_u32_t id, hf_u32_t mask, bool extended=false) noexcept override
 Set acceptance filter for incoming messages.
 
hf_can_err_t GetStatus (hf_can_status_t &status) noexcept override
 Get current CAN bus status.
 
hf_can_err_t Reset () noexcept override
 Reset the CAN controller.
 
bool SupportsCanFD () const noexcept override
 Check if CAN-FD is supported by this controller.
 
StmCanVariant GetVariant () const noexcept
 
void NotifyRxFromIsr (const hf_can_message_t &msg) noexcept
 ISR helper — call from HAL CAN/FDCAN RX callback.
 
- Public Member Functions inherited from BaseCan
virtual ~BaseCan () noexcept=default
 Virtual destructor ensures proper cleanup in derived classes.
 
 BaseCan (const BaseCan &)=delete
 
BaseCanoperator= (const BaseCan &)=delete
 
 BaseCan (BaseCan &&)=delete
 
BaseCanoperator= (BaseCan &&)=delete
 
bool EnsureInitialized () noexcept
 Ensures that the CAN bus is initialized (lazy initialization).
 
bool EnsureDeinitialized () noexcept
 Ensures that the CAN bus is deinitialized.
 
bool IsInitialized () const noexcept
 Checks if the class is initialized.
 
virtual void ClearReceiveCallback () noexcept
 Clear the receive callback.
 
virtual hf_can_err_t ClearAcceptanceFilter () noexcept
 Clear all acceptance filters (accept all messages).
 
virtual hf_can_err_t SetReceiveCallbackFD (hf_can_fd_receive_callback_t callback) noexcept
 Set CAN-FD receive callback with enhanced information.
 
virtual bool SetCanFDMode (bool enable, hf_u32_t data_baudrate=2000000, hf_u32_t timeout_ms=1000) noexcept
 Enable or disable CAN-FD mode.
 
virtual bool ConfigureCanFDTiming (hf_u16_t nominal_prescaler, hf_u8_t nominal_tseg1, hf_u8_t nominal_tseg2, hf_u16_t data_prescaler, hf_u8_t data_tseg1, hf_u8_t data_tseg2, hf_u8_t sjw=1) noexcept
 Configure CAN-FD timing parameters.
 
virtual bool SetTransmitterDelayCompensation (hf_u8_t tdc_offset, hf_u8_t tdc_filter) noexcept
 Set transmitter delay compensation (CAN-FD feature).
 
virtual hf_u32_t SendMessageBatch (const hf_can_message_t *messages, hf_u32_t count, hf_u32_t timeout_ms=1000) noexcept
 Send multiple messages in a batch.
 
virtual hf_u32_t ReceiveMessageBatch (hf_can_message_t *messages, hf_u32_t max_count, hf_u32_t timeout_ms=100) noexcept
 Receive multiple messages in a batch.
 
virtual hf_can_err_t ResetStatistics () noexcept
 Reset CAN operation statistics.
 
virtual hf_can_err_t ResetDiagnostics () noexcept
 Reset CAN diagnostic information.
 
virtual hf_can_err_t GetStatistics (hf_can_statistics_t &statistics) noexcept
 Get CAN operation statistics.
 
virtual hf_can_err_t GetDiagnostics (hf_can_diagnostics_t &diagnostics) noexcept
 Get CAN diagnostic information.
 

Private Member Functions

hf_can_err_t SendBxCan (const hf_can_message_t &msg, hf_u32_t timeout_ms) noexcept
 
hf_can_err_t ReceiveBxCan (hf_can_message_t &msg, hf_u32_t timeout_ms) noexcept
 
hf_can_err_t SendFdCan (const hf_can_message_t &msg, hf_u32_t timeout_ms) noexcept
 
hf_can_err_t ReceiveFdCan (hf_can_message_t &msg, hf_u32_t timeout_ms) noexcept
 

Private Attributes

StmCanVariant variant_
 
union { 
 
   CAN_HandleTypeDef *   hcan_ 
 
   FDCAN_HandleTypeDef *   hfdcan_ 
 
};  
 
hf_can_receive_callback_t rx_callback_
 

Additional Inherited Members

- Protected Member Functions inherited from BaseCan
 BaseCan () noexcept
 Protected constructor.
 
- Protected Attributes inherited from BaseCan
bool initialized_
 Initialization status.
 
hf_can_statistics_t statistics_
 CAN operation statistics.
 
hf_can_diagnostics_t diagnostics_
 CAN diagnostic information.
 

Detailed Description

STM32 CAN implementation.

Design:

  • Supports both bxCAN and FDCAN via a variant tag + union of handles.
  • SendMessage/ReceiveMessage use blocking HAL calls.
  • Acceptance filter wraps HAL filter configuration.
  • Receive callback stored for ISR forwarding.

Constructor & Destructor Documentation

◆ StmCan() [1/4]

StmCan::StmCan ( CAN_HandleTypeDef * hcan)
explicitnoexcept

Construct for bxCAN.

◆ StmCan() [2/4]

StmCan::StmCan ( FDCAN_HandleTypeDef * hfdcan)
explicitnoexcept

Construct for FDCAN.

◆ StmCan() [3/4]

StmCan::StmCan ( const hf_stm32_can_config_t & config)
explicitnoexcept

Construct from config struct.

◆ ~StmCan()

StmCan::~StmCan ( )
overridenoexcept

◆ StmCan() [4/4]

StmCan::StmCan ( const StmCan & )
delete

Member Function Documentation

◆ Deinitialize()

hf_can_err_t StmCan::Deinitialize ( )
overridevirtualnoexcept

Deinitialize the CAN controller (must be implemented by derived classes).

Returns
hf_can_err_t error code

Implements BaseCan.

◆ GetStatus()

hf_can_err_t StmCan::GetStatus ( hf_can_status_t & status)
overridevirtualnoexcept

Get current CAN bus status.

Parameters
statusReference to store status information
Returns
hf_can_err_t error code

Implements BaseCan.

◆ GetVariant()

StmCanVariant StmCan::GetVariant ( ) const
inlinenoexcept

◆ Initialize()

hf_can_err_t StmCan::Initialize ( )
overridevirtualnoexcept

Initialize the CAN controller (must be implemented by derived classes).

Returns
hf_can_err_t error code

Implements BaseCan.

◆ NotifyRxFromIsr()

void StmCan::NotifyRxFromIsr ( const hf_can_message_t & msg)
noexcept

ISR helper — call from HAL CAN/FDCAN RX callback.

◆ operator=()

StmCan & StmCan::operator= ( const StmCan & )
delete

◆ ReceiveBxCan()

hf_can_err_t StmCan::ReceiveBxCan ( hf_can_message_t & msg,
hf_u32_t timeout_ms )
privatenoexcept

◆ ReceiveFdCan()

hf_can_err_t StmCan::ReceiveFdCan ( hf_can_message_t & msg,
hf_u32_t timeout_ms )
privatenoexcept

◆ ReceiveMessage()

hf_can_err_t StmCan::ReceiveMessage ( hf_can_message_t & message,
hf_u32_t timeout_ms = 0 )
overridevirtualnoexcept

Receive a CAN message.

Parameters
messageReference to store received message
timeout_msTimeout in milliseconds (0 = non-blocking)
Returns
hf_can_err_t error code

Implements BaseCan.

◆ Reset()

hf_can_err_t StmCan::Reset ( )
overridevirtualnoexcept

Reset the CAN controller.

Returns
hf_can_err_t error code

Implements BaseCan.

◆ SendBxCan()

hf_can_err_t StmCan::SendBxCan ( const hf_can_message_t & msg,
hf_u32_t timeout_ms )
privatenoexcept

◆ SendFdCan()

hf_can_err_t StmCan::SendFdCan ( const hf_can_message_t & msg,
hf_u32_t timeout_ms )
privatenoexcept

◆ SendMessage()

hf_can_err_t StmCan::SendMessage ( const hf_can_message_t & message,
hf_u32_t timeout_ms = 1000 )
overridevirtualnoexcept

Send a CAN message.

Parameters
messageCAN message to send
timeout_msTimeout in milliseconds (0 = non-blocking)
Returns
hf_can_err_t error code

Implements BaseCan.

◆ SetAcceptanceFilter()

hf_can_err_t StmCan::SetAcceptanceFilter ( hf_u32_t id,
hf_u32_t mask,
bool extended = false )
overridevirtualnoexcept

Set acceptance filter for incoming messages.

Parameters
idCAN ID to accept
maskAcceptance mask (0 = don't care bits)
extendedtrue for extended frames, false for standard
Returns
hf_can_err_t error code

Implements BaseCan.

◆ SetReceiveCallback()

hf_can_err_t StmCan::SetReceiveCallback ( hf_can_receive_callback_t callback)
overridevirtualnoexcept

Set callback for received messages.

Parameters
callbackCallback function to handle received messages
Returns
hf_can_err_t error code

Implements BaseCan.

◆ SupportsCanFD()

bool StmCan::SupportsCanFD ( ) const
overridevirtualnoexcept

Check if CAN-FD is supported by this controller.

Returns
true if CAN-FD is supported, false otherwise
Note
Default implementation returns false

Reimplemented from BaseCan.

Member Data Documentation

◆ [union]

union { ... } StmCan

◆ hcan_

CAN_HandleTypeDef* StmCan::hcan_

◆ hfdcan_

FDCAN_HandleTypeDef* StmCan::hfdcan_

◆ rx_callback_

hf_can_receive_callback_t StmCan::rx_callback_
private

◆ variant_

StmCanVariant StmCan::variant_
private

The documentation for this class was generated from the following files: