STM32F103CBT6使用内部高速时钟配置系统时钟时的BUG分析

文章讲述了作者在使用STM32F103CBT6单片机配置64MHz系统时钟时遇到的问题,通过对比库函数和寄存器编程,发现预取缓存和延迟设置不正确。文章解释了预取缓冲器的作用以及如何根据系统时钟频率调整延迟,从而解决了LED无法点亮的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

项目场景:初次接触STM32单片机的使用,选择点亮一个LED的项目入手。为了更加深入的了解STM32,通过寄存器的方式去编写自己的项目。


问题描述

起初通过库函数的方式编写代码,配置好系统时钟和GPIO外设时钟后,成功点亮LED灯,对库函数的代码进行简单的解读后,再借助CSDN创作助手的AI工具对系统时钟进行配置,AI工具的配置系统时钟的代码如下。联合以前的代码,烧入后发现无法点亮LED灯。

以下是配置STM32F103CBT6使用内部高速时钟配置64MHz系统时钟的代码示例:

#include "stm32f1xx.h"

void SystemClock_Config(void);

int main(void)
{
    // 配置系统时钟
    SystemClock_Config();

    // 你的代码

    while (1)
    {
        // 主循环
    }
}

void SystemClock_Config(void)
{
    // 启用内部高速时钟(HSI)
    RCC->CR |= RCC_CR_HSION;

    // 等待HSI稳定
    while ((RCC->CR & RCC_CR_HSIRDY) == 0);

    // 选择HSI作为系统时钟
    RCC->CFGR &= ~RCC_CFGR_SW;
    RCC->CFGR |= RCC_CFGR_SW_HSI;

    // 等待HSI成为系统时钟
    while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI);

    // 启用FLASH预取缓存
    FLASH->ACR |= FLASH_ACR_PRFTBE;

    // 设置FLASH延迟
    FLASH->ACR |= FLASH_ACR_LATENCY_1;

    // 配置PLL分频因子和
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值