打印
[STM32F1]

在STM32F107系列微控制器中,配置内部时钟

[复制链接]
597|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
狗啃模拟|  楼主 | 2024-2-23 13:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 狗啃模拟 于 2024-2-23 13:37 编辑

涉及到设置系统时钟源和时钟分频等参数。以下是一个基本的配置例子,可以在你的代码中进行修改和扩展:


#include "stm32f10x.h"

void SystemInit(void);

int main(void) {
    // 在main函数中进行其他初始化

    // 配置内部时钟
    SystemInit();

    // 在这里继续你的应用程序逻辑

    while (1) {
        // 主循环中的应用程序逻辑
    }
}

void SystemInit(void) {
    // 在SystemInit函数中配置内部时钟

    // 使能内部高速时钟(HSI)
    RCC->CR |= RCC_CR_HSION;
    while (!(RCC->CR & RCC_CR_HSIRDY));  // 等待HSI准备好

    // 选择HSI为系统时钟
    RCC->CFGR &= ~RCC_CFGR_SW;
    RCC->CFGR |= RCC_CFGR_SW_HSI;
    while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI);  // 等待系统时钟切换完成

    // 配置AHB、APB1和APB2分频
    RCC->CFGR &= ~(RCC_CFGR_HPRE | RCC_CFGR_PPRE1 | RCC_CFGR_PPRE2);
    RCC->CFGR |= RCC_CFGR_HPRE_DIV1 | RCC_CFGR_PPRE1_DIV2 | RCC_CFGR_PPRE2_DIV1;

    // 可以根据需要配置其他时钟源和分频器
}


例子中,系统时钟选择了HSI,你可以根据需要选择其他时钟源,比如外部晶体振荡器(HSE)等。还可以根据需要配置AHB、APB1和APB2的分频器。
请注意,具体的时钟配置需要根据你的应用需求和硬件设计进行调整。

可以添加外部晶振(HSE)的配置、外设时钟使能(USART1、SPI1)以及中断优先级的配置
#include "stm32f10x.h"


void SystemInit(void);


int main(void) {
    // 在main函数中进行其他初始化


    // 配置内部时钟
    SystemInit();


    // 初始化外设
    // ...


    // 在这里继续你的应用程序逻辑


    while (1) {
        // 主循环中的应用程序逻辑
    }
}


void SystemInit(void) {
    // 在SystemInit函数中配置内部时钟


    // 使能外部晶振时钟(HSE)
    RCC->CR |= RCC_CR_HSEON;
    while (!(RCC->CR & RCC_CR_HSERDY));  // 等待HSE准备好


    // 选择HSE为系统时钟
    RCC->CFGR &= ~RCC_CFGR_SW;
    RCC->CFGR |= RCC_CFGR_SW_HSE;
    while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSE);  // 等待系统时钟切换完成


    // 配置AHB、APB1和APB2分频
    RCC->CFGR &= ~(RCC_CFGR_HPRE | RCC_CFGR_PPRE1 | RCC_CFGR_PPRE2);
    RCC->CFGR |= RCC_CFGR_HPRE_DIV1 | RCC_CFGR_PPRE1_DIV2 | RCC_CFGR_PPRE2_DIV1;


    // 使能外设时钟,比如使能USART1、SPI1等
    RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
    RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;


    // 配置中断优先级
    NVIC_SetPriority(USART1_IRQn, 2);  // 设置USART1中断的优先级为2


    // 可以根据需要继续拓展其他配置
}



此代码适用于常见的配置需求,比如配置外部晶振、启用其他外设时钟、配置中断优先级等、


使用特权

评论回复
沙发
范德萨发法国队| | 2024-2-24 21:16 | 只看该作者
在配置内部时钟时,为什么选择了HSI作为系统时钟,而不是外部晶振(HSE)?在什么情况下会更倾向于选择外部晶振?

使用特权

评论回复
板凳
范德萨发法国队| | 2024-2-29 06:09 | 只看该作者
如果我需要使用其他外设,比如I2C或者定时器,是不是也需要在这里使能相应的外设时钟?

使用特权

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

本版积分规则

63

主题

803

帖子

2

粉丝