8051f040 CAN波特率设置,我计算出来通讯不了,请教看对不对?
手头有个别人写的程序,20M的晶振,1M/位计算的CAN寄存器写的是:CAN0DATH:CAN0DATL = 0X5CC3但是我现在计算出来的是0X5CC0,通讯不通, 5cc3通讯正常。不清楚他怎么算的,我的按照说明算的如下:
我用的20.0M晶振,设置传输速率位1M/秒。我计算出来是0X5CC0,但是通讯不通,请教各位我计算的对吗?
SYSCLK=20m
CAN时钟周期 =50ns
CAN时间量子 = 50ns
总线长度2m
传输延时时间:400ns
波特率预分频器(BRP):不分频
传输速率位1M/秒 = 1000ns
求得位时间为:1000/50 = 20 tq
则Sync_Seg固定=1 tq
Prop_Seg = 400/50=8tq
Phase_Seg1 + Phase_Seg2 = 位时间 – ( Sync_Seg + Prop_Seg) = 20-1-8=11
Phase_Seg2 = Phase_Seg1 + 1
Phase_Seg2 = 6
Phase_Seg1 = 5
SJW = min ( 4, Phase_Seg1) = 4
BRPE = BRP – 1 = BRP扩展寄存器= 0x0000
SJWp = SJW – 1 = min (4, 6) – 1 = 3
TSEG1 = (Prop_Seg + Phase_Seg1 – 1) = 8+ 5 – 1 = 12
TSEG2 = (Phase_Seg2 – 1) = 6-1=5
位时间寄存器 = TSEG2 * 0x1000 + TSEG1 * 0x0100 + SJWp * 0x0040 +BRPE
=5* 0x1000+12*0x0100 +3*0x0040
=0x5000+C00+C0
=0X5CC0;
但是通讯不通,请教下会的人 22.1184M时钟,125k通信,我用过5EC7 示波器先直观准确的看一下脉冲波形的最窄的值啊?
完了再来找原因吧,
万一是别人定的那个恰好是错的呢:) wychao 发表于 2022-8-22 18:30
22.1184M时钟,125k通信,我用过5EC7
(引用自2楼)
使用22.1184M晶振,CAN设置为1M/秒,请问单片机的 CAN0DAT设置为多少呢? 使用22.1184M晶振,CAN设置为1M/秒,请问单片机的 CAN0DAT设置为多少呢? SFRPAGE= CAN0_PAGE;
CAN0CN|= 0x61; // Configuration Change Enable CCE and INIT ,auto retransmition
CAN0ADR= BITREG; // Point to Bit Timing register
CAN0DAT= 0x5EE3;
CAN0ADR = BRPEXT;
CAN0DAT= 0x01;
这是10k,1M没有用过 整好了,哪位如果有用的,遇到CAN通讯问题可以咨询
页:
[1]