三、使用CubeMX配置 配置RCC 修改HCLK为最大72M, 他这里是问我们没有时钟源没配置成功,点击ok,cubemx会自动帮我们修改 3.
时钟就是单片机的心脏,其每跳动一次,整个单片机的电路就会同步动作一次。时钟的速率决定了两次动作的间隔时间。速率越快,单片机在单位时间内所执行的动作将越多。时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。时钟系统就是CPU的脉搏,决定cpu速率。
和stm32f40x_rcc.h 中查看 或者通过 STM32参考手册搜索“系统架构”或者“系统结构” 查看外设挂在哪个时钟下, RCC相关寄存器: 这里我们以F1系列为例 RCC 寄存器结构 使用HSE时钟,程序设置时钟参数流程: 1、将RCC寄存器重新设置为默认值 RCC_DeInit; 2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON //----------使用外部RC晶振----------- RCC_DeInit(); //初始化为缺省值 RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速时钟 (RCC_SYSCLK_Div1); //HCLK = SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK RCC_PCLK1Config (RCC_HCLK_Div2); //PCLK1 = HCLK/2 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ
新闻和社区 iPhone 17 设计新动向:苹果放弃 RCC 材料 2024 年 7 月 19 日 关于 " 郭明錤称 iPhone 17 不使用节省空间的主板材料 " 这一话题,近日引发了广泛关注。 根据苹果分析师郭明錤的最新消息,苹果公司已经决定在 iPhone 17 中不采用原计划的新型树脂涂覆铜箔(RCC)组件。 RCC 原本被寄予厚望,因为它能够显著减薄主板厚度,节省内部空间,使手机有机会打造更薄的机身或探索其他利用新增空间的方法。 然而,苹果及其供应商在使用 RCC 方面一直面临挑战,主要是因为 RCC 在耐久性和脆弱性方面存在问题,并且无法通过苹果的严格跌落测试。 郭明錤在报告中指出,由于 RCC 无法满足苹果对品质的高标准要求,因此 iPhone 17 将不会采用 RCC 作为 PCB 主板材料。
RCC,Reset and Clock Control(复位和时钟控制),在绝大部分MCU芯片中都包含复位和时钟控制模块,也是MCU重要的组成部分。
,HSI三个时钟源 RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1 ; RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) ! ; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1
RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the RCC Oscillators = RCC_HSE_PREDIV_DIV2; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) ! ; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2 ||\ ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC
= RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_DIV1; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1VCIRANGE_3; RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE; RCC_OscInitStruct.PLL.PLLFRACN ; RCC_OscInitStruct.HSIState = RCC_HSI_OFF; RCC_OscInitStruct.CSIState = RCC_CSI_OFF; RCC_OscInitStruct.PLL.PLLState = RCC_PLL1VCOWIDE; RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2; if (HAL_RCC_OscConfig(&RCC_OscInitStruct
RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; __HAL_RCC_PWR_CLK_ENABLE(); __ RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI ; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct
= RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) ! = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 ; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1
; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT ; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) ! = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 ; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1 ; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1
= RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_OFF; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct
= RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSIState = RCC_HSI_OFF; RCC_OscInitStruct.CSIState = RCC_CSI_OFF; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON ; RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2; ret = HAL_RCC_OscConfig(&RCC_OscInitStruct = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; RCC_ClkInitStruct.APB2CLKDivider
= RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv) { GPIO_InitTypeDef (RCC_MCODiv)); /* RCC_MCO1 */ if(RCC_MCOx == RCC_MCO1) { /* 省略未写 */ } else { /* RCC_MCO2SOURCE_PLLCLK 3、 第3个参数用于设置输出分频,范围从RCC_MCODIV_1到RCC_MCODIV_4。
();//时钟管理重置 RCC_HSEConfig(RCC_HSE_ON);//打开外部晶振HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部晶振就绪 (RCC_SYSCLK_Div1);//AHB使用系统时钟 RCC_PCLK2Config(RCC_HCLK_Div2);//APB2(高速)为HCLK的一半 RCC_PCLK1Config */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK=8MHz*9=72MHz RCC_PLLCmd(ENABLE );//启动PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET){}//等待PLL启动 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK 只能对一个字节操作,对字符串等大量数据操作需要写函数 使用串口所需设置:RCC初始化里面打开RCC_APB2PeriphClockCmd (RCC_APB2Periph_USARTx);GPIO
();//时钟管理重置 RCC_HSEConfig(RCC_HSE_ON);//打开外部晶振HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部晶振就绪 (RCC_SYSCLK_Div1);//AHB使用系统时钟 RCC_PCLK2Config(RCC_HCLK_Div2);//APB2(高速)为HCLK的一半 RCC_PCLK1Config(RCC_HCLK_Div2 */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK=8MHz*9=72MHz RCC_PLLCmd(ENABLE) ;//启动PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET){}//等待PLL启动 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK 只能对一个字节操作,对字符串等大量数据操作需要写函数 使用串口所需设置:RCC初始化里面打开RCC_APB2PeriphClockCmd (RCC_APB2Periph_USARTx);GPIO
主要是完成对PLLCLK、SYSCLK、HCLK、PCLK2 、PCLK1的配置 void RCC_HSE_Config(u32 div,u32 pllm)//自定义系统时钟配置函数 { RCC_DeInit ();//设置为缺省值(即默认值) RCC_HSEConfig(RCC_HSE_ON);//开启晶振 while(RCC_WaitForHSEStartUp()! =SUCCESS);//等待晶振起振 RCC_PLLConfig(div,pllm);//设置锁相环的时钟来源及倍频系数 RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置HCLK 的分频因子 RCC_PCLK1Config(RCC_HCLK_Div2);//设置PCLK1为二分频 RCC_PCLK2Config(RCC_HCLK_Div2); RCC_PLLCmd(ENABLE) ;//使能PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//等待PLL就绪 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK
= HSE_STARTUP_TIMEOUT)); if ((RCC->CR & RCC_CR_HSERDY) ! (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); /* Enable the main PLL */ RCC->CR |= RCC_CR_PLLON; = HSE_STARTUP_TIMEOUT)); if ((RCC->CR & RCC_CR_HSERDY) ! (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); /* Enable the main PLL */ RCC->CR |= RCC_CR_PLLON; ->CFGR |= RCC_CFGR_PPRE2_DIV2; /* PCLK1 = HCLK / 4*/ RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; #
函数原型: void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); 参数说明 RCC_APB1Periph :指定需要使能时钟的APB1外设,可以是以下值之一或组合(使用“按位或”操作): RCC_APB1Periph_TIM2:定时器2 RCC_APB1Periph_TIM3:定时器3 RCC_APB1Periph_TIM4 :定时器4 RCC_APB1Periph_USART2:USART2 RCC_APB1Periph_USART3:USART3 RCC_APB1Periph_I2C1:I2C1 RCC_APB1Periph_I2C2 :I2C2 RCC_APB1Periph_CAN1:CAN1 RCC_APB1Periph_PWR:电源接口 RCC_APB1Periph_BKP:备份接口 RCC_APB1Periph_WWDG:独立看门狗 使用示例 例如,要使能USART2的时钟,可以使用如下代码: #include "stm32f10x_rcc.h" void RCC_Config(void) { // 启用USART2的时钟
RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE ; RCC_OscInitStruct.HSIState = RCC_HSI_OFF; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct