Fanexs168 发表于 2022-3-22 10:35

基于STM32F105移植极海E103&F103 CAN2——(二)CAN filter差异

#技术资源# #申请原创# **背景
在上篇**中有提及——“......原ST标准库中,CAN_FilterInit()“只做了CAN1的filter配置”(为什么ST平台可以这样?为什么这里打了双引号?)......”
认真看完上篇**的道友,相信大部分的人都可以用上APM32的CAN2功能了(不会的来留言找我们),但难免还有如下几个疑问:


[*]ST作为通用MCU的行业老大哥,其CAN外设标准库函数,为什么“只会”配置CAN1的filter?老大哥真的会犯这么低级的错误吗?
[*]为什么在STM32F105平台上可以这样用CAN_FilterInit(),但是移植到APM32平台后CAN2的配置就失效了?
[*]STM老大哥的filter是0~27总共28个过滤器组,那这28个filter是怎么分配给到CAN1、CAN2的呢?还是说他们都是混合使用、等用到的时候才使能/关联CAN1/CAN2?怎么工程里不见关联配置这28个filter的操作,反而是简单粗暴地使用起来了(冥冥之中有默认配置)?

抱着“知其然 知其所以然”的态度,我们继续往下剖析下APM32F103/E103和STM32F105的CAN2差异。


二者差异
1、让我们先回到代码层面来分析CAN_FilterInit()这个关键函数
   
可见14~28这14个filter,只存在于STM32F105这种互联型产品里(F103没有!)
   
   

2、在STM32F105的平台上,貌似只要配置了以CAN1为偏移值的某部分寄存器(FMR、FA1R),CAN2外设的filter也会同时生效?
关键王炸来了(来自STM32 Reference Manuel):
ST的F105,对应偏移地址为0x200-0x31C,也即激活配置filter相关的寄存器,只存在于CAN1!这也就解释了,为什么STM老大哥的标准库,在CAN_FilterInit()中只需要管CAN1即可(老大哥还是权威的)。
   

3、我们再查看下APM32对CAN1 CAN2的描述
——意思就是,APM32的CAN1、CAN2,都有其单独关联、激活filter相关的寄存器,有独立的寄存器。
   
   
   

4、额外补充——关于STM32F105的filter号分配
并非”指腹为婚“地被定死了,其实也可以后期“逆天改命”进行修改配置的。跟CAN_FMR寄存器里的CAN2SB位有关
   

   


代码实测
基于APM32 SDK的双CAN例程,仿真实测——实际CAN2对应filter偏移地址的寄存器,是被赋值了,跟上述推论一样:
“APM32的CAN1、CAN2,都有其单独关联、激活filter相关的寄存器,有独立的寄存器。”
   

   


七毛钱 发表于 2022-3-22 16:04

用用过极海的芯片,可以多了解了解

Fanexs168 发表于 2022-5-26 12:50

自己给自己顶一下

WoodData 发表于 2022-5-26 18:11

学习一下

pentruman 发表于 2022-6-2 09:12

这个是互相移植的吗?

Fanexs168 发表于 2022-6-2 09:39

pentruman 发表于 2022-6-2 09:12
这个是互相移植的吗?

可以的,原105平台的CAN2可以移植到APM32F103xC和E103系列上。移植流程,查看我CAN2系列文案的第(一)篇

touser 发表于 2022-6-2 12:30

STM32F105代码兼容吗

youtome 发表于 2022-6-2 13:27

E103和F103有什么区别呢

Fanexs168 发表于 2022-6-2 13:30

touser 发表于 2022-6-2 12:30
STM32F105代码兼容吗

如果你没用到STM32F105的USB Host,主要关注F105的CAN2功能,那么只要做CAN2的移植修改。其他外设代码上都可以兼容

Fanexs168 发表于 2022-6-2 13:32

youtome 发表于 2022-6-2 13:27
E103和F103有什么区别呢

制程工艺不一样,但二者引脚定义和外设寄存器的设计、使用一样的。
APM32E103现在只有大容量的xCxE,跟APM32F103xC系列MCU一样,都额外支持CAN2功能(相较于市面通用F103平台来说)

lzbf 发表于 2022-6-2 14:37

CAN filter是什么?

Fanexs168 发表于 2022-6-2 15:33

lzbf 发表于 2022-6-2 14:37
CAN filter是什么?

CAN外设的过滤器组。设定好后,由MCU硬件来过滤特定的CAN ID报文,免得用户自己在软件上再做筛选判别

gygp 发表于 2022-7-9 14:00

这个CAN filter是什么呢

Fanexs168 发表于 2022-7-10 16:46

gygp 发表于 2022-7-9 14:00
这个CAN filter是什么呢

CAN外设的过滤器组。设定好后,由MCU硬件来过滤特定的CAN ID报文,免得用户自己在软件上再做筛选判别

guijial511 发表于 2022-7-11 08:16

谢谢分享,学习了。

Fanexs168 发表于 2022-8-10 13:55

可以理解为,APM32F103xC和APM32E103xE的CAN1、CAN2,二者各自有自己的0~13个filter过滤器组,给各自单独使用。所以配置上,以前用惯FST 103 单CAN资源的用户,可以把APM32的CAN2也作为CAN1的复制品用,而不是像ST 105一样——有一个“CAN2SB”寄存器是支持调整0~28过滤器filter分配给CAN1 CAN2使用

lajfda001 发表于 2022-8-16 10:23

学习一下,感觉这个不错的。

lajdfla001 发表于 2022-8-16 10:28

调通CAN总线很容易,如果想要做到精通,就难了。

jflahdink09 发表于 2022-8-16 11:11

CAN很容,如果弄精通,就很难了。麻烦的很。

alvpeg 发表于 2022-8-16 20:45

CAN2跟can有什么区别呢   
页: [1] 2
查看完整版本: 基于STM32F105移植极海E103&F103 CAN2——(二)CAN filter差异