调试STM32F107的CAN2竟然无法接收。通过与另一个代码对比,终于发现想用CAN2,则必须把CAN1的RCC也配置上,就可以接收了。
上网查了下,21IC给解释http://bbs.21ic.com/icview-542674-1-1.html。手册也懒得看了,总之,CAN2和CAN1是有关联的。对于STM32F407可能也是如此。
如果设置两遍也不行。也是CAN2不能接收。
比如这样设置两遍:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
那么不行,只有在整个工程中设置一遍才可以,如下:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
只有先使能CAN1 然后才使能CAN2 否则有的不好用。
上面这些都是试出来的,没看文档,没理论依据。
关于FIFO 的配置 可以看这个文章http://blog.csdn.net/varding/article/details/39179125
而我目前只是采用一个FIFO0.
好用就得。实时性对我来说是次要的。