cancel
Showing results for 
Search instead for 
Did you mean: 

Using bxCAN HAL; STM32F072

Duggan.Robert
Associate II

To begin, I have a question regarding the CanTxMsgTypeDef and the CanRxMsgTypeDef configurations (listed here.)

My question is, how to properly initialize the parameters :

uint8_t Data[8]; of CanTxMsgTypeDef

and

uint8_t Data[8]; CanRxMsgTypeDef

I can load each element of the tx individually but it would seem that I should be able to pass a pointer. Similarly, the rx element would be a pointer.

How does this work?

typedef struct

{

 uint32_t StdId;  /*!< Specifies the standard identifier.

             This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */

 uint32_t ExtId;  /*!< Specifies the extended identifier.

             This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */

 uint32_t IDE;   /*!< Specifies the type of identifier for the message that will be transmitted.

             This parameter can be a value of @ref CAN_identifier_type */

 uint32_t RTR;   /*!< Specifies the type of frame for the message that will be transmitted.

             This parameter can be a value of @ref CAN_remote_transmission_request */

 uint32_t DLC;   /*!< Specifies the length of the frame that will be transmitted.

             This parameter must be a number between Min_Data = 0 and Max_Data = 8. */

 uint8_t Data[8];  /*!< Contains the data to be transmitted.

             This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */

}CanTxMsgTypeDef;

//CAN Rx message structure definition

typedef struct

{

 uint32_t StdId;    /*!< Specifies the standard identifier.

               This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */

 uint32_t ExtId;    /*!< Specifies the extended identifier.

               This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */

 uint32_t IDE;     /*!< Specifies the type of identifier for the message that will be received.

               This parameter can be a value of @ref CAN_identifier_type */

 uint32_t RTR;     /*!< Specifies the type of frame for the received message.

               This parameter can be a value of @ref CAN_remote_transmission_request */

 uint32_t DLC;     /*!< Specifies the length of the frame that will be received.

               This parameter must be a number between Min_Data = 0 and Max_Data = 8. */

 uint8_t Data[8];   /*!< Contains the data to be received.

               This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */

 uint32_t FMI;     /*!< Specifies the index of the filter the message stored in the mailbox passes through.

               This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */

 uint32_t FIFONumber; /*!< Specifies the receive FIFO number.

               This parameter can be CAN_FIFO0 or CAN_FIFO1 */

}CanRxMsgTypeDef;

1 REPLY 1
Duggan.Robert
Associate II

I have discovered that I am using a Nucleo64 with an STM32F072 part. Although I have loaded the latest API packages into STM32cubeMX, I find that the stm32f0xx_hal_can.c and the stm32f4xx_hal_can.c are different.

I may try to copy the files of the stm32f4xx_hal_can to my project; they appear easier to use.

Any advice would be appreciated.