初级会员

- 积分
- 129
- 金钱
- 129
- 注册时间
- 2019-4-24
- 在线时间
- 17 小时
|

楼主 |
发表于 2021-6-12 11:44:51
|
显示全部楼层
本帖最后由 DanielRise 于 2021-6-12 11:52 编辑
继续把我调试GD32F103RB的CAN总线遇到的问题及解决方法记录在此。
新问题:
原STM32平台下,有
CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
这个中断接收方式很好用。FIFO 0 message pending Interrupt。收到一帧CAN数据,就会进入
void USBD_LP_CAN0_RX0_IRQHandler(void) 中断服务。在里面清除标识就能继续接收CAN数据。
CAN_ClearITPendingBit( CAN1, CAN_IT_FMP0 );
在GD32F103RB平台,只找到了:
can_interrupt_enable(CAN0, CAN_INT_RFNE0);
这意思 receive FIFO0 not empty interrupt enable,
但是却找不到相应的中断标识变量。
can_flag_clear(CAN0, ****** );
****** 代表标识变量,可取数值是枚举类型can_flag_enum。
/* flags in RFIFO0 register */
CAN_FLAG_RFO0 = CAN_REGIDX_BIT(RFIFO0_REG_OFFSET, 4U), /*!< receive FIFO0 overfull */
CAN_FLAG_RFF0 = CAN_REGIDX_BIT(RFIFO0_REG_OFFSET, 3U), /*!< receive FIFO0 full */
/* flags in RFIFO1 register */
CAN_FLAG_RFO1 = CAN_REGIDX_BIT(RFIFO1_REG_OFFSET, 4U), /*!< receive FIFO1 overfull */
CAN_FLAG_RFF1 = CAN_REGIDX_BIT(RFIFO1_REG_OFFSET, 3U), /*!< receive FIFO1 full */
/* flags in ERR register */
CAN_FLAG_BOERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 2U), /*!< bus-off error */
CAN_FLAG_PERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 1U), /*!< passive error */
CAN_FLAG_WERR = CAN_REGIDX_BIT(ERR_REG_OFFSET, 0U), /*!< warning error */
}can_flag_enum;
坑!
|
|