STR912FAW44X6 CAN驱动库1.2版本 bug修正 仅供参考
1.硬件环境
STR912FAW44X6+CTM8250(ZLG)+CANUSB-I(CAN转USB接口卡 自主研制 兼容ZLG USBCAN-I)
2. CAN驱动库1.2版本修正概述
使用CAN驱动库1.2版本实际调试(非回环模式)时发现当使用24位ID时,发送以及中断接受的ID错位,其修改方法如下:
CAN_SendMessage中
/* extended ID*/ /*CAN->sMsgObj[0].A1R = EXT_FIXED_ID_ARB_L(pCanMsg->Id); CAN->sMsgObj[0].A2R = (CAN->sMsgObj[0].A2R & 0xE000) | EXT_FIXED_ID_ARB_H(pCanMsg->Id);*/
修改成以下代码(当然直接修改ST底层定义的宏也可以) //Modified by seuembed from above to below,in order to correct the can extended ID bug in standard lib! CAN->sMsgObj[0].A1R = (pCanMsg->Id)&0xFFFF; CAN->sMsgObj[0].A2R = (CAN->sMsgObj[0].A2R & 0xE000) | (((pCanMsg->Id)>>16)&0x1FFFF);
CAN_ReceiveMessage中
/* extended ID*/ /*pCanMsg->IdType = CAN_EXT_ID; pCanMsg->Id = ((CAN->sMsgObj[1].A2R >> 2) & 0x07FF); pCanMsg->Id |= ((u32)CAN->sMsgObj[1].A1R << 11); pCanMsg->Id |= (((u32)CAN->sMsgObj[1].A2R & 0x0003) << 27);*/
修改成以下代码(当然直接修改ST底层定义的宏也可以) //Modified by seuembed from above to below,in order to correct the can extended ID bug in standrd lib! 071213 pCanMsg->IdType = CAN_EXT_ID; pCanMsg->Id = ((u32)CAN->sMsgObj[1].A1R)&0xFFFF|(((u32)CAN->sMsgObj[1].A2R & 0x1FFF)<<16);
3. CAN驱动库1.2版本成功使用关键初始化注意点(在ST的任何例程中都没有找到实际应用时中断接受的初始化要点):
//以下是1Mbps的设置 CAN_EnterInitMode(CAN_CR_CCE|CAN_CR_IE); CAN_SetTiming(4, 3,1, 6); CAN_LeaveInitMode();
建议ST向zlg推广sja1000和Stellaris系列片子一样把CAN实际应用的常用波特率设置函数写的完善一点,以方便初学者
欢迎交流:www.embedded-soc.com 相关链接:http://www.embedded-soc.com |