STM32: CAN bus communication-sending and receiving

STM32: CAN bus communication initialization configuration


1. CAN bus communication sending

1. CAN bus communication sending configuration process

  1. Write identifier
  2. Write identifier type ( standard frame / extended frame )
  3. Write frame type ( remote frame / data frame )
  4. Write data length
  5. Write data
  6. send data

2. CAN bus communication sending related library functions

Send data structure:

typedef struct
{
    
    
  uint32_t StdId;  /*!<指定标准标识符
                       该参数可以是0到0x7FF之间的值 */

  uint32_t ExtId;  /*!< 指定扩展标识符
                        该参数可以是0到0x1FFFFFFF之间的值 */

  uint8_t IDE;     /*!< 指定要传输的消息的标识符类型
                        标准帧:CAN_ID_STD
                        扩展帧:CAN_ID_EXT	*/

  uint8_t RTR;     /*!< 指定要传输的消息的帧类型
                         数据帧:CAN_RTR_DATA
                         远程帧:CAN_RTR_REMOTE 	*/

  uint8_t DLC;     /*!< 指定将要传输的帧的长度。
						取值范围为0 ~ 8	*/

  uint8_t Data[8]; /*!<	包含要传输的数据。
						取值范围是0 ~ 0xFF	*/
} CanTxMsg;

Send library functions:

/**
  * @brief  Initiates the transmission of a message.
  * @param  CANx:      where x can be 1 or 2 to to select the CAN peripheral.
  * @param  TxMessage: pointer to a structure which contains CAN Id, CAN
  *                    DLC and CAN data.
  * @retval The number of the mailbox that is used for transmission
  *                    or CAN_TxStatus_NoMailBox if there is no empty mailbox.
  */
  
uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage);

3. CAN bus communication sending program

The specific code of the standard frame is as follows:

/* 发送数据*/
void CAN_TX(void)
{
    
     
  TxMessage.StdId=0x01;				//标准标识符为0x01
  TxMessage.IDE=CAN_ID_STD;			//使用标准标识符 CAN_ID_STD 
  TxMessage.RTR=CAN_RTR_DATA;		//为数据帧
  TxMessage.DLC=0x08;				//消息的数据长度为2个字节
  TxMessage.Data[0]=0x01; 			//第1个字节数据  
  TxMessage.Data[1]=0x02; 			//第2个字节数据  
  TxMessage.Data[2]=0x03; 			//第3个字节数据  
  TxMessage.Data[3]=0x04; 			//第4个字节数据  
  TxMessage.Data[4]=0x05; 			//第5个字节数据  
  TxMessage.Data[5]=0x06; 			//第6个字节数据  
  TxMessage.Data[6]=0x07; 			//第7个字节数据  
  TxMessage.Data[7]=0x08; 			//第8个字节数据  
  CAN_Transmit(CAN1, &TxMessage); 	//发送数据
}

The specific code of the extended frame is as follows:

/* 发送两个字节的数据*/
void CAN_TX(void)
{
    
     

  TxMessage.ExtId=0x1FFFFFFF; 		//扩展标识符 0x1FFFFFFF
  TxMessage.IDE=CAN_ID_EXT;			//使用标准标识符 CAN_ID_EXT 
  TxMessage.RTR=CAN_RTR_DATA;		//为数据帧
  TxMessage.DLC=0x08;				//消息的数据长度为2个字节
  TxMessage.Data[0]=0x01; 			//第1个字节数据  
  TxMessage.Data[1]=0x02; 			//第2个字节数据  
  TxMessage.Data[2]=0x03; 			//第3个字节数据  
  TxMessage.Data[3]=0x04; 			//第4个字节数据  
  TxMessage.Data[4]=0x05; 			//第5个字节数据  
  TxMessage.Data[5]=0x06; 			//第6个字节数据  
  TxMessage.Data[6]=0x07; 			//第7个字节数据  
  TxMessage.Data[7]=0x08; 			//第8个字节数据  
  CAN_Transmit(CAN1, &TxMessage); 	//发送数据
}

Two, CAN bus communication reception

pending upgrade. . . . .


Guess you like

Origin blog.csdn.net/MQ0522/article/details/113242004