ST意法半导体
直播中

张娟

7年用户 2080经验值
私信 关注
[问答]

为什么我的外部时钟HSE配置不起作用呢?

大家好!
我有新东西给你。我们有一块带有 STM32f446re 芯片的 PCB。出于稳定性原因,我们在上面放了一个 20Mhz 的外部时钟,但问题是,我们仍然在 16Mhz 上运行(用示波器上切换的 gpio 测量它。)脉冲应该长 500 毫秒,但结果是 625 毫秒。
现在,这里是系统时钟初始化函数,主要调用 FIRST:
void system_clock_config()
{
    RCC_OscInitTypeDef rcc_osc_init {};
    RCC_ClkInitTypeDef rcc_clk_init {};

    __HAL_RCC_PWR_CLK_ENABLE();
    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);

    rcc_osc_init.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    rcc_osc_init.HSIState = RCC_HSI_OFF;
    rcc_osc_init.HSEState = RCC_HSE_ON;
    rcc_osc_init.PLL.PLLState = RCC_PLL_ON;
    rcc_osc_init.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    rcc_osc_init.PLL.PLLM = 10;
    rcc_osc_init.PLL.PLLN = 100;
    rcc_osc_init.PLL.PLLP = RCC_PLLP_DIV2;
    rcc_osc_init.PLL.PLLQ = 2;
    rcc_osc_init.PLL.PLLR = 2;
    如果 (HAL_RCC_OscConfig(&rcc_osc_init) != HAL_OK)
    {
        同时(真){}
    }

    rcc_clk_init.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    rcc_clk_init.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    rcc_clk_init.AHBCLKDivider = RCC_SYSCLK_DIV1;
    rcc_clk_init.APB1CLKDivider = RCC_HCLK_DIV4;
    rcc_clk_init.APB2CLKDivider = RCC_HCLK_DIV2;

    如果 (HAL_RCC_ClockConfig(&rcc_clk_init, FLASH_LATENCY_3) != HAL_OK)
    {
        同时(真){}
    }
}

我在 cubeMX clock_configuration 工具的帮助下创建了这些配置,它们都是针对 20Mhz HSE 振荡器输入计算的。
编辑:我们卸载了 20mhz 振荡器并且程序没有启动,所以我猜 HSE 正在工作,但仍然在 16Mhz 上。为什么会这样?

回帖(1)

王磊

2022-12-23 10:39:50
外部 *时钟源* 可能希望使用 HSE BYPASS 模式
检查 HSE-VALUE 的定义,通常在 stm32fxxx_hal_conf,h
通过 MCO / PA8 引脚测量内部时钟节点,将信号路由到示波器。
解压缩 RCC CLK/PLL 设置以了解芯片认为它在做什么。从打印 AHB、APB1、APB2 时钟开始
举报

更多回帖

发帖
×
20
完善资料,
赚取积分