在线时间1149 小时
UID3124330
注册时间2015-11-26
NXP金币999
TA的每日心情 | 开心 2019-3-5 08:47 |
---|
签到天数: 1 天 [LV.1]初来乍到
金牌会员
- 积分
- 7818
- 最后登录
- 2024-4-30
|
作为总线,CAN在项目中使用频率越来越高,在选型的时候也是必选的一款外设。LPC1768有两个CAN,如果没有其他通讯板或CAN总线分析工具,可以使用两个CAN,完成自测模式。这篇只是完成标准帧数据的发送与接收,深入的问题在实践中再深入了解。关于CAN的说明,官网上的问题分析及使用手册中说的挺清楚的,不再啰嗦。只述说本人在测试过程中遇到的问题及解决。 要说测试其实也不复杂,使用CAN总线分析工具,就能测试通讯了。但是花了很多天解决。碰到的主要问题就是,各种配置都没问题,下载到板卡中无法发送和接收。检查了n遍配置,按照对该芯片的理解,也修改了n遍配置,各种怀疑和测试,分析来分析去,就是无法通讯。如果遇到这种情况,只有一个办法那就是休息,玩够了再琢磨。我使用的是库函数,想来是不是库函数有问题呢?今日更换了c库文件,测试软件界面出现了数据,然后修改接收,能完成简单的发送和接收了。网上有人说大量数据发送时会出现数据混乱,尚待测试。
使用的CAN1,接线如图1和图2所示。
发送及接收主要配置:
- PINSEL_CFG_Type PinCfg;//pin配置
- PinCfg.Funcnum = 1;
- PinCfg.OpenDrain = 0;
- PinCfg.Pinmode = 0;
- PinCfg.Pinnum = 0;
- PinCfg.Portnum = 0;
- PINSEL_ConfigPin(&PinCfg);
- PinCfg.Pinnum = 1;
- PINSEL_ConfigPin(&PinCfg);
- //Initialize CAN1
- CAN_Init(LPC_CAN1, 125000);
- CAN_IRQCmd(LPC_CAN1, CANINT_RIE, ENABLE);
-
- //Enable CAN Interrupt
- NVIC_EnableIRQ(CAN_IRQn);
- CAN_SetAFMode(LPC_CANAF, CAN_Normal);
- //CAN_SetAFMode(LPC_CANAF, CAN_Normal);
- result = CAN_SetupAFTable();
- CAN_InitAFMessage();
- CAN_SendMsg(LPC_CAN1, &AFTxMsg[0]);
- //发送
- CAN_SendMsg(LPC_CAN1, &AFTxMsg[0]);
- //j接收中断
- IntStatus =CAN_IntGetStatus(LPC_CAN1);
- //check receive interrupt
- if((IntStatus>>0)&0x01)
- {
- CAN_ReceiveMsg(LPC_CAN1, &AFRxMsg[0]);
- }
复制代码
CAN总线测试界面及keil中接收数据如图3和图4:
|
-
原理图
-
连接线
-
keil仿真中接收
-
测试界面接收发送
|