硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1018|回复: 4
收起左侧

CAN通信配置

[复制链接]

4

主题

4

回帖

16

积分

新手上路

积分
16
发表于 2021-10-8 10:50:41 | 显示全部楼层 |阅读模式
我使用的单片机是STM32F446RC,配置主频为180M,而APB1总线上的时钟为45M。使用CAN1进行通讯,当要配置波特率为250K时,配置如下:
发现无法正常通信。而当我将BS1改为2tq,而BS2改为1tq就能正常通信了。还请各位帮忙指点迷津。
1.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107628
QQ
发表于 2021-10-8 11:48:00 | 显示全部楼层
SJW应该用固定数值1来代替

    /*
        CAN 波特率 = RCC_APB1Periph_CAN1 / Prescaler / (SJW + BS1 + BS2);
        
        SJW = synchronisation_jump_width
        BS = bit_segment
        
        本例中,设置CAN波特率为1 Mbps        
        CAN 波特率 = 42000000 / 2 / (1 + 12 + 8) / = 1 Mbps        
    */
    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
    CAN_InitStructure.CAN_BS1 = CAN_BS1_12tq;
    CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
    CAN_InitStructure.CAN_Prescaler = 2;
    CAN_Init(CAN1, &CAN_InitStructure);
=======================================================
回复

使用道具 举报

4

主题

4

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2021-10-8 14:06:15 | 显示全部楼层
eric2013 发表于 2021-10-8 11:48
SJW应该用固定数值1来代替

    /*

我这边CAN1的总线时钟是45MHz,所以CAN的波特率计算为45000000 / (1 + 1 + 2) / 45 = 250Kbps。这是没有问题的,但是问题在于BS1为1tq,BS2为2tq时无法正常通信,而BS1为2tq,BS2为1tq时,就可以正常通信了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107628
QQ
发表于 2021-10-8 15:42:03 | 显示全部楼层
Woodpan 发表于 2021-10-8 14:06
我这边CAN1的总线时钟是45MHz,所以CAN的波特率计算为45000000 / (1 + 1 + 2) / 45 = 250Kbps。这是没有 ...

这就涉及到一个采样点的概念

CAN采样点的设置推荐85%到90%的位置
http://www.armbbs.cn/forum.php?m ... 7078&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

4

主题

4

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2021-10-9 08:53:06 | 显示全部楼层
eric2013 发表于 2021-10-8 15:42
这就涉及到一个采样点的概念

CAN采样点的设置推荐85%到90%的位置

学习了,非常干谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-8 21:57 , Processed in 0.191857 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表