R5F10BAC单片机CAN接收缓冲区未填充、接收中断未触发原因排查
R5F10BAC CAN自收自发无接收中断/缓冲区无数据问题排查
不需要使用INTP0外部中断,CAN接收有专属的中断源,与外部中断无关联。以下是具体排查方向和解决步骤:
1. 确认CAN接收过滤与FIFO配置
- 检查FIFO Buffer 0的过滤ID与掩码寄存器(如
RFMSK00L/RFMSK00H、RFID00L/RFID00H等),确保发送报文的ID能匹配过滤规则。若ID不匹配,报文会被直接丢弃,无法进入接收缓冲区。 - 验证
RFCR0寄存器的RFEN位是否置1,确保FIFO Buffer 0处于接收使能状态。
2. 检查CAN中断配置
- 确认
RIER0寄存器的RIE0位已置1,开启FIFO 0的接收中断请求。 - 检查全局中断是否开启(已执行
EI指令,IE寄存器对应位置1),同时确认CAN模块的全局中断使能位(如CANIER寄存器相关位)是否正确设置。 - 核对接收中断向量地址,确保中断服务函数绑定到正确的向量位置,避免中断触发后跳转至错误地址。
3. 物理层与回环模式设置
- 若无外接CAN节点,需确认CAN控制器是否开启内部回环模式:多数CAN控制器默认不开启自回环,需通过寄存器(如
CANCTR的相关位)主动配置,才能让发送的报文被自身接收端捕获。 - 检查外接CAN收发器(如TJA1050)的工作状态:确认STB引脚处于正常工作模式,CAN_H与CAN_L间是否按需接入终端电阻(部分收发器需终端电阻才能正常自收自发)。
4. 轮询方式验证接收功能
- 暂时关闭中断,轮询
RFCR0寄存器的RFDF位(FIFO 0数据满标志)。若发送后该位置1,说明接收缓冲区已有数据,问题出在中断配置环节;若仍未置1,则需回到过滤、回环模式等配置项排查。
内容的提问来源于stack exchange,提问作者TDC5 - Multilink
相关产品推荐
相关产品推荐

