完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 2018-5-22 14:14 编辑
程序却无法正确执行,会一直卡在没有消息接收到那里,不知道是什么原因,希望各位帮助一下。 谢谢,谢谢!!! |
|
相关推荐
15个回答
|
|
Hi Yichao,
在帮你找到问题之前,我有几个小问题需要你的帮忙确认一下,一个CAN总线调试不通无外乎也就是硬件方面和软件程序配合操作的不成功而已。 首先,麻烦先确定你的CAN总线在物理连接上面都多了,CaN高和CAN低没有接反,另外两块板之间最好共地链接。另外CAN总线节点终端的120欧的匹配电阻都有接。 其次,你在把工程从CCS换到IAR的过程中是怎么操作的,是通过我们的HALCOGEN重新建立一个IAR的工程,还是说是把CCS工程里面的原文件单独倒过来了。如果是前者的话,麻烦仔细比对二者在CAN总线界面的设置。注意波特律是否一样,是不是都是采用标准帧还是采用了默认的扩展帧。还有就是ID符是否正确,有没有设置过滤寄存器。 如果这些都确认没问题的话,那只能在确定一下主机端是否工作正常,用示波器抓一下CAN总线的波形。确认总线上发送出来了带正确ID符的报文信息。 希望上述的信息能够帮到你定位问题,如果还有什么疑问的地方,我们可以继续交流。 谢谢 ken BR, KEN |
|
|
|
lining870815844 发表于 2018-5-22 02:54 谢谢你的回复。 第一个问题,硬件方面应该没有任何问题,就是同一块板子,在ccs下调试可以通过,在IAR下调试会一直卡在等待接收消息那里,不知道原因在哪里。 第二个问题,我是直接将CCS下的内容直接复制到IAR下的,比如sys_main.c,can.c can.h,system.h等头文件都拷贝过来。这样才会出现上面的问题,在ccs下正常运行,在IAR下却始终收不到任何消息。 非常感谢你的回复。 |
|
|
|
bobnice 发表于 2018-5-22 03:00 Hi Yichao, 首先因为我现在电脑里没有装IAR,所以不能生成一个实例给你试试。 不过你可以先这样尝试一下,打开我们的HALCOGEN,重新建立一个和IAR相符的工程。具体操作就是在新建工程的时候,在tools那个选项框里选择IAR tools。然后参考你以前符合CCS的那个配置,完全同样的设置到新的工程中。 然后在copy sys_main.c文件到新的工程里面。在编译下载到板子上面看看运行状况。 另外还有一个问题想确认一下,你接收报文是用的中断接收还是查询接收。如果是终端接收的话,还要注意vim.c里面关于中断通道的配置。 谢谢 肯 BR, KEN |
|
|
|
lining870815844 发表于 2018-5-22 03:19 谢谢,我现在HALCOGEN下试试。 接收的时候用的是查询接收。 谢谢你。 |
|
|
|
lining870815844 发表于 2018-5-22 03:19 你好,我现在用HALCOGEN生成了IAR下的工程,但是还是无法通过,我可能没有设置正确,不知道你可否给我一个例子(IAR模式下CAN设置情况) 我在IAR下程序会一直卡在while(!canIsRxMessageArrived(canREG1, canMESSAGE_BOX1));这个地方。 现在想设置3137不屏蔽任何消息,不知道和设置CCS的有什么区别 这一个是你上次回答我的解决方案:你可以通过修改HALCOGEN里面的ID来修改你的程序。或者是说做如下的改变。这样CAN节点就不会屏蔽任何ID,所有的CAN 信息都会接收。 canREG1->IF1MSK = 0xC0000000U | (((uint32)0x00000000U & (uint32)0x000007FFU) << (uint32)18U); 谢谢了,真的非常感谢。 |
|
|
|
bobnice 发表于 2018-5-22 03:52 Hi Yichao, 谢谢你的回复,我们公司没有IAR的license,而且电脑上不能装破解版软件。所以关于能在IAR上调试工程,这个我暂时还给不了你。 不过我在HALCOGEN里面建立了一个机遇IAR的工程,里面使能和配置了CAN的基本要求,波特率是500bps,11位ID的标准帧, messagebox 接收CAN报文,同时屏蔽寄存器不做设置,允许接收总线上任何ID的报文。接收采用查询方式。 这个文件需要用HALCOGEn打开,然后你在自动生成代码,然后再把你的main程序加进去。 由于我不能在线调试,所以这个文件也只是一个最基本的文件。 如果可以的话,你可以把你的工程发到我个人的邮箱里面,我帮你看看你的代码。 ken-wang@ti.com 希望能帮到你。 谢谢 肯 BR, KEN |
|
|
|
能发一下你的CAN通信的程序给我学习学习吗?我用TMS320F28069程序一直卡住在发送哪里,接收程序也卡住在接收位置!希望你能帮帮忙~邮箱:592876981@qq.com
|
|
|
|
uwufjwer 发表于 2018-5-22 04:17 Hi Jiajun, 你用的我们的C2000的F28069,我这个帖子是介绍我们安全MCU的CAN通信的。不过两者的设置也差不多。 你的CAN总线发送和接收都卡在查询标志位的地方,造成这种现象有几种原因: 1. 硬件上面,你使用的是两块板子还是说是一块板子。如果是两块板子的话,你可以用示波器监测一下总线上的波形,或者如果你有类似于USB-CAN的设备可以挂在总线上监听一下总线报文,看通信线路是否正常。如果是单块板子的,你可以试试CAN模块的TEST模式,也就是自发自收模式,看看这个通不通,如果还有问题的话,那就是在CAN模块的初始化有问题了。 2. 软件方面,首先确认两个节点的CAN通信速率是一致的,接收端和发送端设置的报文ID相符的,不然是收不到报文,建立不了通信的。 如果你有装我们公司的Controlsuite的话,你可以在里面找到F28069关于CAN模块的一个例程代码。里面的设置可供你参考。 如果没有的话,可以下载下面我上传的工程代码。 谢谢 ken BR, KEN |
|
|
|
lining870815844 发表于 2018-5-22 04:24 你好,Ken Wang 我硬件是相同的两块板,芯片换了一下一块28069,和28062.CAN自测模式下能通信的,初始化是下面这段 /* 使能eCAN模块接收发送功能*/ ECanaRegs.CANTIOC.bit.TXFUNC = 1; ECanaRegs.CANRIOC.bit.RXFUNC = 1; /* 配置eCAN模块功能 */ ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; ECanaShadow.CANMC.bit.ABO = 1; // AutoBusOpening =1 enable =0 diaable ECanaShadow.CANMC.bit.STM = 0; // =0 normal,=1 selftesting //ECanaShadow.CANMC.bit.SCB = 1; // =1 eCAN =0 SCC ECanaShadow.CANMC.bit.SCB = 0; // =1 eCAN =0 SCC ECanaShadow.CANMC.bit.DBO = 0; // =0:MSB ; =1:LSB ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; /* 初始化先将所有邮箱控制位清0*/ ECanaMboxes.MBOX0.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX1.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX2.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX3.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX4.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX5.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX6.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX7.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX8.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX9.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX10.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX11.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX12.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX13.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX14.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX15.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX16.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX17.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX18.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX19.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX20.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX21.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX22.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX23.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX24.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX25.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX26.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX27.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX28.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX29.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX30.MSGCTRL.all = 0x00000000; ECanaMboxes.MBOX31.MSGCTRL.all = 0x00000000; // TAn, RMPn, GIFn bits are all zero upon reset and are cleared again // as a matter of precaution. ECanaRegs.CANTA.all = 0xFFFFFFFF; /* Clear all TAn bits */ ECanaRegs.CANRMP.all = 0xFFFFFFFF; /* Clear all RMPn bits */ ECanaRegs.CANGIF0.all = 0xFFFFFFFF; /* Clear all interrupt flag bits */ ECanaRegs.CANGIF1.all = 0xFFFFFFFF; /* CCR置,等待CCE置位,使eCANA进入配置模式*/ ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; ECanaShadow.CANMC.bit.CCR = 1 ; // Set CCR = 1 ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; while(ECanaRegs.CANES.bit.CCE != 1 ) [] // Wait for CCE bit to be set.. ECanaShadow.CANBTC.all = 0; /* The following block is for 80 MHz SYSCLKOUT. (40 MHz CAN module clock Bit rate = 1 Mbps See Note at end of file. */ ECanaShadow.CANBTC.bit.BRPREG = 1; ECanaShadow.CANBTC.bit.TSEG2REG = 4; ECanaShadow.CANBTC.bit.TSEG1REG = 13; ECanaShadow.CANBTC.bit.SAM = 1; ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all; ECanaShadow.CANGAM.all = ECanaRegs.CANGAM.all; ECanaShadow.CANGAM.bit.AMI = 1; ECanaRegs.CANGAM.all = ECanaShadow.CANGAM.all; ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; ECanaShadow.CANMC.bit.CCR = 0 ; // Set CCR = 0 ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; // Wait until the CPU no longer has permission to change the configuration registers while(ECanaShadow.CANES.bit.CCE != 0 )[] // Wait for CCE bit to be cleared.. /* Disable all Mailboxes */ ECanaRegs.CANME.all = 0; // Required before writing the MSGIDs 发送的配置 /* 写消息标识符 MSGID */ ECanaMboxes.MBOX5.MSGID.all = 0x10000000; ECanaMboxes.MBOX5.MSGID.bit.IDE = 1; // 扩展标识符 /* 配置 Mailbox 5 作为发送邮箱 */ ECanaShadow.CANMD.all = ECanaRegs.CANMD.all; ECanaShadow.CANMD.bit.MD5 = 0; ECanaRegs.CANMD.all = ECanaShadow.CANMD.all; /* 使能邮箱 */ ECanaShadow.CANME.all = ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME5 = 1; ECanaRegs.CANME.all = ECanaShadow.CANME.all; /* 在消息控制寄存器中写 DLC 区 */ ECanaMboxes.MBOX5.MSGCTRL.bit.DLC = 1; CpuTimer0Regs.TCR.bit.TSS = 0; 主函数 ECanaMboxes.MBOX5.MDL.byte.BYTE0 = 0x55; ECanaShadow.CANTRS.all = 0; ECanaShadow.CANTRS.bit.TRS5 = 1; // 设置 TRS for mailbox under test ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all; while(ECanaRegs.CANTA.bit.TA5 == 0 ) [] // 等待 TA5 bit 置位.. TXcounter++; ECanaShadow.CANTA.all = 0; ECanaShadow.CANTA.bit.TA5 = 1; // 清除 TA5 ECanaRegs.CANTA.all = ECanaShadow.CANTA.all; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 接收的邮箱配置 /* 写消息标识符 MSGID 区 */ ECanaMboxes.MBOX1.MSGID.all = 0x10000000; // 扩展标识符 // ECanaMboxes.MBOX1.MSGID.all = 0x9555AAA1; ECanaMboxes.MBOX1.MSGID.bit.IDE = 1; /* 配置邮箱1作为接收器邮箱 */ ECanaShadow.CANMD.all = ECanaRegs.CANMD.all; ECanaShadow.CANMD.bit.MD1 = 1; ECanaRegs.CANMD.all = ECanaShadow.CANMD.all; /* 使能邮箱mailbox 1 */ ECanaShadow.CANME.all = ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME1 = 1; ECanaRegs.CANME.all = ECanaShadow.CANME.all; 接收的主函数 do [ ECanaShadow.CANRMP.all = ECanaRegs.CANRMP.all; ] while(ECanaShadow.CANRMP.bit.RMP1 != 1 ); // 等待 RMP1置位.. RXcounter++; ECanaShadow.CANRMP.bit.RMP1 = 1; w[0]= ECanaMboxes.MBOX1.MDL.byte.BYTE0; w[1]= ECanaMboxes.MBOX1.MDL.byte.BYTE1; w[2]= ECanaMboxes.MBOX1.MDL.byte.BYTE2; w[3]= ECanaMboxes.MBOX1.MDL.byte.BYTE3; w[4]= ECanaMboxes.MBOX1.MDH.byte.BYTE4; w[5]= ECanaMboxes.MBOX1.MDH.byte.BYTE5; w[6]= ECanaMboxes.MBOX1.MDH.byte.BYTE6; w[7]= ECanaMboxes.MBOX1.MDH.byte.BYTE7; ECanaRegs.CANRMP.all = ECanaShadow.CANRMP.all; // 清除 RMP1 位并重新启动接收 请帮忙看一下那里有问题了,发送的CANH有波形输出的,CAN收发器总线也有波形,接收端的引脚也有波形输入。 |
|
|
|
uwufjwer 发表于 2018-5-22 04:37 Hi jiajun, 关于c2000的产品,我用得不多,CAN通信模块不是特别的清楚,我需要先查看一下我们相关的文档,再分析一下你的代码。 我会尽快回复你。 谢谢 ken BR, KEN |
|
|
|
1)邮箱初始化配置:首先应确定从32个邮箱中选择要配置的目标邮箱,比如配置成发送邮箱或接收邮箱,一般是成对出现的。然后是对靠近的邮箱进行ID号(标识符)的配置,数据长度,优先级的设置,是远程帧还是普通扩展数据帧等。
具体步骤总结如下:第一步在写标识符前必须将所有邮箱屏蔽掉,ECanaRegs.CANME.all=0。(第五步,最后将要用到的邮箱配置好后,使能需要用到的邮箱,比如邮箱0和邮箱16,ECanaRegs.CANME.bit.ME0=1;ECanaRegs.CANME.bit.ME16=1;)第二步:通过向寄存器CANMC的CDR位请求改变数据区,该位允许快速更新数据消息。再第五步的时候,需要将该位写0,CPU请求正常操作。第三步,设置邮箱的ID(标识符,发送邮箱对应的接收邮箱的标识符是一致的,这个需注意),数据方向寄存器配置了发送邮箱还是接收邮箱。数据长度,发送优先级的设置,以及是否有远方应答帧的请求,向邮箱RAM区写数据(这个注意:ECanaboxes.MBOXO.MDRL.all=?ECanaboxes.MBOXO.MDRH.all=?) 2)邮箱初始化之后,就可以对其进行发送或者接收操作啦!前面第一步主要是前奏,现在进入主题。 消息的发送操作,分为五步: 第一步:清除CANTRS发送请求置位寄存器---当邮箱n准备发送时,CPU将TRSn置1,启动发送。就相当于一个开关一样,当数据要被发送时,将开关TRSn闭合,则数据发送出去。上电复位,各位都被清0。接着配置发送响应寄存器CANTA,如果邮箱n中的消息已经发送成功,则相应的TAn将置位。CPU通过向TANTA中的位写1,使其复位。如果已经产生中断,向CANTA寄存器写1,则可以清除中断,向CANTA寄存器写0没有影响。上电后,寄存器所有的位都被清除。 第二步:初始化邮箱,见第一部分。 第三步:设置TRS请求发送标志,请求发送消息 第四步:等待传输响应位置位,邮箱完成发送。(由0置1才能跳出循环等待,这点是关键!!!) 第五步:复位TA和传输标志,需要向相应的寄存器位写1才能清零(这点相当重要,向该位写1才能清零,等待下一次发送!!!)。 3)消息的接收操作,分五步操作 第一步:设置局部接收屏蔽寄存器LAMn,它可以指明哪些标识符位 第二步:初始化邮箱 第三步:等待接收响应标志置位 第四步:CPU读取邮箱中的数据 第五步:复位接收消息挂起标志 |
|
|
|
你好,我最近在调LS3137的CAN程序,用的硬件和你相同,不知大侠能不能给我发一份程序,谢谢!我的邮箱xieyijian123@163.com
|
|
|
|
lining870815844 发表于 2018-5-22 02:54 你好,请问120的终端电阻一定要接入吗?会影响TA置位吗。我的TA一直不置位,程序卡在等待置位死循环,看样子没有发送成功,是什么原因呢 |
|
|
|
wei, 你问的还是C2000的产品的问题,为了更快方便你找到帮助,建议你还是去C2000的论坛里面重新开一个帖子,发下问题,会比较好一些 BR, KEN |
|
|
|
您好!我也遇到这个问题了,可以向您请教吗?
|
|
|
|
只有小组成员才能发言,加入小组>>
344 浏览 1 评论
539 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
783 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
655 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1138 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
73浏览 29评论
232浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
258浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
206浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
66浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 23:54 , Processed in 1.328530 second(s), Total 103, Slave 87 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号