Working fork to test F0 application

Dependents:   ppCANOpen_Example

Fork of CANnucleo by Zoltan Hudak

Committer:
hudakz
Date:
Wed Dec 23 10:37:01 2015 +0000
Revision:
13:a3e2be3d49a2
Parent:
12:c45310ff2233
Child:
14:0344705e6fb8
Updated.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 11:439f3a34c42e 1 /**
hudakz 11:439f3a34c42e 2 ******************************************************************************
hudakz 11:439f3a34c42e 3 * @file stm32f3xx_hal_msp.c
hudakz 11:439f3a34c42e 4 * @author MCD Application Team
hudakz 11:439f3a34c42e 5 * @version V1.0.0
hudakz 11:439f3a34c42e 6 * @date 17-December-2014
hudakz 11:439f3a34c42e 7 * @brief HAL MSP module.
hudakz 11:439f3a34c42e 8 ******************************************************************************
hudakz 11:439f3a34c42e 9 * @attention
hudakz 11:439f3a34c42e 10 *
hudakz 11:439f3a34c42e 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
hudakz 11:439f3a34c42e 12 *
hudakz 11:439f3a34c42e 13 * Redistribution and use in source and binary forms, with or without modification,
hudakz 11:439f3a34c42e 14 * are permitted provided that the following conditions are met:
hudakz 11:439f3a34c42e 15 * 1. Redistributions of source code must retain the above copyright notice,
hudakz 11:439f3a34c42e 16 * this list of conditions and the following disclaimer.
hudakz 11:439f3a34c42e 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
hudakz 11:439f3a34c42e 18 * this list of conditions and the following disclaimer in the documentation
hudakz 11:439f3a34c42e 19 * and/or other materials provided with the distribution.
hudakz 11:439f3a34c42e 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
hudakz 11:439f3a34c42e 21 * may be used to endorse or promote products derived from this software
hudakz 11:439f3a34c42e 22 * without specific prior written permission.
hudakz 11:439f3a34c42e 23 *
hudakz 11:439f3a34c42e 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
hudakz 11:439f3a34c42e 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
hudakz 11:439f3a34c42e 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
hudakz 11:439f3a34c42e 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
hudakz 11:439f3a34c42e 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
hudakz 11:439f3a34c42e 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
hudakz 11:439f3a34c42e 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
hudakz 11:439f3a34c42e 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
hudakz 11:439f3a34c42e 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
hudakz 11:439f3a34c42e 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
hudakz 11:439f3a34c42e 34 *
hudakz 11:439f3a34c42e 35 ******************************************************************************
hudakz 11:439f3a34c42e 36 *
hudakz 11:439f3a34c42e 37 * Modified by Zoltan Hudak <hudakz@inbox.com>
hudakz 11:439f3a34c42e 38 *
hudakz 11:439f3a34c42e 39 ******************************************************************************
hudakz 11:439f3a34c42e 40 */
hudakz 12:c45310ff2233 41 #if defined(TARGET_NUCLEO_F302R8) || \
hudakz 12:c45310ff2233 42 defined(TARGET_NUCLEO_F303RE) || \
hudakz 12:c45310ff2233 43 defined(TARGET_NUCLEO_F303K8) || \
hudakz 12:c45310ff2233 44 defined(TARGET_NUCLEO_F334R8) || \
hudakz 12:c45310ff2233 45 defined(TARGET_DISCO_F334C8)
hudakz 12:c45310ff2233 46
hudakz 11:439f3a34c42e 47 #include "stm32f3xx_hal.h"
hudakz 11:439f3a34c42e 48 #include "can_api.h"
hudakz 11:439f3a34c42e 49 #include "pinmap.h"
hudakz 11:439f3a34c42e 50
hudakz 11:439f3a34c42e 51 CAN_HandleTypeDef _canHandle;
hudakz 11:439f3a34c42e 52 CanRxMsgTypeDef _canRxMsg;
hudakz 11:439f3a34c42e 53 CanTxMsgTypeDef _canTxMsg;
hudakz 11:439f3a34c42e 54 PinName _rxPin;
hudakz 11:439f3a34c42e 55 PinName _txPin;
hudakz 11:439f3a34c42e 56
hudakz 11:439f3a34c42e 57 void (*rxCompleteCallback) (void);
hudakz 11:439f3a34c42e 58
hudakz 11:439f3a34c42e 59 /**
hudakz 11:439f3a34c42e 60 * @brief CAN initialization.
hudakz 11:439f3a34c42e 61 * @param obj: can_t object
hudakz 11:439f3a34c42e 62 * @param rxPin: RX pin name
hudakz 11:439f3a34c42e 63 * @param txPin: TX pin name
hudakz 11:439f3a34c42e 64 * @param abom: Automatic recovery from bus-off state
hudakz 11:439f3a34c42e 65 * @retval None
hudakz 11:439f3a34c42e 66 */
hudakz 11:439f3a34c42e 67 void initCAN(can_t* obj, PinName rxPin, PinName txPin, FunctionalState abom) {
hudakz 11:439f3a34c42e 68 _rxPin = rxPin;
hudakz 11:439f3a34c42e 69 _txPin = txPin;
hudakz 11:439f3a34c42e 70
hudakz 11:439f3a34c42e 71 _canHandle.Instance = ((CAN_TypeDef *) CAN_BASE);
hudakz 11:439f3a34c42e 72 _canHandle.pTxMsg = &_canTxMsg;
hudakz 11:439f3a34c42e 73 _canHandle.pRxMsg = &_canRxMsg;
hudakz 11:439f3a34c42e 74
hudakz 11:439f3a34c42e 75 _canHandle.Init.TTCM = DISABLE;
hudakz 11:439f3a34c42e 76 _canHandle.Init.ABOM = abom;
hudakz 11:439f3a34c42e 77 _canHandle.Init.AWUM = DISABLE;
hudakz 11:439f3a34c42e 78 _canHandle.Init.NART = DISABLE;
hudakz 11:439f3a34c42e 79 _canHandle.Init.RFLM = DISABLE;
hudakz 11:439f3a34c42e 80 _canHandle.Init.TXFP = DISABLE;
hudakz 11:439f3a34c42e 81 _canHandle.Init.Mode = CAN_MODE_NORMAL;
hudakz 11:439f3a34c42e 82
hudakz 11:439f3a34c42e 83 // 125kbps bit rate (default)
hudakz 11:439f3a34c42e 84 // APB1 peripheral clock = 36000000Hz
hudakz 11:439f3a34c42e 85 _canHandle.Init.Prescaler = 18; // number of time quanta = 36000000/18/125000 = 16
hudakz 11:439f3a34c42e 86 _canHandle.Init.SJW = CAN_SJW_1TQ;
hudakz 11:439f3a34c42e 87 _canHandle.Init.BS1 = CAN_BS1_11TQ; // sample point at (1 + 11) / 16 * 100 = 75%
hudakz 11:439f3a34c42e 88 _canHandle.Init.BS2 = CAN_BS2_4TQ;
hudakz 11:439f3a34c42e 89
hudakz 11:439f3a34c42e 90 HAL_CAN_Init(&_canHandle);
hudakz 11:439f3a34c42e 91 }
hudakz 11:439f3a34c42e 92
hudakz 11:439f3a34c42e 93 /**
hudakz 11:439f3a34c42e 94 * @brief CAN MSP Initialization
hudakz 11:439f3a34c42e 95 * @param hcan: CAN handle pointer
hudakz 11:439f3a34c42e 96 * @retval None
hudakz 11:439f3a34c42e 97 */
hudakz 11:439f3a34c42e 98 void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) {
hudakz 11:439f3a34c42e 99 GPIO_InitTypeDef GPIO_InitStruct;
hudakz 11:439f3a34c42e 100
hudakz 11:439f3a34c42e 101 if((_rxPin == PA_11) && (_txPin == PA_12)) {
hudakz 11:439f3a34c42e 102
hudakz 11:439f3a34c42e 103 /* CAN1 Periph clock enable */
hudakz 11:439f3a34c42e 104 __CAN_CLK_ENABLE();
hudakz 11:439f3a34c42e 105
hudakz 11:439f3a34c42e 106 /* Enable GPIO clock */
hudakz 11:439f3a34c42e 107 __GPIOA_CLK_ENABLE();
hudakz 11:439f3a34c42e 108
hudakz 11:439f3a34c42e 109 /* CAN1 RX GPIO pin configuration */
hudakz 11:439f3a34c42e 110 GPIO_InitStruct.Pin = GPIO_PIN_11;
hudakz 11:439f3a34c42e 111 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
hudakz 11:439f3a34c42e 112 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
hudakz 11:439f3a34c42e 113 GPIO_InitStruct.Pull = GPIO_PULLUP;
hudakz 12:c45310ff2233 114 #if defined(TARGET_NUCLEO_F302R8) || \
hudakz 13:a3e2be3d49a2 115 defined(TARGET_NUCLEO_F303RE)
hudakz 11:439f3a34c42e 116 GPIO_InitStruct.Alternate = GPIO_AF7_CAN;
hudakz 13:a3e2be3d49a2 117 #elif defined(TARGET_NUCLEO_F303K8) || \
hudakz 13:a3e2be3d49a2 118 defined(TARGET_NUCLEO_F334R8) || \
hudakz 12:c45310ff2233 119 defined(TARGET_DISCO_F334C8)
hudakz 12:c45310ff2233 120 GPIO_InitStruct.Alternate = GPIO_AF9_CAN;
hudakz 12:c45310ff2233 121 #endif
hudakz 11:439f3a34c42e 122 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
hudakz 11:439f3a34c42e 123
hudakz 11:439f3a34c42e 124 /* CAN1 TX GPIO pin configuration */
hudakz 11:439f3a34c42e 125 GPIO_InitStruct.Pin = GPIO_PIN_12;
hudakz 11:439f3a34c42e 126 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
hudakz 11:439f3a34c42e 127 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
hudakz 11:439f3a34c42e 128 GPIO_InitStruct.Pull = GPIO_PULLUP;
hudakz 12:c45310ff2233 129 #if defined(TARGET_NUCLEO_F302R8) || \
hudakz 13:a3e2be3d49a2 130 defined(TARGET_NUCLEO_F303RE)
hudakz 11:439f3a34c42e 131 GPIO_InitStruct.Alternate = GPIO_AF7_CAN;
hudakz 13:a3e2be3d49a2 132 #elif defined(TARGET_NUCLEO_F303K8) || \
hudakz 13:a3e2be3d49a2 133 defined(TARGET_NUCLEO_F334R8) || \
hudakz 12:c45310ff2233 134 defined(TARGET_DISCO_F334C8)
hudakz 12:c45310ff2233 135 GPIO_InitStruct.Alternate = GPIO_AF9_CAN;
hudakz 12:c45310ff2233 136 #endif
hudakz 13:a3e2be3d49a2 137
hudakz 11:439f3a34c42e 138 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
hudakz 11:439f3a34c42e 139 }
hudakz 13:a3e2be3d49a2 140 #if !defined(TARGET_NUCLEO_F303K8)
hudakz 11:439f3a34c42e 141 else
hudakz 11:439f3a34c42e 142 if((_rxPin == PB_8) && (_txPin == PB_9)) {
hudakz 11:439f3a34c42e 143 /* CAN1 Periph clock enable */
hudakz 11:439f3a34c42e 144 __CAN_CLK_ENABLE();
hudakz 11:439f3a34c42e 145
hudakz 11:439f3a34c42e 146 /* Enable GPIO clock */
hudakz 11:439f3a34c42e 147 __GPIOB_CLK_ENABLE();
hudakz 11:439f3a34c42e 148
hudakz 11:439f3a34c42e 149 /* CAN1 RX GPIO pin configuration */
hudakz 11:439f3a34c42e 150 GPIO_InitStruct.Pin = GPIO_PIN_8;
hudakz 11:439f3a34c42e 151 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
hudakz 11:439f3a34c42e 152 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
hudakz 11:439f3a34c42e 153 GPIO_InitStruct.Pull = GPIO_PULLUP;
hudakz 12:c45310ff2233 154 #if defined(TARGET_NUCLEO_F302R8) || \
hudakz 13:a3e2be3d49a2 155 defined(TARGET_NUCLEO_F303RE)
hudakz 11:439f3a34c42e 156 GPIO_InitStruct.Alternate = GPIO_AF7_CAN;
hudakz 12:c45310ff2233 157 #elif defined(TARGET_NUCLEO_F334R8) || \
hudakz 12:c45310ff2233 158 defined(TARGET_DISCO_F334C8)
hudakz 12:c45310ff2233 159 GPIO_InitStruct.Alternate = GPIO_AF9_CAN;
hudakz 12:c45310ff2233 160 #endif
hudakz 12:c45310ff2233 161 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
hudakz 11:439f3a34c42e 162
hudakz 11:439f3a34c42e 163 /* CAN1 TX GPIO pin configuration */
hudakz 11:439f3a34c42e 164 GPIO_InitStruct.Pin = GPIO_PIN_9;
hudakz 11:439f3a34c42e 165 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
hudakz 11:439f3a34c42e 166 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
hudakz 11:439f3a34c42e 167 GPIO_InitStruct.Pull = GPIO_PULLUP;
hudakz 12:c45310ff2233 168 #if defined(TARGET_NUCLEO_F302R8) || \
hudakz 13:a3e2be3d49a2 169 defined(TARGET_NUCLEO_F303RE)
hudakz 11:439f3a34c42e 170 GPIO_InitStruct.Alternate = GPIO_AF7_CAN;
hudakz 12:c45310ff2233 171 #elif defined(TARGET_NUCLEO_F334R8) || \
hudakz 12:c45310ff2233 172 defined(TARGET_DISCO_F334C8)
hudakz 12:c45310ff2233 173 GPIO_InitStruct.Alternate = GPIO_AF9_CAN;
hudakz 12:c45310ff2233 174 #endif
hudakz 12:c45310ff2233 175 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
hudakz 11:439f3a34c42e 176 }
hudakz 13:a3e2be3d49a2 177 #endif
hudakz 11:439f3a34c42e 178 else
hudakz 11:439f3a34c42e 179 return;
hudakz 11:439f3a34c42e 180 /* NVIC configuration for CAN1 Reception complete interrupt */
hudakz 11:439f3a34c42e 181 HAL_NVIC_SetPriority(USB_LP_CAN_RX0_IRQn, 1, 0);
hudakz 11:439f3a34c42e 182 HAL_NVIC_EnableIRQ(USB_LP_CAN_RX0_IRQn);
hudakz 11:439f3a34c42e 183 }
hudakz 11:439f3a34c42e 184
hudakz 11:439f3a34c42e 185 /**
hudakz 11:439f3a34c42e 186 * @brief CAN MSP De-Initialization
hudakz 11:439f3a34c42e 187 * This function frees the hardware resources used:
hudakz 11:439f3a34c42e 188 * - Disable the Peripheral's clock
hudakz 11:439f3a34c42e 189 * - Revert GPIO to their default state
hudakz 11:439f3a34c42e 190 * @param hcan: CAN handle pointer
hudakz 11:439f3a34c42e 191 * @retval None
hudakz 11:439f3a34c42e 192 */
hudakz 11:439f3a34c42e 193 void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) {
hudakz 11:439f3a34c42e 194
hudakz 11:439f3a34c42e 195 /* Reset peripherals */
hudakz 11:439f3a34c42e 196
hudakz 11:439f3a34c42e 197 __CAN_FORCE_RESET();
hudakz 11:439f3a34c42e 198 __CAN_RELEASE_RESET();
hudakz 11:439f3a34c42e 199
hudakz 11:439f3a34c42e 200 /* Disable peripherals and GPIO Clocks */
hudakz 11:439f3a34c42e 201 if((_rxPin == PA_11) && (_txPin == PA_12)) {
hudakz 11:439f3a34c42e 202 /* De-initialize the CAN1 RX GPIO pin */
hudakz 11:439f3a34c42e 203 HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11);
hudakz 11:439f3a34c42e 204
hudakz 11:439f3a34c42e 205 /* De-initialize the CAN1 TX GPIO pin */
hudakz 11:439f3a34c42e 206 HAL_GPIO_DeInit(GPIOA, GPIO_PIN_12);
hudakz 11:439f3a34c42e 207 }
hudakz 12:c45310ff2233 208 else {
hudakz 12:c45310ff2233 209
hudakz 12:c45310ff2233 210 /* De-initialize the CAN1 RX GPIO pin */
hudakz 12:c45310ff2233 211 HAL_GPIO_DeInit(GPIOB, GPIO_PIN_8);
hudakz 12:c45310ff2233 212
hudakz 12:c45310ff2233 213 /* De-initialize the CAN1 TX GPIO pin */
hudakz 12:c45310ff2233 214 HAL_GPIO_DeInit(GPIOB, GPIO_PIN_9);
hudakz 12:c45310ff2233 215 }
hudakz 12:c45310ff2233 216
hudakz 11:439f3a34c42e 217
hudakz 11:439f3a34c42e 218 /* Disable the NVIC for CAN reception */
hudakz 11:439f3a34c42e 219 HAL_NVIC_DisableIRQ(USB_LP_CAN_RX0_IRQn);
hudakz 11:439f3a34c42e 220 }
hudakz 11:439f3a34c42e 221
hudakz 11:439f3a34c42e 222 /**
hudakz 11:439f3a34c42e 223 * @brief Handles CAN RX0 interrupt request.
hudakz 11:439f3a34c42e 224 * @param None
hudakz 11:439f3a34c42e 225 * @retval None
hudakz 11:439f3a34c42e 226 */
hudakz 11:439f3a34c42e 227 void USB_LP_CAN_RX0_IRQHandler(void) {
hudakz 11:439f3a34c42e 228 HAL_CAN_IRQHandler(&_canHandle);
hudakz 11:439f3a34c42e 229 }
hudakz 11:439f3a34c42e 230
hudakz 11:439f3a34c42e 231 /**
hudakz 11:439f3a34c42e 232 * @brief Reception complete callback in non blocking mode
hudakz 11:439f3a34c42e 233 * @param _canHandle: pointer to a CAN_HandleTypeDef structure that contains
hudakz 11:439f3a34c42e 234 * the configuration information for the specified CAN.
hudakz 11:439f3a34c42e 235 * @retval None
hudakz 11:439f3a34c42e 236 */
hudakz 11:439f3a34c42e 237 void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* _canHandle) {
hudakz 11:439f3a34c42e 238 // if(HAL_CAN_Receive_IT(_canHandle, CAN_FIFO0) == HAL_OK) {
hudakz 11:439f3a34c42e 239 // if(rxCompleteCallback != NULL)
hudakz 11:439f3a34c42e 240 // rxCompleteCallback();
hudakz 11:439f3a34c42e 241 // }
hudakz 11:439f3a34c42e 242 // else {
hudakz 11:439f3a34c42e 243 // error_handler(error);
hudakz 11:439f3a34c42e 244 // }
hudakz 11:439f3a34c42e 245
hudakz 11:439f3a34c42e 246 // BUG: CAN race condition if HAL_CAN_Receive_IT() is used.
hudakz 11:439f3a34c42e 247 // See https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Java/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2FSTM32Java%2FBUG%20CAN%20race%20condition%20if%20HAL%5FCAN%5FReceive%5FIT%20is%20used
hudakz 11:439f3a34c42e 248 //
hudakz 11:439f3a34c42e 249 // Fixed by Mark Burton:
hudakz 11:439f3a34c42e 250 // ideally, we should be able to call HAL_CAN_Receive_IT() here to set up for another
hudakz 11:439f3a34c42e 251 // receive but the API is flawed because that function will fail if HAL_CAN_Transmit()
hudakz 11:439f3a34c42e 252 // had already locked the handle when the receive interrupt occurred - so we do what
hudakz 11:439f3a34c42e 253 // HAL_CAN_Receive_IT() would do
hudakz 11:439f3a34c42e 254
hudakz 11:439f3a34c42e 255 if (rxCompleteCallback != 0)
hudakz 11:439f3a34c42e 256 rxCompleteCallback();
hudakz 11:439f3a34c42e 257
hudakz 11:439f3a34c42e 258 if (_canHandle->State == HAL_CAN_STATE_BUSY_TX)
hudakz 11:439f3a34c42e 259 _canHandle->State = HAL_CAN_STATE_BUSY_TX_RX;
hudakz 11:439f3a34c42e 260 else {
hudakz 11:439f3a34c42e 261 _canHandle->State = HAL_CAN_STATE_BUSY_RX;
hudakz 11:439f3a34c42e 262
hudakz 11:439f3a34c42e 263 /* Set CAN error code to none */
hudakz 11:439f3a34c42e 264 _canHandle->ErrorCode = HAL_CAN_ERROR_NONE;
hudakz 11:439f3a34c42e 265
hudakz 11:439f3a34c42e 266 /* Enable Error warning Interrupt */
hudakz 11:439f3a34c42e 267 __HAL_CAN_ENABLE_IT(_canHandle, CAN_IT_EWG);
hudakz 11:439f3a34c42e 268
hudakz 11:439f3a34c42e 269 /* Enable Error passive Interrupt */
hudakz 11:439f3a34c42e 270 __HAL_CAN_ENABLE_IT(_canHandle, CAN_IT_EPV);
hudakz 11:439f3a34c42e 271
hudakz 11:439f3a34c42e 272 /* Enable Bus-off Interrupt */
hudakz 11:439f3a34c42e 273 __HAL_CAN_ENABLE_IT(_canHandle, CAN_IT_BOF);
hudakz 11:439f3a34c42e 274
hudakz 11:439f3a34c42e 275 /* Enable Last error code Interrupt */
hudakz 11:439f3a34c42e 276 __HAL_CAN_ENABLE_IT(_canHandle, CAN_IT_LEC);
hudakz 11:439f3a34c42e 277
hudakz 11:439f3a34c42e 278 /* Enable Error Interrupt */
hudakz 11:439f3a34c42e 279 __HAL_CAN_ENABLE_IT(_canHandle, CAN_IT_ERR);
hudakz 11:439f3a34c42e 280 }
hudakz 11:439f3a34c42e 281
hudakz 11:439f3a34c42e 282 // Enable FIFO 0 message pending Interrupt
hudakz 11:439f3a34c42e 283 __HAL_CAN_ENABLE_IT(_canHandle, CAN_IT_FMP0);
hudakz 11:439f3a34c42e 284 }
hudakz 11:439f3a34c42e 285 #endif