Stm32HAL库CAN使用心得

最近在做一个采集卡项目,用到CAN通信,下面从简单应用的角度做做笔记,供大家批判。

一、CAN工作原理,stm32芯片内集成的发送邮箱,接收FIFO,滤波器等概念

CAN(Controller Area Network)是一种常用于汽车和工业自动化领域的串行通信协议,它具有高可靠性和多主控制的特点。STM32芯片内集成的CAN控制器提供了发送邮箱、接收FIFO和滤波器等功能,以支持CAN通信。

a)发送邮箱:STM32的CAN控制器包含发送邮箱,用于暂存待发送的CAN报文。发送邮箱作为发送缓冲区,发送接收控制器可以根据先来后到或者ID优先级两种方式进行选择发送报文,通过CAN_TX发送到外面的CAN收发器。

b)接收FIFO:接收FIFO(先进先出寄存器,队列)用于存放通过过滤器筛选后的接收到的CAN报文,等待CPU读取处理。STM32的CAN控制器通常有两个接收FIFO,分别为FIFO0和FIFO1,每个FIFO可以配置为接收特定ID的报文。

c)滤波器:STM32的CAN控制器包含多个硬件滤波器,用于筛选接收的CAN报文。滤波器可以设置为接收所有报文或仅接收特定ID的报文。滤波器的配置包括过滤器的模式(屏蔽位模式或标识符列表模式)、位宽(16位或32位)、标识符等。

具体硬件知识可以看看别人的文章,写的都很好,我就不复制粘贴了。

二、配置CAN模块

直接打开cubemx软件去配置

a)配置引脚

代码生成如下:

void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan)

{

  if(hcan->Instance==CAN1)

  {

  /* USER CODE BEGIN CAN1_MspDeInit 0 */



  /* USER CODE END CAN1_MspDeInit 0 */

    /* Peripheral clock disable */

    HAL_RCC_CAN1_CLK_ENABLED--;

    if(HAL_RCC_CAN1_CLK_ENABLED==0){

      __HAL_RCC_CAN1_CLK_DISABLE();

    }



    /**CAN1 GPIO Configuration

    PA11     ------> CAN1_RX

    PA12     ------> CAN1_TX

    */

    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值