请选择 进入手机版 | 继续访问电脑版
查看: 1905|回复: 0

[原创] 【LPC1768】CAN通讯

[复制链接]
  • TA的每日心情
    奋斗
    4 小时前
  • 签到天数: 2147 天

    [LV.Master]伴坛终老

    17

    主题

    4597

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9736
    最后登录
    2024-4-16
    发表于 2019-3-10 23:41:41 | 显示全部楼层 |阅读模式
            IRD-LPC1768-DEV开发板有两路CAN通讯的接口,通过P0.0、P0.1作为CAN1的RD1、TD1,P0.4、P0.5作为CAN2的RD2、TD2。

            IRD-LPC1768-DEV作为工业开发的板卡,两路CAN接口分别配置了CAN收发器TJA1040D,对外输入输出可以通过D9口,也可以通过针脚,两路的CANH/CANL线路在内部也有测试的短接排针CAN_TEST,通过回环可以内部测试,两路之间进行收发,非常方便。
    can接口.JPG

    看手册:还有一种配置:P0.21、P0.22作为CAN1的RD1、TD1,P2.7、P2.8作为CAN2的RD2、TD2。

    TJA1040D也是NXP的产品。TJA1040D是控制器局域网CAN 协议控制器和物理总线之间的接口,它主要应用在客车的高速应用上,速度可达
    1Mbaud。TJA1040 为总线提供差动的发送功能,为CAN 控制器提供差动的接收功能,TJA1040有优秀的EMC性能,而且在不上电状态下有理想的无源性能,它还提供低功耗管理支持远程唤醒。


    我找了一些例程,尝试了很久,总算可以收发了。
    用官方的例程吧,测试两板之间的CAN通讯,两个CAN1口进行通讯,波特率都设置为125kHz,可发送接收。

    发送4条信息:
    -1条11位ID的消息,退出AF查找表
    -1条11位ID的消息,不退出AF查找表
    -1条29位ID的消息,退出AF查找表
    -1条29位ID的消息,不退出AF查找表

    用CAN分析仪进行测试,接线如下:
    接线.jpg

    程序运行后接收到4条:
    接收.JPG

    主要功能实现
    1. int c_entry(void) {
    2.         uint32_t result,i;
    3.         PINSEL_CFG_Type PinCfg;

    4. debug_frmwrk_init();
    5.         print_menu();

    6.         /* Pin configuration
    7.          * CAN1: select P0.0 as RD1. P0.1 as TD1
    8.          */
    9.         PinCfg.Funcnum = 1;
    10.         PinCfg.OpenDrain = 0;
    11.         PinCfg.Pinmode = 0;
    12.         PinCfg.Pinnum = 0;
    13.         PinCfg.Portnum = 0;
    14.         PINSEL_ConfigPin(&PinCfg);
    15.         PinCfg.Pinnum = 1;
    16.         PINSEL_ConfigPin(&PinCfg);

    17.         //Initialize CAN1
    18.         CAN_Init(LPC_CAN1, 125000);
    19. #if CAN_RECEIVE
    20.         //Enable Interrupt
    21.         CAN_IRQCmd(LPC_CAN1, CANINT_RIE, ENABLE);

    22.         //Enable CAN Interrupt
    23.         NVIC_EnableIRQ(CAN_IRQn);
    24.         CAN_SetAFMode(LPC_CANAF, CAN_Normal);


    25.         _DBG_("Test Acceptance Filter function...");
    26.         CAN_SetAFMode(LPC_CANAF, CAN_Normal);
    27.         result = CAN_SetupAFTable(); /* setup AF Look-up Table */
    28.         if (result != CAN_OK) {
    29.                 _DBG_("Setup AF: ERROR...");
    30.                 while(1);
    31.         }
    32.         else _DBG_("Setup AF: SUCCESSFUL...");_DBG_("");
    33.         _DBG_("Recieving message...");
    34. #else
    35.         CAN_InitAFMessage(); /* initialize Transmit Message */
    36.         for (i = 0; i < TX_BUFFER_SIZE; i++)
    37.         {
    38.                 CAN_SendMsg(LPC_CAN1, &AFTxMsg[i]);
    39.                 PrintMessage(&AFTxMsg[i]);_DBG_("");
    40.                 for(result=0;result<10000;result++);
    41.                 CANTxCount++;
    42.         }
    43.         _DBG_("Sending finished !!!");
    44. #endif
    45.         while (1);
    46. }
    复制代码





    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-16 12:28 , Processed in 0.118319 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表