STM32CAN相关

STM32CAN相关

一.两路CAN配置注意事项

双CAN说明
双CAN如图所示,因此配置CAN2时,一定要先开启CAN1的时钟[否则CAN2可以发送不能接收]

1.时钟配置

RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); //先开CAN1时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE); //再开启CAN2时钟

2.过滤器配置

//stm32f10x_can.h  中描述
  uint8_t CAN_FilterNumber;          /*!< Specifies the filter which will be initialized. It ranges from 0 to 13. */

此处应为单CAN的过滤器,双路CAN为0-27
因此配置CAN2的过滤器为14-27[测试设置0-13无法收发]

2.CAN过滤器配置

首先吐槽一下这个过滤器只能设置自己需要的ID,不能设置自己不想要的ID

过滤器描述
目前用的是32标识符屏蔽,所以目前只提标识符屏蔽的使用
假设我要接收ID中第二个字节F0-F7的扩展数据帧如图所示进行配置
CAN_FilterIdHigh的ID左移3位是为了与图片中ID位对应[扩展帧ID共29位]
CAN_FilterIdLow用于接收扩展帧和数据帧的值分别为0x04 0x01 对应库函数中CAN_ID_EXT 和CAN_RTR_DATA的值
CAN_FilterMaskIdHigh的值表示对应位为1时CAN_FxR1必须对应才能收到数据,为0的位表示不关心该位情况

    CAN_FilterInitStructure.CAN_FilterNumber = 14;     /* 过滤器14  双CAN0-27 */   
    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;  /* 屏敝模式 */
    CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; /* 32位 */
    CAN_FilterInitStructure.CAN_FilterIdHigh= ((0x0000F000<<3)&0xFFFF0000)>>16;     //0X0000f0000
    CAN_FilterInitStructure.CAN_FilterIdLow=((0x0000F000<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;         //F000
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh=((0x0000F800<<3)&0xFFFF0000)>>16;
    CAN_FilterInitStructure.CAN_FilterMaskIdLow=((0x0000F800<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;     //F800

3.关于接收中断及FIFO

假设CAN1使用FIFO0
相关配置如下

CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0; 
CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
void CAN1_RX0_IRQHandler(void)

假设CAN1使用FIFO1
相关配置和使用函数如下

CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO1; 
CAN_ITConfig(CAN1, CAN_IT_FMP1, ENABLE);
void CAN1_RX1_IRQHandler(void)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南方秋野,北方春茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值