stm32f407CAN配置-2020-11-02

1、虽然stm32f4系列具有两个CAN控制器,但是stm32f407只有一个CAN。

2、CAN_Prescaler最终值是等于设置值加一,存储于BRP寄存器里,Fpclk1是APB1总线的时钟,最大值为APB2总线时钟84MHz/2=42MHz。

3、CAN波特率=Fpclk1/((CAN_BS1+CAN_BS2+1)*CAN_Prescaler),举例:CAN波特率=42MHz/((7tq+6tq+1)*6)=500kbps。

4.0、CAN_InitStruct关键成员的含义如下:

4.1、CAN_Prescaler控制时间片tq的长度;

4.2、CAN_Mode包括正常模式、回环模式、静默模式、回环静默模式;

4.3、CAN_SJW用于设置极限长度,即重新同步时单次可增加或缩短的最大长度,范围为1~4tq;

4.4、CAN_BS1、CAN_BS2位时序,前者范围1~16tq,后者1~8tq;

4.5、FunctionalState使能或失能某些的状态;

4.6、CAN_TICM是否使用为时间触发的功能;

4.7、CAN_ABOM是否使用自动离线管理,使能后可在节点离线后自动恢复而不需要软件来干预;

4.8、CAN_AWUM是否使用自动唤醒功能,使能后可在监测到总线活动后自动唤醒;

4.9、CAN_NART是否使用自动重传功能,使能后会一直发送报文直到成功为止;

4.10、CAN_RFLM是否使用锁定接收FIFO,如果使能锁定,那么当FIFO溢出后就会丢弃新的数据,否则就是使用新的数据覆盖原有数据;

4.11、CAN_TXFP用于设置发送报文的优先级方法,使能之后将以报文存入邮箱的先后顺序来发送,否则按照报文的ID的优先级进行发送;

5.0、CAN_FilterInitStruct的关键成员含义如下:

5.1、CAN_FilterMaskId有两种情况,当筛选器处于标识符列表模式下时,和CAN_FilterId类似,都是存储要筛选的ID,而当筛选器工作在掩码模式下,存储的是CAN_FilterId对应的掩码;

5.2、CAN_FilterFIFOAssignment用于设置当报文通过筛选器以后存储到哪一个接收的FIFO里,范围为FIFO0或FIFO1;

5.3、CAN_FilterNumber的范围为0~27,一共28个筛选器;

5.4、CAN_FilterMode可设置成列表模式和掩码模式;

5.5、CAN_FilterScale用于设置筛选器的位宽,可选16位或32位;

5.6、CAN_FilterActivation用于设置是否激活该筛选器;

6、CAN_IT_FMPO:消息挂号允许中断

7.0、CanTxMsg结构体关键成员含义如下:

7.1、StdId存储报文的11位标准标识符,范围为0x0~0x7FF;

7.2、ExtId存储报文的29位扩展标识符;

7.3、IDE用于配置选择使用StdId还是ExtId;

7.4、RTR是用于存储报文类型的标志,可配置选择为数据帧还是遥控帧,通常配置成使用数据帧,因为遥控帧没有数据段,所以Data[8]中的成员是没有内容的;

7.5、DLC用于存储数据帧的数据长度,范围0~8字节,如果已配置成遥控帧,该参数可配置为0;

8、CanRxMsg结构体中的FMI用于存储筛选器的编号,也表示了是经过哪个FIFO进行接收的,可用于简化软件处理。

9、CAN收发器使用的是TJA1040。

10、开发板作为CAN终端时需要加上120R的匹配电阻,否则应该去掉以免影响通信。

posted @ 2020-11-03 01:13  migui  阅读(3220)  评论(0编辑  收藏  举报