stm32f407的官方帮助文档can总线配置

[复制链接]
6467|4
 楼主| lisn1234 发表于 2013-7-2 13:04 | 显示全部楼层 |阅读模式
新手请教大家,stm32f4xx_dsp_stdperiph_lib_um.chm这个官方帮助文档里面CAN Networking example这个例子,
在配置时钟和can波特率的时候看不明白了!

system_stm32f4xx.c里面是这样配置的:
  1. 00045   *        Supported STM32F40xx/41xx/427x/437x devices
  2. 00046   *-----------------------------------------------------------------------------
  3. 00047   *        System Clock source                    | PLL (HSE)
  4. 00048   *-----------------------------------------------------------------------------
  5. 00049   *        SYSCLK(Hz)                             | 168000000
  6. 00050   *-----------------------------------------------------------------------------
  7. 00051   *        HCLK(Hz)                               | 168000000
  8. 00052   *-----------------------------------------------------------------------------
  9. 00053   *        AHB Prescaler                          | 1
  10. 00054   *-----------------------------------------------------------------------------
  11. 00055   *        APB1 Prescaler                         | 4
  12. 00056   *-----------------------------------------------------------------------------
  13. 00057   *        APB2 Prescaler                         | 2
  14. 00058   *-----------------------------------------------------------------------------
  15. 00059   *        HSE Frequency(Hz)                      | 25000000
  16. 00060   *-----------------------------------------------------------------------------
  17. 00061   *        PLL_M                                  | 25
  18. 00062   *-----------------------------------------------------------------------------
  19. 00063   *        PLL_N                                  | 336
  20. 00064   *-----------------------------------------------------------------------------
  21. 00065   *        PLL_P                                  | 2
  22. 00066   *-----------------------------------------------------------------------------
  23. 00067   *        PLL_Q                                  | 7

我的理解是,晶振25M,25/25*336/2=168M是PLL频率,作为系统工作频率。然后AHB分频1,还是168M。
再分频 ,APB1 Prescaler=4,所以APB1是168/4=42M。can就接在APB1上,所以也应该是42M。(应该没错吧?)

但是,不明白的地方来了,main.c里面又是这样配置can的:
  1. 00153   CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
  2. 00154     
  3. 00155   /* CAN Baudrate = 1 MBps (CAN clocked at 30 MHz) */
  4. 00156   CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq;
  5. 00157   CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
  6. 00158   CAN_InitStructure.CAN_Prescaler = 2;
  7. 00159   CAN_Init(CANx, &CAN_InitStructure);

注释说CAN clocked at 30 MHz,然后也确实30/((1+6+8)*2)=1M,CAN的波特率就是1M了。。。

那APB1=42M又是怎么回事?新手请教大家,现在自己的程序都不知道怎么配置了……


IJK 发表于 2013-7-2 17:08 | 显示全部楼层
估计是代码和说明未能做到一致,仅此而已。
trumpxp 发表于 2013-7-2 19:34 | 显示全部楼层
不错的共享  谢谢楼主    顶一个
airwill 发表于 2013-7-2 20:04 | 显示全部楼层
可能你的例程是 F2 的.
既然频率是 42MHz, 那你就更改 CAN 的频率设置吧.
我也发现好多例程并不见得完全正确的, 不要纠结了
 楼主| lisn1234 发表于 2013-7-11 13:20 | 显示全部楼层
airwill 发表于 2013-7-2 20:04
可能你的例程是 F2 的.
既然频率是 42MHz, 那你就更改 CAN 的频率设置吧.
我也发现好多例程并不见得完全正 ...

感谢~~确实是按照自己分频来的,例程有错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

26

帖子

1

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