初级会员

- 积分
- 105
- 金钱
- 105
- 注册时间
- 2013-7-9
- 在线时间
- 5 小时
|
我最近在调试stm32f105vct6的CAN2通信功能,我的CAN1没用到,只用到了CAN2,硬件管脚分别是PB13和PB12,但是一直调不通,找了ST官方库例程,网上例程,发现好多同仁都困惑CAN2发送没有问题,但接受不到数据,确切的说是接受数据后无法进入中断或查询FIFO中没有数据。通过示波器观察,总线上是有收发数据的。
解决办法
步骤1:使用CAN1初始化函数,将对应的时钟,CAN编号等修改为CAN2,此为基本配置,不赘述;
步骤2:开启CAN1的RCC,因为CAN1是主,CAN2是从,CAN2无法直接访问SRAM存储器;
(见附图中参考手册对CAN的描述,一直没理解主CAN与从CAN用法上有啥区别,现在再回过头来看看这句话,似乎迷迷糊糊懂了点儿)
步骤3:过滤器的配置,如果对CAN2的过滤器使用的是14~27,那么恭喜你,你成功的躲避了一个问题点,你的程序可正常收发了;如果你有强迫症,使用了0~13中的过滤器,必须添加了一个函数CAN_SlaveStartBank(x);//x<=你设置的过滤器编号,此函数的意义请在参考手册寄存描述中查看。
以上注意点希望能帮助到大家。
另外,多谢“我是来捣乱的”在帖子http://www.openedv.com/posts/list/32378.htm中的回答帮助了我,“我来补充一下吧,107单独使用CAN2按照CAN1来配置CAN2,需要修改的地方有两点:一,过滤器通道选择14;二、开启CAN1的RCC,因为CAN1是主,CAN2是从,CAN2无法直接访问SRAM存储器”,但其提到“一,过滤器通道选择14”似乎不太严谨,但可正常使用,如果不同已将,大家提出来一起交流,谢谢!
|
-
参考手册中对双CAN的解释
|