这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » 车载CAN总线通信测试

共4条 1/1 1 跳转至

车载CAN总线通信测试

助工
2025-03-09 12:08:49     打赏

1、简介

CAN(Controller Area Network)通信是一种用于汽车和工业环境中的多主机通信协议。它是由德国Bosch公司于1980年代开发,旨在降低汽车中电子控制单元(ECU)之间的通信复杂性。CAN总线允许不同ECU之间进行有效、可靠的数据交换。

CAN通信广泛应用于汽车行业,它允许车辆的各个控制系统(如引擎管理、动力总成、底盘控制、车身电子等)之间进行通信。此外,CAN也被用于工业自动化、医疗设备、机器人技术等领域,因为它提供了高效率和高度可靠的数据通信方式。

在物理层面上,CAN总线通常使用两根线(CAN高和CAN低)形成一个差分信号,这样可以在高电磁干扰环境下保持通信的稳定性。随着技术的发展,CAN协议也不断更新,比如CAN FD(CAN with Flexible Data-Rate)就是CAN协议的一个扩展,它支持更高的数据传输速率和更长的数据字段。

2、准备工具

带CAN通信外设的开发板一套,这里以STM32L431RCT6主控板为例;

CAN逻辑分析仪1个;

CAN PHY模块1个。

实物图片

39a0dc22ade8c02765fc1887f92fff02.jpg

3、CubeMX配置

以下将CAN通信速率设为500Kbit/s,通信模式为Normal双向通信,选择生成MDK工程

YL4O084``KYYWJE(V$$OFUB.png

3.1、Keil测试代码

在can.c文件添加CAN滤波器配置

/* USER CODE BEGIN 1 */
void Configure_Filter(void)
{
    CAN_FilterTypeDef sFilterConfig;
    
    sFilterConfig.FilterIdHigh=0X0000;     
    sFilterConfig.FilterIdLow=0X0000;
    sFilterConfig.FilterMaskIdHigh=0X0000; 
    sFilterConfig.FilterMaskIdLow=0X0000;  
    sFilterConfig.FilterFIFOAssignment=CAN_FILTER_FIFO0;
    sFilterConfig.FilterBank=1;          	 
    sFilterConfig.FilterMode=CAN_FILTERMODE_IDMASK;
    sFilterConfig.FilterScale=CAN_FILTERSCALE_32BIT;
    sFilterConfig.FilterActivation=ENABLE; 
    sFilterConfig.SlaveStartFilterBank=14;
    
    if(HAL_CAN_ConfigFilter(&hcan1,&sFilterConfig)!=HAL_OK)
    {
        Error_Handler();
    }
}
/* USER CODE END 1 */

main.c文件

int main(void)
{

  /* USER CODE BEGIN 1 */
  CAN_TxHeaderTypeDef Can_Tx;
	static uint8_t txdata[8] = {0x03,0x11,0x03,0x42,0x77,0x0a,0x07,0x08};
	uint32_t pTxMailbox = 0;

	Can_Tx.StdId = 0x122;
//	Can_Tx.ExtId = 0x123;

	Can_Tx.IDE = 0;
	Can_Tx.RTR = 0;
	Can_Tx.DLC = 8;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_CAN1_Init();
  /* USER CODE BEGIN 2 */
  Configure_Filter();
  HAL_CAN_Start(&hcan1);
  HAL_CAN_ActivateNotification(&hcan1,CAN_IT_RX_FIFO0_MSG_PENDING);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
	HAL_CAN_AddTxMessage(&hcan1,&Can_Tx,txdata,&pTxMailbox);
	HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

3.2、CAN通信连线

D(RX3AW_%`{9IH09]1WKO)A.png

从引脚配置图找到CAN通信接口绑定的引脚情况

]LM8]K9NB[2P8AXTCX)]WQA.png

3.3、测试结果

使用CAN分析仪上位机分析,上位机的CAN速率务必和实际CAN通信速率移植,否则协议解码是错误的。

image.png

下位机每隔500毫秒发送长度为8的数据包,可以看到上位机解析的数据与程序发送的数据一致

image.png






关键词: CAN通信测试    

院士
2025-03-09 15:24:26     打赏
2楼

  CAN(Controller Area Network)通信是一种用于汽车和工业环境中的多主机通信协议。谢谢分享。


专家
2025-03-09 17:07:37     打赏
3楼

感谢分享


专家
2025-03-09 17:10:14     打赏
4楼

感谢分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]