首页 > 其他分享 >STM32 RCC时钟设置

STM32 RCC时钟设置

时间:2024-03-23 11:30:09浏览次数:27  
标签:使能 HSE FLASH STM32 RCC APB2Periph 时钟

前面几篇我讲了如何使用标准固件库来让STM32实现一些功能;但是想要实现各种功能前都必须要对单片机时钟源进行设置,时钟树:如果大家对这块不懂的话推荐大家看看【STM32】超清晰STM32时钟树动画讲解

固件库函数

代码编写
ErrorStatus HSEStartUpStatus;

RCC_DeInit(); // RCC寄存器恢复到初始状态,这通常用于调试目的以确保从一个已知状态开始

RCC_HSEConfig(RCC_HSE_ON); // 使能外部高速晶振(High-Speed External,HSE)

// 等待外部高速晶振(HSE)稳定并准备好, 如果超时则返回ErrorStatus::ERROR
HSEStartUpStatus = RCC_WaitForHSEStartUp(); 

if(HSEStartUpStatus == SUCCESS){ // 如果HSE启动成功执行以下配置
    // 设置PLL(相位锁定环)的时钟源为HSE,并设置倍频系数为9
    // 当HSE为8MHz时,经过PLL后,系统时钟(SYSCLK)为72MHz
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
    
    // 设置AHB时钟(HCLK),此处配置为与SYSCLK一致,即72MHz
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
    
    // 设置APB1时钟(PCLK1),此处配置为HCLK的一半,即36MHz
    // APB1通常用于驱动低速外设
    RCC_PCLK1Config(RCC_HCLK_Div2);
    
    // 设置APB2时钟(PCLK2),此处配置为与HCLK一致,即72MHz
    // APB2通常用于驱动高速外设
    RCC_PCLK2Config(RCC_HCLK_Div1);
    
    // 根据系统时钟设置FLASH存储器的延迟周期,以确保FLASH操作的稳定性
    // 系统频率在48MHz到72MHz之间时,推荐设置2个等待周期
    FLASH_SetLatency(FLASH_Latency_2);

    // 启用FLASH预取指缓冲,以优化代码执行速度
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    // 使能PLL,此配置用于增加系统时钟频率
    RCC_PLLCmd(ENABLE);

    // 等待PLL输出稳定
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

    // 将PLL输出设置为系统时钟源(SYSCLK)
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    // 等待PLL输出确实作为系统时钟源使用
    while(RCC_GetSYSCLKSource() != 0x08);
}  

// 可以在此处根据需要使能其他外设的时钟
// 例如,如果需要使用USART1,GPIOA,和SPI1,可以取消以下注释来使能相关时钟
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |   
//	RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); //APB2外设时钟使能      
//	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //APB1外设时钟使能  
//	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);   
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);   	 
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  

这代码最后注释的RCC使能,我们在之前各个功能设置的时候单独使能了

资料:

标签:使能,HSE,FLASH,STM32,RCC,APB2Periph,时钟
From: https://blog.csdn.net/mawenbo02813/article/details/136962551

相关文章

  • 【STM32+HAL库】---- 驱动DHT11温湿度传感器
    硬件开发板:STM32F407VET6软件平台:cubemax+keil+VScode1DHT11工作原理1.1简介DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿......
  • 初学STM32 CAN通信(二)
    初学STM32CAN通信(二)1.STM32的CAN外设​ STM32的芯片中具有bxCAN控制器(BasicExtendedCAN),它支持CAN协议2.0A和2.0B标准。​ 该CAN控制器支持最高的通讯速率为1Mb/s;可以自动地接收和发送CAN报文,支持使用标准ID和扩展ID的报文;外设中具有3个发送邮箱,发送报文的优先级可以使......
  • STM32G431RBT6按键模块04
    按键用法: 短按长按双击/三击按键电平变化:按下为0,弹起为1cubeMX中配置按键引脚并将其设置为上拉 设置定时器,时钟源,分频系数,重装载值 时钟源:InternalClock;Prescaler:79;CounterPeriod:9999; 这样的设置是10ms中断一次使能中断 interrupt.c&&inte......
  • 初学STM32 CAN通信(一)
    #初学STM32CAN通信(一)1.CAN协议简介​ CAN是控制器局域网络(ControllerAreaNetwork)的简称,是国际上应用最广泛的现场总线之一,近年来,它具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强及振动大的工业环境。​ ......
  • STM32G431RBT6之LCD03
    导入三个文件lcd.c&&lcd.h&&fonts.h  初始化&&界面显示LCD_Init();LCD_Clear(Black);LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);chartemp[20];LCD_DisplayStringLine(Line1,(u8)"DATA");spri......
  • STM32 AD单通道函数设计
    单片机学习!目录文章目录前言一、ADC配置步骤二、详细步骤2.1开启RCC时钟2.2配置GPIO2.3 配置多路开关2.4 配置ADC转换器2.5 开启ADC电源2.6 ADC进行校准        2.6.1复位校准        2.6.2等待复位校准完成    2.6.3开始......
  • 基于STM32单片机图书馆智能节能灯热释人体感应光照设计21-304
    21-304、STM32图书馆智能节能灯设计-LCD1602-热释-光敏-拨动-KEY-RELAY产品功能描述:本设计由STM32F103C8T6单片机核心板电路+拨动开关电路+按键电路+2路继电器控制电路+热释人体红外模块电路+光照检测电路+LCD1602液晶显示电路+电源电路组成1、通过拨动开关选择系统工作模式......
  • 为什么我学了几天 STM32 感觉一脸茫然?
    为什么我学了几天STM32感觉一脸茫然?如果你只有C语言基础就马上学习STM32,你一定会有这些疑惑:为什么有这么多没见过的API函数?没见过的变量(寄存器)名称?为什么工程除了main.c,还有这么多其它没见过的文件?它们有什么用?在开始前我分享下我的经历,我刚入行时遇到一个好公司和师父......
  • 17. STM32内部FLASH
    一、STM32内部FLASH简介  不同型号的STM32F40xx/41xx,其FLASH容量也有所不同,最小的只有128K字节,最大的则达到了1024K字节。STM32F407ZGT6的FLASH容量为1024K字节,STM32F40xx/41xx的闪存模块组织如图所示:  STM32F4的闪存模块由主存储器、系统存储器、OPT区域......
  • 插件-js实现动态时钟效果
    <divid="updatetime"></div>constupdateTime=()=>{varnow=newDate();varyear=now.getFullYear();varmonth=now.getMonth()+1;//getMonth()返回0-11varday=now.getDate();varhours=now.getHour......