完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人想测试一下板上can1和can2通信,于是用了手册里的can通信例程,代码如下,但是我用usbcan只能收到can1发的消息,并没有接受到can2收到的消息,于是我做了一些调整如下:
通过中断调试,can1发了一次,can2收了一次,但是测试例程是can1发8个消息的,并且在调试过程中,我发现程序,一直卡在这个地方(跳不出循环): while(!canIsRxMessageArrived(canREG2, canMESSAGE_BOX1)); 刚入坑,希望各位能解答一下我的疑惑,谢谢。 最后我提下我想实现的效果,希望大家能提供一些意见,我想要can1发can2收,并且can2收到的信息通过串口打印出来。 |
|
相关推荐
1个回答
|
|
源码:
#include "sys_common.h" #include "system.h" /* USER CODE BEGIN (1) */ #include "can.h" #include "esm.h" #include "sys_core.h" #define D_COUNT 8 uint32 cnt=0, error =0, tx_done =0; uint8 tx_data[D_COUNT][8] = {0}; uint8 rx_data[D_COUNT][8] = {0}; uint8 *tx_ptr = &tx_data[0][0]; uint8 *rx_ptr = &rx_data[0][0]; uint8 *dptr=0; void dumpSomeData(); /* USER CODE END */ /* USER CODE BEGIN (2) */ /* USER CODE END */ void main(void) { /* USER CODE BEGIN (3) */ /* enable irq interrupt in Cortex R4 */ _enable_interrupt_(); dumpSomeData(); canInit(); canEnableErrorNotification(canREG1); canEnableErrorNotification(canREG2); for(cnt=0;cnt canTransmit(canREG1, canMESSAGE_BOX1, tx_ptr); /* transmitting 8 different chunks 1 by 1 */ //canMessageNotification(canREG1,canMESSAGE_BOX1); //canMessageNotification(canREG2,canMESSAGE_BOX1);//原例程只是定义了这个函数,但是没有调用,这里是我自己写上去的 while(tx_done == 0){}; /* ... wait until transmit request is through */ tx_done=0; tx_ptr +=8; /* next chunk ...*/ } tx_ptr = &tx_data[0][0]; rx_ptr = &rx_data[0][0]; for(cnt=0;cnt<63;cnt++) { if(*tx_ptr++ != *rx_ptr++) { error++; /* data error */ } } while(1){}; /* wait forever after tx-rx complete. */ /* USER CODE END */ } /* USER CODE BEGIN (4) */ /* writing some data to ram */ void dumpSomeData()//dump(内存信息)转储 { uint32 tmp = 0x11; cnt = (D_COUNT*8)-1; dptr = &tx_data[0][0]; *dptr = tmp; while(cnt--) { tmp = *dptr++; *dptr = tmp + 0x11; } } /* can interrupt notification */ /* Note-You need to remove canMessageNotification from notification.c to avoid redefinition */ void canMessageNotification(canBASE_t *node, uint32 messageBox) { /* node 1 - transfer request */ if(node==canREG1) { tx_done=1; /* confirm transfer request */ } /* node 2 - receive complete */ if(node==canREG2) { while(!canIsRxMessageArrived(canREG2, canMESSAGE_BOX1)); canGetData(canREG2, canMESSAGE_BOX1, rx_ptr); /* copy to RAM */ rx_ptr +=8; } /* Note: since only message box 1 is used on both nodes we dont check it here.*/ } /* USER CODE END */ |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式-ELFBOARD 4.3吋电容触摸液晶模块简介第三期 :机械机构说明
323 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-i2c与从设备通讯编程示例之开发板测试
1107 浏览 0 评论
ubuntu ping 开发板存在严重的丢包情况,请问该怎么解决?
2225 浏览 1 评论
12G-SDI高清视频开发案例,让4K视频采集更便捷!基于Xilinx MPSoC高性能平台
1904 浏览 0 评论
全志T507-H国产平台Ubuntu系统正式发布,让您的应用开发更便捷!
1299 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-6 06:27 , Processed in 0.618458 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号