修正图像文件夹名称.
Signed-off-by: ithink.chan <chenyang@autoai.com>
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 188 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 551 KiB After Width: | Height: | Size: 551 KiB |
|
@ -6,7 +6,7 @@ bxCAN是STM32系列最稳定的IP核之一,无论有哪个新型号出来,
|
||||||
|
|
||||||
## 2、准备工作
|
## 2、准备工作
|
||||||
|
|
||||||
### 2.1、为什么要过滤器?
|
### 2.1、为什么要过滤器
|
||||||
|
|
||||||
在这里,我们可以将CAN总线看成一个广播消息通道,上面传输着各种类型的消息,好比报纸,有体育新闻,财经新闻,政治新闻,还有军事新闻,每个人都有自己的喜好,不一定对所有新闻都感兴趣,因此,在看报纸的时候,一般人都是只看自己感兴趣的那类新闻,而过滤掉其他不感兴趣的内容。那么我们一般是怎么过滤掉那些不感兴趣的内容的呢?下面有两种方法来实现这个目的:
|
在这里,我们可以将CAN总线看成一个广播消息通道,上面传输着各种类型的消息,好比报纸,有体育新闻,财经新闻,政治新闻,还有军事新闻,每个人都有自己的喜好,不一定对所有新闻都感兴趣,因此,在看报纸的时候,一般人都是只看自己感兴趣的那类新闻,而过滤掉其他不感兴趣的内容。那么我们一般是怎么过滤掉那些不感兴趣的内容的呢?下面有两种方法来实现这个目的:
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ bxCAN是STM32系列最稳定的IP核之一,无论有哪个新型号出来,
|
||||||
|
|
||||||
下面假设我们是古时候一座城镇的守卫,城主要求只有1156年出生的人才可以进城,我们又该如何执行呢?假设古时候的人也有类似今天的身份证(...->_<-…),大家都知道,身份份证号码中有4位是表示出生年月,如下图:
|
下面假设我们是古时候一座城镇的守卫,城主要求只有1156年出生的人才可以进城,我们又该如何执行呢?假设古时候的人也有类似今天的身份证(...->_<-…),大家都知道,身份份证号码中有4位是表示出生年月,如下图:
|
||||||
|
|
||||||
![身份证](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/001.png)
|
![身份证](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/001.png)
|
||||||
|
|
||||||
如上图,身份证中第7~10这4位数表示的是出生年份,那么,我们可以这么执行:
|
如上图,身份证中第7~10这4位数表示的是出生年份,那么,我们可以这么执行:
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ else
|
||||||
|
|
||||||
对于机器来说,我们要为它准备好两张纸片,一片写上屏蔽码,另一片纸片写上验证码,屏蔽码上相应位为1时,表示此位需要与验证码对应位进行比较,反之,则表示不需要。机器在执行任务的时候先将获取的身份证号码与屏蔽码进行“与”操作,再将结果与验证码的进行比较,根据判断是否相同来决定是否通过。整个判别流程如下所示:
|
对于机器来说,我们要为它准备好两张纸片,一片写上屏蔽码,另一片纸片写上验证码,屏蔽码上相应位为1时,表示此位需要与验证码对应位进行比较,反之,则表示不需要。机器在执行任务的时候先将获取的身份证号码与屏蔽码进行“与”操作,再将结果与验证码的进行比较,根据判断是否相同来决定是否通过。整个判别流程如下所示:
|
||||||
|
|
||||||
![掩码模式的计算过程](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/002.png)
|
![掩码模式的计算过程](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/002.png)
|
||||||
|
|
||||||
从上图可以很容易地理解屏蔽码与验证码的含义,这样一来,能通过的结果数量就完全取决于屏蔽码,设得宽,则可以通过的多(所有位为0,则不过任何过滤操作,则谁都可以通过),设得窄,则通过的少(所有位设为1,则只有一个能通过)。那么知道这个有什么用呢?因为bxCAN的过滤器的掩码模式就是采用这种方式,在bxCAN中,分别采用了两个寄存器(CAN_FiR1,CAN_FiR2)来存储屏蔽码与验证码,从而实现掩码模式的工作流程的。这样,我们就知道了bxCAN过滤器的掩码模式的大概工作原理。
|
从上图可以很容易地理解屏蔽码与验证码的含义,这样一来,能通过的结果数量就完全取决于屏蔽码,设得宽,则可以通过的多(所有位为0,则不过任何过滤操作,则谁都可以通过),设得窄,则通过的少(所有位设为1,则只有一个能通过)。那么知道这个有什么用呢?因为bxCAN的过滤器的掩码模式就是采用这种方式,在bxCAN中,分别采用了两个寄存器(CAN_FiR1,CAN_FiR2)来存储屏蔽码与验证码,从而实现掩码模式的工作流程的。这样,我们就知道了bxCAN过滤器的掩码模式的大概工作原理。
|
||||||
|
|
||||||
|
@ -82,16 +82,16 @@ else
|
||||||
|
|
||||||
1986 年德国电气商BOSCH公司开发出面向汽车的CAN 通信协议,刚开始的时候,CAN ID定义为11位,我们称之为标准格式,ISO11898-1标准中CAN的基本格式如下图所示:
|
1986 年德国电气商BOSCH公司开发出面向汽车的CAN 通信协议,刚开始的时候,CAN ID定义为11位,我们称之为标准格式,ISO11898-1标准中CAN的基本格式如下图所示:
|
||||||
|
|
||||||
![标准CAN报文格式定义](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/003.png)
|
![标准CAN报文格式定义](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/003.png)
|
||||||
|
|
||||||
如上图所示,标准CAN ID存放在上图ID18~ID28中,共11位。随着工业发展,后来发现11位的CAN ID已经不够用,于是就增加了18位,扩展CAN ID到29位,如下图所示:
|
如上图所示,标准CAN ID存放在上图ID18~ID28中,共11位。随着工业发展,后来发现11位的CAN ID已经不够用,于是就增加了18位,扩展CAN ID到29位,如下图所示:
|
||||||
|
|
||||||
![扩展CAN报文格式定义](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/004.png)
|
![扩展CAN报文格式定义](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/004.png)
|
||||||
|
|
||||||
从上图对比扩展CAN报文与标准CAN报文,发现在仲裁域部分,扩展CAN报文的CAN ID包含了base Identifier与extension Identifier,即基本ID与扩展ID,而标准CAN报文的CAN ID部分只包含基本ID,扩展ID(ID0~ID17)被放在基本ID的右方,也就是说,属于低位。知道这些有什么用呢?至少我们可以得到这两条信息:
|
从上图对比扩展CAN报文与标准CAN报文,发现在仲裁域部分,扩展CAN报文的CAN ID包含了base Identifier与extension Identifier,即基本ID与扩展ID,而标准CAN报文的CAN ID部分只包含基本ID,扩展ID(ID0~ID17)被放在基本ID的右方,也就是说,属于低位。知道这些有什么用呢?至少我们可以得到这两条信息:
|
||||||
|
|
||||||
标准ID一般小于或等于<=0x7FF(11位),只包含基本ID。
|
* 标准ID一般小于或等于<=0x7FF(11位),只包含基本ID。
|
||||||
对于扩展CAN的低18位为扩展ID,高11位为基本ID。
|
* 对于扩展CAN的低18位为扩展ID,高11位为基本ID。
|
||||||
|
|
||||||
例如标准CAN ID 0x7E1,二进制展开为0b 0[111 1110 0001] ,只有中括号内的11位才有效,其全部是基本ID。
|
例如标准CAN ID 0x7E1,二进制展开为0b 0[111 1110 0001] ,只有中括号内的11位才有效,其全部是基本ID。
|
||||||
|
|
||||||
|
@ -103,19 +103,19 @@ else
|
||||||
|
|
||||||
首先过滤模式分列表模式和掩码模式,因此,对于没有过滤器,我们需要这么一个位来标记,用户可以通过设置这个位来标记他到底是想要这个过滤器工作在列表模式下还是掩码模式,于是,这个表示过滤模式的位就定义在CAN_FM1R寄存器中的FBMx位上,如下图:
|
首先过滤模式分列表模式和掩码模式,因此,对于没有过滤器,我们需要这么一个位来标记,用户可以通过设置这个位来标记他到底是想要这个过滤器工作在列表模式下还是掩码模式,于是,这个表示过滤模式的位就定义在CAN_FM1R寄存器中的FBMx位上,如下图:
|
||||||
|
|
||||||
![CAN过滤器模式寄存器CAN_FM1R定义](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/005.png)
|
![CAN过滤器模式寄存器CAN_FM1R定义](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/005.png)
|
||||||
|
|
||||||
这里以STM32F407为例,bxCAN共有28个过滤器,于是上图的每一个位对应地表示这28个过滤器的工作模式,供用户设置。”0”表示掩码模式,”1”表示列表模式。
|
这里以STM32F407为例,bxCAN共有28个过滤器,于是上图的每一个位对应地表示这28个过滤器的工作模式,供用户设置。”0”表示掩码模式,”1”表示列表模式。
|
||||||
|
|
||||||
另外,我们知道了标准CAN ID位11位,而扩展CAN ID有29位,对于标准的CAN ID来说,我们有一个16位的寄存器来处理他足够了,相应地,扩展CAN ID,我们就必须使用32位的寄存器来处理它,而在实际应用中,根据需求,我们可能自始至终都只需要处理11位的CAN ID。对于资源严重紧张的MCU环境来说,本着不浪费的原则,这里最好能有另外一个标志用告诉过滤器是否需要处理32位的CAN ID。于是,bxCAN处于这种考虑,也设置了这么一个寄存器CAN_FS1R来表示CAN ID的位宽,如下图所示:
|
另外,我们知道了标准CAN ID位11位,而扩展CAN ID有29位,对于标准的CAN ID来说,我们有一个16位的寄存器来处理他足够了,相应地,扩展CAN ID,我们就必须使用32位的寄存器来处理它,而在实际应用中,根据需求,我们可能自始至终都只需要处理11位的CAN ID。对于资源严重紧张的MCU环境来说,本着不浪费的原则,这里最好能有另外一个标志用告诉过滤器是否需要处理32位的CAN ID。于是,bxCAN处于这种考虑,也设置了这么一个寄存器CAN_FS1R来表示CAN ID的位宽,如下图所示:
|
||||||
|
|
||||||
![CAN过滤器位宽寄存器CAN_FS1R定义](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/006.png)
|
![CAN过滤器位宽寄存器CAN_FS1R定义](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/006.png)
|
||||||
|
|
||||||
如上图,每一个位对应着bxCAN中28个过滤器的位宽,这个需要用户来设置。
|
如上图,每一个位对应着bxCAN中28个过滤器的位宽,这个需要用户来设置。
|
||||||
|
|
||||||
于是根据模式与位宽的设置,我们共可以得出4中不同的组合:32位宽的列表模式,16位宽的列表模式,32位宽掩码模式,16位宽的掩码模式。如下图所示:
|
于是根据模式与位宽的设置,我们共可以得出4中不同的组合:32位宽的列表模式,16位宽的列表模式,32位宽掩码模式,16位宽的掩码模式。如下图所示:
|
||||||
|
|
||||||
![CAN过滤器的4中工作模式](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/007.png)
|
![CAN过滤器的4中工作模式](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/007.png)
|
||||||
|
|
||||||
在bxCAN中,每个过滤器都存在这么两个寄存器CAN_FxR1和CAN_FxR2,这两个寄存器都是32位的,他的定义并不是固定的,针对不同的工作模式组合他的定义是不一样的,如列表模式-32位宽模式下,这两个寄存器的各位定义都是一样的,都用来存储某个具体的期望通过的CAN ID,这样就可以存入2个期望通过的CAN ID(标准CAN ID和扩展CAN ID均可);若在掩码模式-32位宽模式下时,则CAN_FxR1用做32位宽的验证码,而CAN_FxR2则用作32位宽的屏蔽码。在16位宽时,CAN_FxR1和CAN_FxR2都要各自拆分成两个16位宽的寄存器来使用,在列表模式-16位宽模式下,CAN_FxR1和CAN_FxR2定义一样,且各自拆成两个,则总共可以写入4个标准CAN ID,若在16位宽的掩码模式下,则可以当做2对验证码+屏蔽码组合来用,但它只能对标准CAN ID进行过滤。这个就是bxCAN过滤器的解决方案,它采用了这4种工作模式。
|
在bxCAN中,每个过滤器都存在这么两个寄存器CAN_FxR1和CAN_FxR2,这两个寄存器都是32位的,他的定义并不是固定的,针对不同的工作模式组合他的定义是不一样的,如列表模式-32位宽模式下,这两个寄存器的各位定义都是一样的,都用来存储某个具体的期望通过的CAN ID,这样就可以存入2个期望通过的CAN ID(标准CAN ID和扩展CAN ID均可);若在掩码模式-32位宽模式下时,则CAN_FxR1用做32位宽的验证码,而CAN_FxR2则用作32位宽的屏蔽码。在16位宽时,CAN_FxR1和CAN_FxR2都要各自拆分成两个16位宽的寄存器来使用,在列表模式-16位宽模式下,CAN_FxR1和CAN_FxR2定义一样,且各自拆成两个,则总共可以写入4个标准CAN ID,若在16位宽的掩码模式下,则可以当做2对验证码+屏蔽码组合来用,但它只能对标准CAN ID进行过滤。这个就是bxCAN过滤器的解决方案,它采用了这4种工作模式。
|
||||||
|
|
||||||
|
@ -129,22 +129,24 @@ else
|
||||||
|
|
||||||
引脚如下:
|
引脚如下:
|
||||||
|
|
||||||
|
```blk
|
||||||
PD0: CAN1_Rx
|
PD0: CAN1_Rx
|
||||||
PD1: CAN1_Tx
|
PD1: CAN1_Tx
|
||||||
PG6: LED1
|
PG6: LED1
|
||||||
PG8: LED2
|
PG8: LED2
|
||||||
PI9: LED3
|
PI9: LED3
|
||||||
PC7: LED4
|
PC7: LED4
|
||||||
|
```
|
||||||
|
|
||||||
![引脚定义](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/008.png)
|
![引脚定义](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/008.png)
|
||||||
|
|
||||||
时钟树如下设置:
|
时钟树如下设置:
|
||||||
|
|
||||||
![时钟树设置](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/009.png)
|
![时钟树设置](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/009.png)
|
||||||
|
|
||||||
在配置中的NVIC中,打开CAN1 RX0接收中断,如下图所示:
|
在配置中的NVIC中,打开CAN1 RX0接收中断,如下图所示:
|
||||||
|
|
||||||
![打开CAN1的RX0接收中断](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/010.png)
|
![打开CAN1的RX0接收中断](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/010.png)
|
||||||
|
|
||||||
其他的没有什么特殊设置,生成工程后的main函数如下:
|
其他的没有什么特殊设置,生成工程后的main函数如下:
|
||||||
|
|
||||||
|
@ -220,7 +222,7 @@ void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan)
|
||||||
|
|
||||||
### 4.2、32位宽的列表模式
|
### 4.2、32位宽的列表模式
|
||||||
|
|
||||||
![32位宽下的CAN_FxR1与CAN_FxR2各位定义](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/011.png)
|
![32位宽下的CAN_FxR1与CAN_FxR2各位定义](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/011.png)
|
||||||
|
|
||||||
如上图所示,在32位宽的列表模式下,CAN_FxR1与CAN_FxR2都用来存储希望通过的CAN ID,由于是32位宽的,因此既可以存储标准CAN ID,也可以存储扩展CAN ID。注意看上图最底下的各位定义,可以看出,从右到左,首先,最低位是没有用的,然后是RTR,表示是否为远程帧,接着IDE,扩展帧标志,然后才是EXID[0:17]这18位扩展ID,最后才是STID[0:10]这11位标准ID,也就是前面所说的基本ID。在进行配置的时候,即将希望通过的CAN ID写入的时候,要注意各个位对号入座,即基本ID放到对应的STD[0:10],扩展ID对应放到EXID[0:17],若是扩展帧,则需要将IDE设为“1”,标准帧则为“0”,数据帧设RTR为“0”,远程帧设RTR为“1”。示例代码如下:
|
如上图所示,在32位宽的列表模式下,CAN_FxR1与CAN_FxR2都用来存储希望通过的CAN ID,由于是32位宽的,因此既可以存储标准CAN ID,也可以存储扩展CAN ID。注意看上图最底下的各位定义,可以看出,从右到左,首先,最低位是没有用的,然后是RTR,表示是否为远程帧,接着IDE,扩展帧标志,然后才是EXID[0:17]这18位扩展ID,最后才是STID[0:10]这11位标准ID,也就是前面所说的基本ID。在进行配置的时候,即将希望通过的CAN ID写入的时候,要注意各个位对号入座,即基本ID放到对应的STD[0:10],扩展ID对应放到EXID[0:17],若是扩展帧,则需要将IDE设为“1”,标准帧则为“0”,数据帧设RTR为“0”,远程帧设RTR为“1”。示例代码如下:
|
||||||
|
|
||||||
|
@ -261,7 +263,7 @@ sFilterConfig.FilterIdHigh = StdId<<5;
|
||||||
|
|
||||||
### 4.3、16位宽的列表模式
|
### 4.3、16位宽的列表模式
|
||||||
|
|
||||||
![16位宽的列表模式](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/012.png)
|
![16位宽的列表模式](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/012.png)
|
||||||
|
|
||||||
如上图所示,在16位宽的列表模式下,FilterIdHigh,FilterIdLow,FilterMaskIdHigh,FilterMaskIdLow这4个16位变量都是用来存储一个标准CAN ID,这样,就可以存放4个标准CAN ID了,需要注意地是,此种模式下,是不能处理扩展CANID,凡是需要过滤扩展CAN ID的,都是需要用到32位宽的模式。于是有以下代码示例:
|
如上图所示,在16位宽的列表模式下,FilterIdHigh,FilterIdLow,FilterMaskIdHigh,FilterMaskIdLow这4个16位变量都是用来存储一个标准CAN ID,这样,就可以存放4个标准CAN ID了,需要注意地是,此种模式下,是不能处理扩展CANID,凡是需要过滤扩展CAN ID的,都是需要用到32位宽的模式。于是有以下代码示例:
|
||||||
|
|
||||||
|
@ -296,7 +298,7 @@ static void CANFilterConfig_Scale16_IdList(void)
|
||||||
|
|
||||||
### 4.4、32位宽掩码模式
|
### 4.4、32位宽掩码模式
|
||||||
|
|
||||||
![32位宽掩码模式](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/013.png)
|
![32位宽掩码模式](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/013.png)
|
||||||
|
|
||||||
如上图所示,32位宽模式下,FilterIdHigh与FilterIdLow合在一起表示CAN_FxR1寄存器,用来存放验证码,而FilterMaskIdHigh与FilterMaskIdLow合在一起表示CAN_FxR2寄存器,用来存放屏蔽码,关于验证码与屏蔽码的概念在之前的2.3节已经明确说明了,不清楚的可以回过去看看2.3节的内容。在32位宽的掩码模式下,既可以过滤标准CAN ID,也可以过滤扩展CAN ID,甚至两者混合这来也是可以的,下面我们就这3中情况分别给出示例。
|
如上图所示,32位宽模式下,FilterIdHigh与FilterIdLow合在一起表示CAN_FxR1寄存器,用来存放验证码,而FilterMaskIdHigh与FilterMaskIdLow合在一起表示CAN_FxR2寄存器,用来存放屏蔽码,关于验证码与屏蔽码的概念在之前的2.3节已经明确说明了,不清楚的可以回过去看看2.3节的内容。在32位宽的掩码模式下,既可以过滤标准CAN ID,也可以过滤扩展CAN ID,甚至两者混合这来也是可以的,下面我们就这3中情况分别给出示例。
|
||||||
|
|
||||||
|
@ -445,7 +447,7 @@ static void CANFilterConfig_Scale32_IdMask_StandardId_ExtendId_Mix(void)
|
||||||
|
|
||||||
如下图所示:
|
如下图所示:
|
||||||
|
|
||||||
![16位宽的掩码模式](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/014.png)
|
![16位宽的掩码模式](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/014.png)
|
||||||
|
|
||||||
如上图所示,在16位宽的掩码模式下,CAN_FxR1的低16位是作为验证码,对应的16位屏蔽码为CAN_FxR1的高16位,同样的,CAN_FxR2的低16位是作为验证码,对应与CAN_FxR2的高16位为屏蔽码。于是,其示例代码如下:
|
如上图所示,在16位宽的掩码模式下,CAN_FxR1的低16位是作为验证码,对应的16位屏蔽码为CAN_FxR1的高16位,同样的,CAN_FxR2的低16位是作为验证码,对应与CAN_FxR2的高16位为屏蔽码。于是,其示例代码如下:
|
||||||
|
|
||||||
|
@ -503,7 +505,7 @@ static void CANFilterConfig_Scale16_IdMask(void)
|
||||||
|
|
||||||
上述代码运行的STM3240G-EVAL评估板上,使用ZLG的USBCAN-2E-U盒子配合PC上的软件CANTest进行验证,整个系统连接后的效果如下图所示:
|
上述代码运行的STM3240G-EVAL评估板上,使用ZLG的USBCAN-2E-U盒子配合PC上的软件CANTest进行验证,整个系统连接后的效果如下图所示:
|
||||||
|
|
||||||
![测试环境](./imgs/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/015.png)
|
![测试环境](./img/再谈_STM32_的_CAN_过滤器_-bxCAN_的过滤器的_4_种工作模式以及使用方法总结/015.png)
|
||||||
|
|
||||||
## 5. 总结
|
## 5. 总结
|
||||||
|
|
||||||
|
|