STM32H743+CubeMX-两路FDCAN同时工作的终极方案(RTX5)

一、前言

终极方案的配置如下:

  1. FDCAN1与FDCAN2同时工作
  2. FDCAN的工作模式为普通CAN(可以跑CANopen协议)
  3. 每路FDCAN有32个接收FIFO
  4. 每路FDCAN有32个发送FIFO
  5. 通讯波特率:1M
  6. 接收中断+水印中断(防止FIFO溢出)
  7. 滤波器设置:接收标准帧,接收所有范围的ID

STM32工程:
链接:https://pan.baidu.com/s/1eo-ob49Vt-MGZFVzN0gRcg
提取码:9u9a

二、CubeMX

2.1、Clock Configuration

系统时钟设置480M。
在这里插入图片描述
通过分频,将FDCAN的时钟源设置成20M。
在这里插入图片描述

2.2、FDCAN1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

FDCAN2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、代码

3.1、添加BSP

之前写好的代码,封装成BSP(在STM32工程里复制即可)。往工程添加如下文件:

  1. bsp_fdcan.c(中断回调函数,中断配置等代码都在这个文件里)
  2. bsp_fdcan.h
  3. bsp.c
  4. bsp.h
    在这里插入图片描述

fdcan.c

首先,在CubeMX生成的函数MX_FDCAN1_Init( )设置水印。计算FDCAN2的messageRAMOffset是可选的,不一定要加这个代码。
在这里插入图片描述
在这里插入图片描述

3.3、main.c

在main.c里运行了如下代码:

  1. 初始化FDCAN滤波器。
  2. 开启FDCAN控制器。
  3. 初始化FDCAN中断。
    在这里插入图片描述
    在这里插入图片描述
    因为这个工程运行了RTOS,开启FDCAN中断必须在消息队列后面。所以如果没有RTOS的话,直接在fdcan1.rx_Filter_Init( )后直接调用fdcan1.rx_Interrupt_Init()即可。
    在这里插入图片描述

四、调试FDCAN

4.1、测试发送CAN报文

thread_LED_App函数每500ms执行一次。
在这里插入图片描述
从CAN分析仪观察是否收到报文。
在这里插入图片描述
从以上的测试看来,FDCAN1与FDCAN2都正常发送CAN报文了。

4.2、测试接收CAN报文

4.2.1、FDCAN1接收

使用CAN分析仪的CAN0(连接FDCAN1)发送报文。在Keil软件上将fdcan1添加到Wathc1窗口上,可以从变量fdcan1看到CAN报文的内容,跟CAN分析仪上的一样。所以,FDCAN1成功接收CAN报文。
在这里插入图片描述

4.2.2、FDCAN2接收

使用CAN分析仪的CAN1(连接FDCAN2)发送报文,在Keil软件上将fdcan2添加到Watch1窗口上,可以从变量fdcan2里看到CAN报文的内容,跟CAN分析仪上的一样。所以,FDCAN2成功接收CAN报文。
在这里插入图片描述

五、细节补充

5.1、FDCAN中断回调函数

在接收中断函数里,如果是裸机的话(没有RTOS系统),直接将这些代码删除即可。以FDCAN1的接收中断函数为例:
在这里插入图片描述

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值