基于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相关的寄存器,有独立的寄存器。”
用用过极海的芯片,可以多了解了解 自己给自己顶一下 学习一下 这个是互相移植的吗? pentruman 发表于 2022-6-2 09:12
这个是互相移植的吗?
可以的,原105平台的CAN2可以移植到APM32F103xC和E103系列上。移植流程,查看我CAN2系列文案的第(一)篇 STM32F105代码兼容吗 E103和F103有什么区别呢 touser 发表于 2022-6-2 12:30
STM32F105代码兼容吗
如果你没用到STM32F105的USB Host,主要关注F105的CAN2功能,那么只要做CAN2的移植修改。其他外设代码上都可以兼容 youtome 发表于 2022-6-2 13:27
E103和F103有什么区别呢
制程工艺不一样,但二者引脚定义和外设寄存器的设计、使用一样的。
APM32E103现在只有大容量的xCxE,跟APM32F103xC系列MCU一样,都额外支持CAN2功能(相较于市面通用F103平台来说) CAN filter是什么? lzbf 发表于 2022-6-2 14:37
CAN filter是什么?
CAN外设的过滤器组。设定好后,由MCU硬件来过滤特定的CAN ID报文,免得用户自己在软件上再做筛选判别 这个CAN filter是什么呢 gygp 发表于 2022-7-9 14:00
这个CAN filter是什么呢
CAN外设的过滤器组。设定好后,由MCU硬件来过滤特定的CAN ID报文,免得用户自己在软件上再做筛选判别 谢谢分享,学习了。 可以理解为,APM32F103xC和APM32E103xE的CAN1、CAN2,二者各自有自己的0~13个filter过滤器组,给各自单独使用。所以配置上,以前用惯FST 103 单CAN资源的用户,可以把APM32的CAN2也作为CAN1的复制品用,而不是像ST 105一样——有一个“CAN2SB”寄存器是支持调整0~28过滤器filter分配给CAN1 CAN2使用 学习一下,感觉这个不错的。
调通CAN总线很容易,如果想要做到精通,就难了。 CAN很容,如果弄精通,就很难了。麻烦的很。 CAN2跟can有什么区别呢
页:
[1]
2