STM32 V3.5.0版本固件口中关于RCC_GetClocksFreq()函数的一个小细节

  /* Get HCLK prescaler */
  tmp = RCC->CFGR & CFGR_HPRE_Set_Mask;   
  tmp = tmp >> 4;
  presc = APBAHBPrescTable[tmp];
  /* HCLK clock frequency */
  RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc;

static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9};

根据STM32中文手册,

HPRE[3:0]:AHB预分频(AHB Prescaler) 位7:4
由软件置’1’或清’0’来控制AHB时钟的预分频系数。
 0xxx:SYSCLK不分频
1000:SYSCLK 2分频     1100:SYSCLK 64分频
1001:SYSCLK 4分频     1101:SYSCLK 128分频
1010:SYSCLK 8分频     1110:SYSCLK 256分频
1011:SYSCLK 16分频   1111:SYSCLK 512分频

当HPRE[3:0]=0000~0011和1000~1111时,上述代码是没有问题的。

但是当HPRE[3:0]=0100、0101、0110和0111中的任意一个时,就有问题了。拿HPRE[3:0]=0100举例:

那么presc=APBAHBPrescTable[4],,即presc=1。也就是说,这时的SYSCLK是要2分频的,而与参考手册是不一致的。

因此,当SYSCLK不分频时,HPRE[3:0]可以设置成0000~0011中的任意一个,不能设置成0100~0111其中的任意一个。

大家有什么看法呢?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值