打印

stm8库操作,是不是有bug(在时钟配置部分)

[复制链接]
4193|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
solo777|  楼主 | 2012-8-11 15:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 solo777 于 2012-8-11 15:13 编辑

/**
00503   * @brief  Configures the HSI and CPU clock dividers.
00504   * @param   ClockPrescaler Specifies the HSI or CPU clock divider to apply.
00505   * @retval None
00506   */
00507 void CLK_SYSCLKConfig(CLK_Prescaler_TypeDef CLK_Prescaler)
00508 {
00509
00510     /* check the parameters */
00511     assert_param(IS_CLK_PRESCALER_OK(CLK_Prescaler));
00512
00513     if (((uint8_t)CLK_Prescaler & (uint8_t)0x80) == 0x00) /* Bit7 = 0 means HSI divider */
00514     {
00515         CLK->CKDIVR &= (uint8_t)(~CLK_CKDIVR_HSIDIV);
00516         CLK->CKDIVR |= (uint8_t)((uint8_t)CLK_Prescaler & (uint8_t)CLK_CKDIVR_HSIDIV);
00517     }
00518     else /* Bit7 = 1 means CPU divider */
00519     {
00520         CLK->CKDIVR &= (uint8_t)(~CLK_CKDIVR_CPUDIV);
00521         CLK->CKDIVR |= (uint8_t)((uint8_t)CLK_Prescaler & (uint8_t)CLK_CKDIVR_CPUDIV);
00522     }
00523
00524 }

这个函数,就是操作Clock divider register (CLK_CKDIVR)寄存器

寄存器的4位和3位是hsi的分频配置   0-2是fmatster 配置。

我理解不了的就是库操作中,每个配置,都有一句

CLK->CKDIVR &= (uint8_t)(~CLK_CKDIVR_CPUDIV);

这不就是把其他设置清0了吗?

比如,我想让hsi 分频8,否master再分128作为cpu,也就是hsi 分?8×128 分频。这个用库函数是无法实现的?是不是这样?
沙发
joker319| | 2012-8-11 21:01 | 只看该作者
这个if else配置,应该只有一个存在的哇?

使用特权

评论回复
板凳
solo777|  楼主 | 2012-8-11 21:13 | 只看该作者
我理解错了


CLK->CKDIVR &= (uint8_t)(~CLK_CKDIVR_CPUDIV);
是把要设置的位置0.其他不变。

使用特权

评论回复
地板
5509| | 2012-8-11 21:17 | 只看该作者
原来是这样的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

83

主题

375

帖子

2

粉丝