打印
[综合信息]

RCC_ConfigPclk2疑惑

[复制链接]
114|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2025-1-22 10:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、RCC_ConfigPclk2
1.官方库源码
代码如下(示例):

/**
* @brief  Configures the High Speed APB clock (PCLK2).
* @param RCC_HCLK defines the APB2 clock divider. This clock is derived from
*   the AHB clock (HCLK).
*   This parameter can be one of the following values:
*     @ARG RCC_HCLK_DIV1 APB2 clock = HCLK
*     @arg RCC_HCLK_DIV2 APB2 clock = HCLK/2
*     @arg RCC_HCLK_DIV4 APB2 clock = HCLK/4
*     @arg RCC_HCLK_DIV8 APB2 clock = HCLK/8
*     @arg RCC_HCLK_DIV16 APB2 clock = HCLK/16
*/
void RCC_ConfigPclk2(uint32_t RCC_HCLK)
{
    uint32_t tmpregister = 0;
    /* Check the parameters */
    assert_param(IS_RCC_HCLK_DIV(RCC_HCLK));
    tmpregister = RCC->CFG;
    /* Clear PPRE2[2:0] bits */
    tmpregister &= CFG_APB2PRES_RESET_MASK;
    /* Set PPRE2[2:0] bits according to RCC_HCLK value */
    tmpregister |= RCC_HCLK << 3;
    /* Store the new value */
    RCC->CFG = tmpregister;
}




2.使用场景
代码如下(示例):

void Timer1_Init(u16 arr,u16 psc)
{
        TIM_TimeBaseInitType TIM_TimeBaseStructure;
        NVIC_InitType NVIC_InitStructure;

        RCC_ConfigPclk2(RCC_HCLK_DIV4);

        /* 配置定时器TIM1时钟 */
        RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_TIM1, ENABLE);

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

    /* 使能定时器TIM1中断 */
    NVIC_InitStructure.NVIC_IRQChannel                   = TIM1_UP_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

    /* 配置定时器TIM1 */
    TIM_TimeBaseStructure.Period    = arr;
    TIM_TimeBaseStructure.Prescaler = psc;
    TIM_TimeBaseStructure.ClkDiv    = 0;
    TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;
    TIM_InitTimeBase(TIM1, &TIM_TimeBaseStructure);

    /* 定时器TIM1向上计时 */
    TIM_ConfigInt(TIM1, TIM_INT_UPDATE, ENABLE);

    /* 使能定时器TIM1 */
    TIM_Enable(TIM1, ENABLE);
       
}



3.出现的问题
当在高级定时器中使用RCC_ConfigPclk2(RCC_HCLK_DIV4);,会使串口打印printf出现乱码,很明显是串口波特率受到影响,按RCC_ConfigPclk2的说明是APB2时钟分频,而串口也是使用APB2时钟。所以这个问题怎么去解决还是个未解的问题。

3.暂时解决办法
暂时的解决办法就是屏蔽不使用RCC_ConfigPclk2(RCC_HCLK_DIV4);

//RCC_ConfigPclk2(RCC_HCLK_DIV4);


二、总结
官方提供的库例程中的高级定时器TIM1也使用了RCC_ConfigPclk2(RCC_HCLK_DIV4); 如果有知道是什么问题的可以留言。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/suqingxiao/article/details/122231926

使用特权

评论回复
沙发
技术工程师| | 2025-1-23 16:11 | 只看该作者
APB2分频4之后,挂在这条线上面的串口是不是由于频率过低,串口会乱码,提高主频是不是就解决了

使用特权

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

本版积分规则

2132

主题

16296

帖子

16

粉丝