|
void can_init(void)<br />{ <br /> PINSEL1 |= 0X05 << 14; //使用CAN2管脚<br /><br /> CAN2MOD |= 0X01; //RM=1<br /> CAN2MOD |= (1<<3); //TPM = 1<br /><br /> CAN2BTR |= 10|(0x00<<14)|(6<<16)|(1<<20)|(0<<23); //设置波特率100KBPS<br /> <br /> CAN2EWL = 0x60; //错误寄存器<br /> <br /> CAN2MOD &= (~1); //CAN正常工作,RM=0<br /> <br /><br />}<br />/**********************************************************************/<br />int main (void)<br />{ <br /> can_init();<br /> <br /> while(1)<br /> { if(CAN2SR & (1<<2) == 1); //CAN2SR.TBS1为1,可写入数据<br /> { <br /> CAN2TFI1 = (1<<16) | 1; //发送1字节,优先级1<br /> CAN2TID1 = 1; //发送ID为1<br /> CAN2TDA1 = 1; //发送数据为01<br /> CAN2CMR = (1<<5); //选择缓冲区<br /> CAN2CMR = 0X01; //发送请求<br /> while(CAN2GSR & (1<<2) == 0); //等待发送结束<br /> <br /> delay(20);<br /> <br /> }<br /> <br /> }<br /> <br /> return 0;<br />}<br /><br />VPB 11.0592M,<br />上面程序是否有错,我只是实现简单的发送功能,可是我用ZLGCAN分析仪偶尔读到也是显示错误,怀疑初始化我哪里没注意到,我看了几遍数据手册,硬是没找到原因,也有可能波特率设置错误,我是按 <br /> Fpclk<br />波特率BPS= --------------------------- <br /> (TSEG1+TSEG2+3)*(BRP+1)<br /><br />算的,请高手指点一下,初学者搞CAN,找不到头绪。先谢谢! |
|