RTEMS 6.1-rc6
Loading...
Searching...
No Matches
stm32h7xx_hal_fdcan.c File Reference

FDCAN HAL module driver. This file provides firmware functions to manage the following functionalities of the Flexible DataRate Controller Area Network (FDCAN) peripheral: More...

#include "stm32h7xx_hal.h"

Detailed Description

FDCAN HAL module driver. This file provides firmware functions to manage the following functionalities of the Flexible DataRate Controller Area Network (FDCAN) peripheral:

Author
MCD Application Team
  • Initialization and de-initialization functions
  • IO operation functions
  • Peripheral Configuration and Control functions
  • Peripheral State and Error functions
Attention

Copyright (c) 2017 STMicroelectronics. All rights reserved.

This software is licensed under terms that can be found in the LICENSE file in the root directory of this software component. If no LICENSE file comes with this software, it is provided AS-IS.

==============================================================================
                      ##### How to use this driver #####
==============================================================================
  [..]
    (#) Initialize the FDCAN peripheral using HAL_FDCAN_Init function.

    (#) If needed , configure the reception filters and optional features using
        the following configuration functions:
          (++) HAL_FDCAN_ConfigClockCalibration
          (++) HAL_FDCAN_ConfigFilter
          (++) HAL_FDCAN_ConfigGlobalFilter
          (++) HAL_FDCAN_ConfigExtendedIdMask
          (++) HAL_FDCAN_ConfigRxFifoOverwrite
          (++) HAL_FDCAN_ConfigFifoWatermark
          (++) HAL_FDCAN_ConfigRamWatchdog
          (++) HAL_FDCAN_ConfigTimestampCounter
          (++) HAL_FDCAN_EnableTimestampCounter
          (++) HAL_FDCAN_DisableTimestampCounter
          (++) HAL_FDCAN_ConfigTimeoutCounter
          (++) HAL_FDCAN_EnableTimeoutCounter
          (++) HAL_FDCAN_DisableTimeoutCounter
          (++) HAL_FDCAN_ConfigTxDelayCompensation
          (++) HAL_FDCAN_EnableTxDelayCompensation
          (++) HAL_FDCAN_DisableTxDelayCompensation
          (++) HAL_FDCAN_EnableISOMode
          (++) HAL_FDCAN_DisableISOMode
          (++) HAL_FDCAN_EnableEdgeFiltering
          (++) HAL_FDCAN_DisableEdgeFiltering
          (++) HAL_FDCAN_TT_ConfigOperation
          (++) HAL_FDCAN_TT_ConfigReferenceMessage
          (++) HAL_FDCAN_TT_ConfigTrigger

    (#) Start the FDCAN module using HAL_FDCAN_Start function. At this level
        the node is active on the bus: it can send and receive messages.

    (#) The following Tx control functions can only be called when the FDCAN
        module is started:
          (++) HAL_FDCAN_AddMessageToTxFifoQ
          (++) HAL_FDCAN_EnableTxBufferRequest
          (++) HAL_FDCAN_AbortTxRequest

    (#) After having submitted a Tx request in Tx Fifo or Queue, it is possible to
        get Tx buffer location used to place the Tx request thanks to
        HAL_FDCAN_GetLatestTxFifoQRequestBuffer API.
        It is then possible to abort later on the corresponding Tx Request using
        HAL_FDCAN_AbortTxRequest API.

    (#) When a message is received into the FDCAN message RAM, it can be
        retrieved using the HAL_FDCAN_GetRxMessage function.

    (#) Calling the HAL_FDCAN_Stop function stops the FDCAN module by entering
        it to initialization mode and re-enabling access to configuration
        registers through the configuration functions listed here above.

    (#) All other control functions can be called any time after initialization
        phase, no matter if the FDCAN module is started or stopped.

    *** Polling mode operation ***
    ==============================
  [..]
      (#) Reception and transmission states can be monitored via the following
          functions:
            (++) HAL_FDCAN_IsRxBufferMessageAvailable
            (++) HAL_FDCAN_IsTxBufferMessagePending
            (++) HAL_FDCAN_GetRxFifoFillLevel
            (++) HAL_FDCAN_GetTxFifoFreeLevel

    *** Interrupt mode operation ***
    ================================
    [..]
      (#) There are two interrupt lines: line 0 and 1.
          By default, all interrupts are assigned to line 0. Interrupt lines
          can be configured using HAL_FDCAN_ConfigInterruptLines function.

      (#) Notifications are activated using HAL_FDCAN_ActivateNotification
          function. Then, the process can be controlled through one of the
          available user callbacks: HAL_FDCAN_xxxCallback.

*** Callback registration ***
=============================================

The compilation define USE_HAL_FDCAN_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
Use Function HAL_FDCAN_RegisterCallback() or HAL_FDCAN_RegisterXXXCallback()
to register an interrupt callback.

Function HAL_FDCAN_RegisterCallback() allows to register following callbacks:
  (+) TxFifoEmptyCallback          : Tx Fifo Empty Callback.
  (+) RxBufferNewMessageCallback   : Rx Buffer New Message Callback.
  (+) HighPriorityMessageCallback  : High Priority Message Callback.
  (+) TimestampWraparoundCallback  : Timestamp Wraparound Callback.
  (+) TimeoutOccurredCallback      : Timeout Occurred Callback.
  (+) ErrorCallback                : Error Callback.
  (+) MspInitCallback              : FDCAN MspInit.
  (+) MspDeInitCallback            : FDCAN MspDeInit.
This function takes as parameters the HAL peripheral handle, the Callback ID
and a pointer to the user callback function.

For specific callbacks ClockCalibrationCallback, TxEventFifoCallback, RxFifo0Callback, RxFifo1Callback,
TxBufferCompleteCallback, TxBufferAbortCallback, ErrorStatusCallback, TT_ScheduleSyncCallback, TT_TimeMarkCallback,
TT_StopWatchCallback and TT_GlobalTimeCallback, use dedicated register callbacks:
respectively HAL_FDCAN_RegisterClockCalibrationCallback(), HAL_FDCAN_RegisterTxEventFifoCallback(),
HAL_FDCAN_RegisterRxFifo0Callback(), HAL_FDCAN_RegisterRxFifo1Callback(),
HAL_FDCAN_RegisterTxBufferCompleCallback(), HAL_FDCAN_RegisterTxBufferAbortCallback(),
HAL_FDCAN_RegisterErrorStatusCallback(), HAL_FDCAN_TT_RegisterScheduleSyncCallback(),
HAL_FDCAN_TT_RegisterTimeMarkCallback(), HAL_FDCAN_TT_RegisterStopWatchCallback() and
HAL_FDCAN_TT_RegisterGlobalTimeCallback().

Use function HAL_FDCAN_UnRegisterCallback() to reset a callback to the default
weak function.
HAL_FDCAN_UnRegisterCallback takes as parameters the HAL peripheral handle,
and the Callback ID.
This function allows to reset following callbacks:
  (+) TxFifoEmptyCallback          : Tx Fifo Empty Callback.
  (+) RxBufferNewMessageCallback   : Rx Buffer New Message Callback.
  (+) HighPriorityMessageCallback  : High Priority Message Callback.
  (+) TimestampWraparoundCallback  : Timestamp Wraparound Callback.
  (+) TimeoutOccurredCallback      : Timeout Occurred Callback.
  (+) ErrorCallback                : Error Callback.
  (+) MspInitCallback              : FDCAN MspInit.
  (+) MspDeInitCallback            : FDCAN MspDeInit.

For specific callbacks ClockCalibrationCallback, TxEventFifoCallback, RxFifo0Callback,
RxFifo1Callback, TxBufferCompleteCallback, TxBufferAbortCallback, TT_ScheduleSyncCallback,
TT_TimeMarkCallback, TT_StopWatchCallback and TT_GlobalTimeCallback, use dedicated
register callbacks: respectively HAL_FDCAN_UnRegisterClockCalibrationCallback(),
HAL_FDCAN_UnRegisterTxEventFifoCallback(), HAL_FDCAN_UnRegisterRxFifo0Callback(),
HAL_FDCAN_UnRegisterRxFifo1Callback(), HAL_FDCAN_UnRegisterTxBufferCompleCallback(),
HAL_FDCAN_UnRegisterTxBufferAbortCallback(), HAL_FDCAN_UnRegisterErrorStatusCallback(),
HAL_FDCAN_TT_UnRegisterScheduleSyncCallback(), HAL_FDCAN_TT_UnRegisterTimeMarkCallback(),
HAL_FDCAN_TT_UnRegisterStopWatchCallback() and HAL_FDCAN_TT_UnRegisterGlobalTimeCallback().

By default, after the HAL_FDCAN_Init() and when the state is HAL_FDCAN_STATE_RESET,
all callbacks are set to the corresponding weak functions:
examples HAL_FDCAN_ErrorCallback().
Exception done for MspInit and MspDeInit functions that are
reset to the legacy weak function in the HAL_FDCAN_Init()/ HAL_FDCAN_DeInit() only when
these callbacks are null (not registered beforehand).
if not, MspInit or MspDeInit are not null, the HAL_FDCAN_Init()/ HAL_FDCAN_DeInit()
keep and use the user MspInit/MspDeInit callbacks (registered beforehand)

Callbacks can be registered/unregistered in HAL_FDCAN_STATE_READY state only.
Exception done MspInit/MspDeInit that can be registered/unregistered
in HAL_FDCAN_STATE_READY or HAL_FDCAN_STATE_RESET state,
thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit.
In that case first register the MspInit/MspDeInit user callbacks
using HAL_FDCAN_RegisterCallback() before calling HAL_FDCAN_DeInit()
or HAL_FDCAN_Init() function.

When The compilation define USE_HAL_FDCAN_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.