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