stm32时钟配置步骤

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-16
STM32的时钟到底如何配置?

时钟配置的话,你可以先想好自己的程序里面需要用到哪些外设,然后根据时钟树打开相应的外设时钟就行了。我这里给你一个一般的时钟配置的子程序吧:
void rcc_configuration(void)
{
ErrorStatus HSEStartUpStatus;//定义变量HSEStartUpStatus
RCC_DeInit();//RCC重新配置
RCC_HSEConfig(RCC_HSE_ON);//打开HSE时钟
HSEStartUpStatus = RCC_WaitForHSEStartUp();//读入RCC状态
if(HSEStartUpStatus == SUCCESS)//HSE时钟稳定
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Flash预取缓冲使能;
FLASH_SetLatency(FLASH_Latency_2); //72MHz运行时,Flash需要等到2个周期;
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //使用外部时钟的9倍作为PLL时钟;
RCC_PLLCmd(ENABLE); //使能PLL;

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL时钟稳定;
{
}

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //把系统时钟切换到PLL时钟;

while(RCC_GetSYSCLKSource() != 0x08) //判断PLL是否是系统时钟
{
}
}

下面这个是总线上的时钟配置:
RCC_HCLKConfig(RCC_SYSCLK_Div1);//主时钟为72MHz
RCC_PCLK2Config(RCC_HCLK_Div1);//APB2时钟为72MHz
RCC_PCLK1Config(RCC_HCLK_Div2);//APB1时钟为36MHz
RCC_ADCCLKConfig(RCC_PCLK2_Div4);//ADC时钟为18MHz

你也可以去看一下ST官方介绍库函数的文档,在官网上面有的。

ErrorStatus HSEStartUpStatus;

/* RCC system reset(for debug purpose) */
RCC_DeInit();

/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);

/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS)
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);

/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);

/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);

/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);

/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

/* Enable PLL */
RCC_PLLCmd(ENABLE);

/* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}

/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

/* Wait till PLL is used as system clock source */
while(RCC_GetSYSCLKSource() != 0x08)
{
}

开启外部高速时钟

在红框处设置想要的频率



  • stm32f407 初始时钟是多少?怎么改
    答:用于设置MCU的时钟,两个参数,前一个(OSC)用于选择内部晶振还是外部晶振,这能是HSE或者HSI,这个在H文件中有定义;第二个参数 Clock,范围0~25,对应不同的主频,具体值看程序里面switch语句部分就明白了;然后要说一点,HSE_VALUE 和 HSI_VALUE是外部和内部晶振的频率,这个值在 stm32f4xx.h ...
  • stm32f107vc的eth的时钟线在stm32cubemx中怎么配置
    答:cubeMX的主要优点:1.直观地进行STM32选择2.图形化配置3.C代码项目产生,涵盖STM32初始化部分。兼容IAR, KEIL和GCC编译器4.支持Eclips。2.到ST官网下载软件包和cube库,并安装好。安装过程比较简单,不多赘述。3.点击NEW Project,新建工程,或者file-->new project也可。4.下面是选择器件板子,可以...
  • 基于stm32的多功能时钟1——时钟显示
    答:接着上一章多功能时钟(绪论)的内容,在这一章中,我将介绍多功能时钟的时钟显示部分。话不多说,我们正式开始吧~ 多功能时钟,时钟显示功能是必不可少的。所以,我们利用stm32的定时器来计时。本来打算采用stm32的RTC实时时钟,但后来想,刚开始弄得时候,尽量简单一些,别一开始就给自己出难题,毕竟RTC实时时钟要配置的...
  • STM32里系统时钟
    答:这得看你程序 RCC那块的配置,//PLL设置 SYSCLK/1 * 9 = 8*1*9 = 72MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//启动PLL RCC_PLLCmd(ENABLE);标配是外接8Mhz,内部9倍频,平常的学习,工作都满足了!
  • stm32 3.5库8m晶振怎样设定36m时钟
    答:void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct;RCC_ClkInitTypeDef RCC_ClkInitStruct;RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = 16;RCC_OscInitStruct.PLL.PLLState = RCC_...
  • 如何设置stm32的GPIOB-9管脚产生1MHZ的时钟信号
    答:TIM_IT_Update,ENABLE);其中TIM3_NUM和Prescaler根据你设定的频率和频率来设定。void TIM3_IRQHandler(void){ if(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET){ //定时中断 TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//添加翻转IO电平语句 } } 在这个中断函数里,来反转IO时钟就可以了。
  • mdk硬件仿真STM32 怎么查看当前系统时钟
    答:如下图。3、然后就可以在入口程序中首先调用 设置系统时钟方法,传入对应的参数,先设置好系统时钟,然后再设置LED灯的点亮熄灭之间加入延时方法,如下图。4、然后编译代码,下图中可以看出0错误,0警告,如下图。5、编译成功之后,就可以将代码下载到STM32F407的开发板中观察实验现象了。
  • stm32中,产生频率为1khz,占空比为40%的pwm怎么设置?
    答:大概可以按照以下方式设置:配置定时器:选择一个合适的定时器,比如TIM3。根据定时器的时钟频率和预分频系数,计算所需的定时周期。假设定时器的时钟频率为72MHz,预分频系数为72,那么定时周期为1ms,即1kHz的频率。配置定时器的自动重装载寄存器(ARR):将ARR值设置为定时周期减1,即ARR = 1000 - ...
  • CubeMX配置STM32F030F4,怎么输入外部时钟不可以配置,暗下去的
    答:STM32系统的时钟一般有三种HSI,内部高速时钟,默认8MHZ,如果你的程序不做任何处理,系统默认的就是8MHz,还有外部晶振或者外部时钟,普通型最大不超过16MHz,互联型不超过25MHz,还有一个PLL,从HSI或者HSE里吸取时钟,倍频成最大72MHz综述,如果你的程序不做任何处理,就是8MH是 ...
  • 如何将STM32内部的时钟通过PA.8输出
    答:RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_8);RCC_PLLCmd(ENABLE);//然后设置PA8口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);//设置时钟...