打印

CAN的速度问题

[复制链接]
3890|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者

?

使用特权

评论回复
5
cumtnj| | 2008-3-7 21:51 | 只看该作者

正确的

我自己写了一个关于计算CAN波特率的文档,不知道怎么上传,如有需要,给我发邮件吧cagabu@126。com

使用特权

评论回复
6
grant_jx| | 2008-3-8 23:28 | 只看该作者

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

grant_jx@163.com

使用特权

评论回复
7
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

粉丝