CAN的速度问题

[复制链接]
 楼主| tyz114499 发表于 2008-1-28 13:19 | 显示全部楼层 |阅读模式
CAN, rc, ST, HC, se
在STM32所带的CAN例子中,时钟部分的设置如下
    RCC_HCLKConfig(RCC_SYSCLK_Div1); 
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1); 

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* Select HSE as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);

    /* Wait till HSE is used as system clock source */
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);
说明系统使用的是外部8M的时钟,APB1的时钟为4M,在CAN的设置中
 CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;
  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
  CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
  CAN_InitStructure.CAN_Prescaler=5;
此时的波特率为100K,哪位大哥解释一下是怎么算出来的,初次接触CAN,很多问题不懂,见笑了
 楼主| tyz114499 发表于 2008-1-28 15:22 | 显示全部楼层

没人肯帮忙吗?

没人肯帮忙吗?是不是问题太简单了,大家都不屑于回答?
JIANG_WX 发表于 2008-1-29 14:47 | 显示全部楼层

波特率应为50K

波特率应为50K,具体计算如下:

BaudRate = 1/(1*Tq + Tbs1 + Tbs2);
Tq = CAN_Prescaler * Tpclk1;

Tpclk1是APB1的时钟,频率为4MHZ。
sea258 发表于 2008-2-13 16:40 | 显示全部楼层
cumtnj 发表于 2008-3-7 21:51 | 显示全部楼层

正确的

我自己写了一个关于计算CAN波特率的文档,不知道怎么上传,如有需要,给我发邮件吧cagabu@126。com
grant_jx 发表于 2008-3-8 23:28 | 显示全部楼层

可以把你的文档发给我,我给你上传就是

grant_jx@163.com
starm 发表于 2008-7-13 23:01 | 显示全部楼层

不知道是否是这样计算的?

外部8M的时钟

RCC_PCLK1Config(RCC_HCLK_Div2);

 APB1的时钟为4M 

CAN_InitStructure.CAN_Prescaler=5;

 CAN 时钟 = 4M / 5 = 800 K 

CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;

 1 + 8 + 7 = 16 Tq 

CAN 速度 = 800K / 16 = 50K





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

本版积分规则

23

主题

130

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部