一、CAN总线通信 发送
1. CAN总线通信发送配置流程
- 写入标识符
- 写入标识符类型(标准帧/扩展帧)
- 写入帧类型(远程帧/数据帧)
- 写入数据长度
- 写入数据
- 发送数据
2. CAN总线通信发送相关库函数
发送数据结构体:
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;
发送库函数:
/**
* @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总线通信发送程序
标准帧具体代码如下:
/* 发送数据*/
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); //发送数据
}
扩展帧具体代码如下:
/* 发送两个字节的数据*/
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); //发送数据
}
二、CAN总线通信 接收
待更新。。。。。