打印

求助;PIC24HJ系列CAN通信波特率问题

[复制链接]
3560|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuandian01|  楼主 | 2012-2-24 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yuandian01 于 2012-2-24 17:20 编辑

哪位用过PIC24HJ系列的CAN接口?现在遇到一个很奇怪的问题,不管是用外部晶振还是内部晶振调整,发现CAN发出来的BIT宽与自己想要得到的不一致,比如波特率100K,位宽10US,观察到的波形位宽是2US左右,或者其他的值。
   程序和计算方法都是参照PDF和官方的例程,看了很久,也没找出问题所在点。各位帮忙给分析下,谢谢~~ 附部分代码,内部晶振
    #define FCAN   20000000
#define BITRATE 100000  
#define NTQ  20  // 16 Time Quanta in a Bit Time
#define BRP_VAL  ((FCAN/(2*NTQ*BITRATE))-1)
_FOSCSEL(FNOSC_FRC);
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF);

void oscConfig(void)
{
   OSCTUNbits.TUN=23;          //FRC 振荡器调节位,将频率调节到8M;
   PLLFBD =38 ;          // M = 40
   CLKDIVbits.PLLPOST =2; // N2 = 8
   CLKDIVbits.PLLPRE = 0;  // N1 = 2
   __builtin_write_OSCCONH(0x01);
   __builtin_write_OSCCONL(0x01);
   while (OSCCONbits.COSC != 0b001);
   while(OSCCONbits.LOCK != 1) {};
}

void ecan1ClkInit(void){
/* FCAN is selected to be FCY
/* FCAN = FCY = 20M
C1CTRL1bits.CANCKS = 0x1;
/*
Bit Time = (Sync Segment + Propagation Delay + Phase Segment 1 + Phase Segment 2)=20*TQ
Phase Segment 1 = 8TQ
Phase Segment 2 = 6Tq
Propagation Delay = 5Tq
Sync Segment = 1TQ
CiCFG1<BRP> =(FCAN /(2 譔譌BAUD))?1
*/
/* Synchronization Jump Width set to 2 TQ */
C1CFG1bits.SJW = 0x1;
/* Baud Rate Prescaler */
C1CFG1bits.BRP =0;

/* Phase Segment 1 time is 8TQ */
C1CFG2bits.SEG1PH=0x7;
/* Phase Segment 2 time is set to be programmable */
C1CFG2bits.SEG2PHTS = 0x1;
/* Phase Segment 2 time is 6 TQ */
C1CFG2bits.SEG2PH = 0x5;
/* Propagation Segment time is 5 TQ */
C1CFG2bits.PRSEG = 0x4;
/* Bus line is sampled three times at the sample point */
C1CFG2bits.SAM = 0x0;

}

}
沙发
yewuyi| | 2012-2-24 17:11 | 只看该作者
没耍过CAN,帮不上,看看。

使用特权

评论回复
板凳
yuandian01|  楼主 | 2012-2-25 10:14 | 只看该作者
没有朋友用过吗,自己顶一下

使用特权

评论回复
地板
Ryanhsiung| | 2012-2-26 21:26 | 只看该作者
有用过STM32的CAN,PIC正准备入手!
   我觉的还是寄存器没有设置对,要细看技术手册!(指的不是DATASHEET,是技术手册中的CAN相关章节)

使用特权

评论回复
5
21icupk| | 2012-8-25 09:42 | 只看该作者
((FCAN/(2*NTQ*BITRATE))-1)计算结果是4;分频为20/2*(1+4)=2MHZ,
在这里C1CFG1bits.BRP =0;                      20/2*(1+0)=10MHZ
若分频后结果应该为10US,但是你为分频,结果是2US.

使用特权

评论回复
6
super__5| | 2015-7-15 16:13 | 只看该作者
楼上正解,可改为:C1CFG1bits.BRP =BRP_VAL

使用特权

评论回复
7
AWENM| | 2015-9-29 16:47 | 只看该作者
我最近在用PIC24 CAN通讯一直没什么头绪 您那边有例程吗 能否给我参考下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

23

帖子

1

粉丝