CAN总线(HALL库使用)

目录

1.CAN总线介绍

 2.STM32中CAN总线配置

3.HALL库实验


1.CAN总线介绍

1.闭环特点:速度快,距离短(40m)

 2.开环特点:速度慢,距离长(1000m)

 2.STM32中CAN总线配置

stm32的can总线分为5个部分

1.控制部分(配置CAN总线的工作模式)

2.邮箱发送部分(发送3个报文)
3.FIFO存储功能(每个FIFO存储3个报文)

4.筛选器(筛选需要接收的数据)

5.CAN2(使用CAN2时,必须要使能CAN1)


(1)CAN总线结构体

 

(2)CAN发送结构体

 

(3)CAN筛选器结构体 

3.HALL库实验

第一步:在STM32cube中配置时钟

第二步:配置CAN总线

第三步:编写业务程序,因为STM32cube仅能完成CAN的初始化配置,发送/接收数据需要自己编写,使能CAN总线的传输功能(需要自行添加HAL_CAN_Start(&hcan))

(1)接收数据:筛选器筛选设备ID=0x1314的CAN设备的信息,放入FIFO0 

(2)CAN总线发送数据:ID=1314的CAN设备发送数据

4.CAN总线发送数据不成功(已解决)

在CAN总线调试的过程中,发现数据怎么也发出不出去,这个时候有一个很好的解决方法,来判断CAN总线卡在哪一步了,定义一个HAL_StatusTypeDef类型的变量,使用串口打印信息,可以很好的判断程序哪个地方初始化有问题

HAL_StatusTypeDef Can_Config(void)
{
	Init_TxMes();
	CAN_Fileter_Config();

		if(HAL_CAN_ConfigFilter(&hcan, &CAN_FilterInitStruct) != HAL_OK)
	{
		printf("[can.c] error filter");
		return HAL_ERROR;
	}	
	
		if(HAL_CAN_Start(&hcan) == HAL_OK) //Æô¶¯CAN
	{
		printf("[can.c]  CAN start OK! ");
		return HAL_ERROR;
	}
	if(HAL_CAN_Start(&hcan) != HAL_OK) //Æô¶¯CAN
	{
		printf("[can.c] error start ");
		return HAL_ERROR;
	}
	
		if(HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)//¼¤»î½ÓÊÕÖжÏ
	{
		printf("[can.c]  CAN reserve it OK! ");
		return HAL_ERROR;
	}
	
	return HAL_OK;
}

程序运行部分,也使用串口打印信息,判断是否卡在某一步了。 发送信息不成功大部分都是自己编写的结构体初始化的问题,对照自己的发送数据结构体检查一下是否有问题,或是某个函数变量给错了,无法执行,花时间仔细比对一下,问题就解决了。

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if(HAL_CAN_AddTxMessage(&hcan, &CAN_HandleTxMsg, temp, &pTxMailbox) != HAL_OK)
	  {
			printf("[main] info  Tx Fail\r\n");
	  }
		HAL_Delay(500);
		printf("[main] info  Sent success\r\n");
		if(Flag_Rx)
	  {
			Flag_Rx = 0;
			printf("Rx:%d %d %d %d\r\n",RxData[0],RxData[1],RxData[2],RxData[3]);
	  }	 
  }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值