社区导航

 

搜索
查看: 2205|回复: 9

[原创] 盘它STM32H750之四(浅谈CANFD之一)

[复制链接]

941

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-6-24 22:22 | 显示全部楼层 |阅读模式

    太久没发帖了,刚好EE编辑器改了,看着确实比以前舒服了点。EE管理员为了坛友方便确实做了不少努力。

    话也不多说。玩起这个CANFD,只是单纯想玩下,没想到确实比传统CAN优势大多了。而且自己在公司项目上,设备对内通信上都是传统CAN,对于一些数据量传输稍微有些要求的,传统CAN确实显得力不从心。

    先谈CANFD这个词,英文总称是CAN-Flexible DataRate,从词面上就可以知道就是CAN的数据段波特率可变。也就是说,CAN-FD配置下,仲裁段(BRS到ACK)这部分速率与传统CAN一样最高为1Mbps,但是数据段上的速率可以达到5Mbps上,这样能保证更快速率的应用需求。这是第一点,这个在cubemx配置的话,也不至于不明白。

   第二点,传统CAN的一帧报文最多只能收发8字节数据,而CAN-FD则可以收发最高的64字节数据。这样大大提高了传输效率。这个在cubemx上,同样也可以初始化配置。

   楼主在本贴中,将以配置cubemx初始化代码说明,并且根据自制的CANFD分析仪,分析相关报文。





此内容由EEWORLD论坛网友RCSN原创,如需转载或用于商业用途需征得作者同意并注明出处

 

 

此帖出自stm32/stm8论坛


回复

使用道具 举报

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2019-6-24 22:30 | 显示全部楼层

我好像赶上直播了~



回复

使用道具 举报

941

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-6-24 22:38 | 显示全部楼层

 楼主现在用STM32开发,大部分情况下都是使用stm32cubemx生成初始化代码,所以在这里我也是按照cubemx生成过程来进行说明。楼主的H750板子有按键、RGB、debug串口、CAN。所以这里就使能了相关的外设 1.png

先说明下CANFD的时钟配置,CANFD的时钟可由HSE、PLL1Q、PKK2Q提供,楼主选择用PLL1Q,正常情况下可最高达400M。在这里楼主只是使用20M,比较方便配置波特率。

2.png

3.png

 

 

 

 

  

     



回复

使用道具 举报

941

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-6-24 23:09 | 显示全部楼层

接下来再看下FDCAN Configuration窗口的相关配置。 4.png

     初看这个窗口配置,楼主一开始也是有点懵逼,相比以前的CAN配置,确实多了不少内容。楼主就针对主要的相关配置内容进行说明。楼主在这里已经选择FDCAN模式为FD模式,传统CAN模式跟F1 F4等类型,这里主要说明CANFD模式下的相关配置。 5.png

  1、Frame Format:这个包含两种帧格式:FD mode with BitRate Switching和FD mode without BitRate Switching。这两个的区别就在楼主刚开始说明的CANFD功能一样。数据帧可变速率配置。这个配置其实就是比特率切换,在FDCAN_CCCR寄存器中,也就是在FD操作使能位的后一位。FD操作使能位必须使能,也就是该位置1。之后再配置比特率切换位,该比特率切换位置1为使能,也就是决定了数据位速率,数据段的的位速率可以数据数据位寄存器FDCAN_DBTP配置来切换数据段的波特率,使之数据段的波特率可以高于仲裁短的波特率,而仲裁段的波特率由标称位寄存器FDCAN_NBTP进行配置,这就是CANFD的一大特点。CAN的数据段波特率可变。当选择FD mode without BitRate Switching时候,也就是禁止比特率切换,此时仲裁段和数据段的波特率一样,FDCAN_DBTP寄存器配置也没用。

    7.png

  2、由上面可知,两个报文段的波特率分别由FDCAN_DBTP和FDCAN_NBTP两个决定,对应的cubemx的配置如下截图:

  6.png

 

 



回复

使用道具 举报

941

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-6-24 23:31 | 显示全部楼层

 3、Auto Retranmission、Transmit pause、Protocol Exception。这三个配置主要针对发送而言。一个是自动重传,当总线出现仲裁发送失败时候,在空闲时会自动重传上一帧报文,这里我并不需要,所以禁能了;一个是发送暂停,这个配置对于一些特殊处理比较有用,在指定的时候暂停发送,这里初始化并不需要暂停发送,所以也是禁能了。第三个为协议异常处理功能,我查了下资料,这个功能的意思是使能该协议异常处理时,在接收帧数据过程中检测到隐性的保留位时, 该功能将使操作状态转变为 IDLE 并在下一个采样点中止当前帧。反之禁用此功能的话,隐性的保留位将被视为格式错误,并当做错误帧来进行处理,也可以使能相关中断自己处理。楼主配置如下。 8.png   4、再来说明CANFD的四个模式。正常模式、总线监控模式、内部回环测试、外部回环测试。内外部回环测试一般是验证下节点的收发是否有问题。总线监控模式是只收不发,监控总线报文。正常模式为收发。楼主在这里测试了内外部回环测试,链路是没问题。所以最后再切换到正常模式中来。
9.png

    5、再配置下收发FIFO的元素编号、长度等。这个我还没仔细了解,有空再细读下。但大概知道的是,传输的长度要对应FIFO的字节大小。我这里使用16个字节一帧传输。

10.png

    6、楼主此贴主要说明CANFD相关配置,故不使用任何中断收发,使用的是阻塞式轮询收发。所以NVIC设置那里并没有设置

11.png

 
 



回复

使用道具 举报

941

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-6-24 23:39 | 显示全部楼层

     1、由cubemx生成的初始化代码如下,我们就只需要再配置下相关滤波器组,这里我接收没过滤任何ID,所以ID都接收,再配置下发送为16字节发送,波特率可变等,再使用HAL_FDCAN_Start开启CANFD工作。

12.png

13.png

  2、这里我使用按键,触发一次则发送一次报文。接收到的报文则转发的debug串口上。

15.png

14.png

 



回复

使用道具 举报

941

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2019-6-24 23:46 | 显示全部楼层

接线以及效果图如下:

20.png 21.png



回复

使用道具 举报

5632

TA的帖子

207

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-6-25 08:50 | 显示全部楼层

楼主牛

EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,虽然在群里买不到板子,但是可以学会开车;虽然学不到技术,但是可以学会开车;商家勿入!加群暗号:喵


回复

使用道具 举报

7

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2019-8-5 17:04 | 显示全部楼层

楼主牛



回复

使用道具 举报

305

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2019-8-7 11:24 | 显示全部楼层

大佬,CANFD相对于传统的CAN的传输效率高很多呀



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-11-16 10:41 , Processed in 0.289092 second(s), 17 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表