打印

STR912FAW44X6 CAN驱动库1.2版本 bug修正 仅供参考

[复制链接]
3149|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seuembed|  楼主 | 2007-12-13 13:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

1

粉丝