白菜心心 2022-08-29 18:32 采纳率: 0%
浏览 43

C8051F040的CAN通讯 波特率计算疑问?

最近编制C8051F040的CAN通讯,按照datasheet上的说明计算波特率寄存器的值,使用的是22.1184晶振,不分频。为速率设置位1M/S。计算的寄存器值位5EC0,结果通讯不通,参考了别人的代码。使用20M晶振,不分频,1m/s位速率。我计算的是5CC0,通讯不通。别人的是5CC3,正常。现请这个怎么计算呢?

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+120x0100 +30x0040
=0x5000+C00+C0
=0X5CC0;

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

  • 写回答

1条回答 默认 最新

  • qllaoda 2022-08-29 18:37
    关注

    C8051f不是有个图形化配置工具吗,用那个算啊。
    还有个问题,这个晶振下是肯定无法精确产生1M/S的,肯定有误差,没用过CAN,不知道误差允许范围是多少。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月29日

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了