anshaoyuan 发表于 2022-8-22 17:30:51

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;

但是通讯不通,请教下会的人

wychao 发表于 2022-8-22 18:30:05

22.1184M时钟,125k通信,我用过5EC7

1a2b3c 发表于 2022-8-22 19:45:54

示波器先直观准确的看一下脉冲波形的最窄的值啊?
完了再来找原因吧,
万一是别人定的那个恰好是错的呢:)

anshaoyuan 发表于 2022-8-26 17:35:18

wychao 发表于 2022-8-22 18:30
22.1184M时钟,125k通信,我用过5EC7
(引用自2楼)

使用22.1184M晶振,CAN设置为1M/秒,请问单片机的        CAN0DAT设置为多少呢?

anshaoyuan 发表于 2022-8-26 17:35:43

使用22.1184M晶振,CAN设置为1M/秒,请问单片机的        CAN0DAT设置为多少呢?

wychao 发表于 2022-8-26 20:27:47

        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没有用过

anshaoyuan 发表于 2022-9-23 10:04:32

整好了,哪位如果有用的,遇到CAN通讯问题可以咨询
页: [1]
查看完整版本: 8051f040 CAN波特率设置,我计算出来通讯不了,请教看对不对?