在线时间45 小时
UID202602
注册时间2010-7-24
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 279
- 最后登录
- 2020-12-20
|
将KEA的CAN过滤器设置为四个16位, 用的是官方KE06的库, 具体设置如下:
/* 定义四个接收ID */
#define Rx_ID1 0x201
#define Rx_ID2 0x301
#define Rx_ID3 0x401
#define Rx_ID4 0x501
#define CAN_IDAR0 ((Rx_ID1<<21) + (Rx_ID2<<5)) /* 四个16位ID接收寄存器 */
#define CAN_IDAR1 ((Rx_ID3<<21) + (Rx_ID4<<5)) /* 格式: ID10_ID03:ID02_ID00 RTR IDE Reserved2_0 */
#define CAN_IDMR0 (uint32_t)(0x1F<<16) + 0x1F /* 四个16位ID屏蔽寄存器, 1-忽略, 0-关心 */
#define CAN_IDMR1 (uint32_t)(0x1F<<16) + 0x1F /* 格式: 0000 0000 0001 1111, 0000 0000 0001 1111 */
/* CAN模块初始化 */
void CAN_module_init(void)
{
MSCAN_ConfigType sMSCANConfig = {0};
sMSCANConfig.sBaudRateSetting.SJW = BAUD_RATE_SJW;
sMSCANConfig.sBaudRateSetting.BRP = BAUD_RATE_BRP;
sMSCANConfig.sBaudRateSetting.SAMP = BAUD_RATE_SAMP;
sMSCANConfig.sBaudRateSetting.TSEG1= BAUD_RATE_TSEG1;
sMSCANConfig.sBaudRateSetting.TSEG2= BAUD_RATE_TSEG2;
sMSCANConfig.u32IDAR0 = (CAN_IDAR0);
sMSCANConfig.u32IDAR1 = (CAN_IDAR1);
sMSCANConfig.u32IDMR0 = (CAN_IDMR0);
sMSCANConfig.u32IDMR1 = (CAN_IDMR1);
sMSCANConfig.u8IDARMode = ID_ACCEPT_MODE_FOUR16; /* 四个16位ID模式 */
sMSCANConfig.sSetting.bCanEn = 1; //MSCAN模块使能
sMSCANConfig.sSetting.bCLKSRC = 0; //1-总线时钟
// sMSCANConfig.sSetting.bLoopModeEn = 1;
sMSCANConfig.sSetting.bRxFullIEn=0; //接收满中断
sMSCANConfig.sSetting.bTimerEn=0; //MSCAN内部计时器
sMSCANConfig.sSetting.bOverRunIEn=0; //数据溢出中断
sMSCANConfig.sSetting.bStatusChangeIEn=0; //CAN状态改变中断
//sMSCANConfig.sSetting.bTxEmptyIEn=1;
CAN_Init(MSCAN, &sMSCANConfig);
}
问题: 这样设置后, ID为Rx_ID2和Rx_ID4的CAN帧接收不到.
请问: CAN_IDAR0/CAN_IDAR1及CAN_IDMR0/CAN_IDMR1, 应该如何设置? 请各位大拿帮忙啦
最佳答案
whgtsq 发表于 2017-3-3 15:45
谢谢, 我试试看
如果还有问题,欢迎继续交流。
如果问题解决了,还请帮忙结贴。
|
|