Re: APP009开发板的CAN模块和上位机(PCI9810CAN通讯卡,CAN控制器为SJA1000)通信失败?
|
||||
---|---|---|---|---|
新會員
|
8倍频改为16倍频,就是125kbps。可是我的依然不能通信,我怀疑是不是物理层的不兼容啊?上位机的CAN控制器是SJA1000,而下位机是微芯的嵌入CAN控制器,等高人指点----
發表於: 2009/3/27 19:59
|
|||
|
Re: APP009开发板的CAN模块和上位机(PCI9810CAN通讯卡,CAN控制器为SJA1000)通信失败?
|
||||
---|---|---|---|---|
新會員
|
谢谢你版主,你给的这个例程,我调试过了,能够通过,不过波特率用示波器看和计算好象不是125Kbps,而是125Kbps的一半吧?參照:
發表於: 2009/3/25 20:40
|
|||
|
APP009开发板的CAN模块和上位机(PCI9810CAN通讯卡,CAN控制器为SJA1000)通信失败?
|
||||
---|---|---|---|---|
新會員
|
我用的开发板:APP009-dsPIC40-28 20050110。我用这个开发板和周立功的PCI-9810做CAN通信实验,上位机用周立功自带的ZLGCANTest调试软件,下位机用的这个开发板,程序如下(就是一直接收波特率配置为125KBPS):
#include <p30f4011.h> int failmemory[40]; //--------------------------------------------------------------------------- _FOSC(CSW_FSCM_OFF & XT_PLL16); //XT with 16xPLL oscillator, Failsafe clock off _FWDT(WDT_OFF); //Watchdog timer disabled _FBORPOR(PBOR_OFF & MCLR_EN); //Brown-out reset disabled, MCLR reset enabled _FGS(CODE_PROT_OFF); //Code protect disabled // ---------------------------------------------------------------------------- #define FCY 29491200 // Osc. configuration = XT, PLL * 16 and XT = 7.3728 Mhz unsigned int buffer1; unsigned int buffer2; unsigned int buffer3; unsigned int buffer4; unsigned long int i = 0; void initial1() { C1CTRLbits.REQOP = 0x4; //请求进入配置模式 while (C1CTRLbits.OPMODE!=0x4){} //确认进入配置模式 C1TX0CON = 0x0003; //发送0邮箱配置,高优先级 C1TX0SID = 0x0020; //发送0标准标识符,11位,标准标识符0000 0001 000,报文发送标准标识符 C1TX0DLC = 0x01c0; //发送0数据长度,8字节 C1RX0CON = 0x0000; //接收0邮箱配置 C1RX0DLC = 0x0008; //接收0数据长度,8字节 C1RXF0SID = 0x0020; //接收滤波器0标准标识符,11位,接收代码位0000 0001 000 C1RXM0SID = 0x0001; //接收屏蔽0标准标识符,屏蔽码0000 0000 000 C1CTRLbits.CANCKS=1; //FCAN时钟为FCY C1CFG1 = 0x0088; //波特率为125kbps配置 SJW<1:0>=3Tq,BRP<5:0>=001000 C1CFG2 = ox03e9; //SEG2PH<2:0>=4Tq,SEG1PH<2:0>=6Tq,PRSEG<2:0>=2Tq,采样3次 C1CTRLbits.REQOP = 0x0; //请求进入正常模式 while (C1CTRLbits.OPMODE!=0x0){} //确认进入正常模式 return; } int main() { INTCON1=0x0000; INTCON2=0x0000; //关闭所有中断 initial1(); while(1) { if(C1RX0CONbits.RXFUL==1) { buffer1=C1RX0B1; buffer2=C1RX0B2; buffer3=C1RX0B3; buffer4=C1RX0B4; C1RX0CONbits.RXFUL=0; for(i=0;i<300000;i++){} } } } 为什么上位机一直提示发送失败呢?请高手赐教,不胜感激!
發表於: 2009/3/24 14:27
|
|||
|
CAN双机通信问题
|
||||
---|---|---|---|---|
新會員
|
请问斑竹Ryang和其他朋友们:
我用两块APP009的开发板做can双机通信,硬件就是简单的把CANH、 CANL、 GND连接吗?软件有哪些注意的地方? 不胜感激!
發表於: 2008/8/25 19:47
|
|||
|
can自测试的问题!
|
||||
---|---|---|---|---|
新會員
|
我用的是APP009这块板子,在上面做can在自检模式通信,为什么总是提示TXERR错误?具体程序如下:
/********************************************* ** 功能描述: CAN口测试,11位标准标识符** *********************************************/ #define __dsPIC30F4011__ #include <p30f4011.h> int failmemory[40]; //--------------------------------------------------------------------------- _FOSC(CSW_FSCM_OFF & XT_PLL8); //XT with 8xPLL oscillator, Failsafe clock off _FWDT(WDT_OFF); //Watchdog timer disabled _FBORPOR(PBOR_OFF & MCLR_EN); //Brown-out reset disabled, MCLR reset enabled _FGS(CODE_PROT_OFF); //Code protect disabled // ---------------------------------------------------------------------------- unsigned int buffer1; unsigned int buffer2; unsigned int buffer3; unsigned int buffer4; unsigned long int i = 0; #define FCY 7372800 void initial() { C1CTRLbits.REQOP = 0x4; //请求进入配置模式 while (C1CTRLbits.OPMODE!=0x4){} //确认进入配置模式 C1TX0CON = 0x0003; //发送0邮箱配置,高优先级 C1TX0SID = 0x0020; //发送0标准标识符,11位 C1TX0DLC = 0x01c0; //发送0数据长度,8字节 C1RX0CON = 0x0000; //接收0邮箱配置 C1RX0DLC = 0x0008; //接收0数据长度,8字节 C1RXF0SID = 0x0020; //接收滤波器0标准标识符,11位 C1RXM0SID = 0xffff; //接收屏蔽0标准标识符 C1CFG1 = 0x00ff; //波特率配置 C1CFG2 = 0x07ff; C1CTRLbits.REQOP = 0x02; //请求进入自测试模式 while (C1CTRLbits.OPMODE!=0x02){} //确认进入自测试模式 return; } int main() { INTCON1=0x0000; INTCON2=0x0000; //关闭所有中断 initial(); while(1) { C1TX0B1 = 0x5555; //发送缓冲寄存器8字节 C1TX0B2 = 0x5555; C1TX0B3 = 0x5555; C1TX0B4 = 0x5501; C1TX0CONbits.TXREQ = 1; //启动发送 while (C1TX0CONbits.TXREQ==1){} //等待发送完成 if (C1RX0CONbits.RXFUL == 1) { buffer1 = C1RX0B1; buffer2 = C1RX0B2; buffer3 = C1RX0B3; buffer4 = C1RX0B4; C1RX0CONbits.RXFUL = 0; } } } 程序一直停在while (C1TX0CONbits.TXREQ==1){} 希望得到你的解答。
發表於: 2008/8/25 16:10
|
|||
|