锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

野火STM32学习(10)

时间:2023-05-03 20:07:00 bsq015c振动变送器

时钟——STM32F407ZGTX

/* system_stm32f4xx.c 时钟配置(setsysclock)寄存器版代码 */  static void bsp_SetSysClock(void) {   __IO uint32_t StartUpCounter = 0, HSEStatus = 0;      /* HSE 时钟使能 */   RCC->CR |= ((uint32_t)RCC_CR_HSEON);     /* 等待 HSE 时钟就绪后跳出循环或超时*/   do   {  /* HSE 存储时钟就绪标志 HSEStatus */     HSEStatus = RCC->CR & RCC_CR_HSERDY;  /* 计数器   */     StartUpCounter  ;   } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));    /* 添加标志位 */   if ((RCC->CR & RCC_CR_HSERDY) != RESET)   {     HSEStatus = (uint32_t)0x01;   }   else   {     HSEStatus = (uint32_t)0x00;   }    if (HSEStatus == (uint32_t)0x01)   {  ////使能电源接口时钟     RCC->APB1ENR |= RCC_APB1ENR_PWREN;   ///调压器输出电压水平选择1     PWR->CR |= PWR_CR_VOS;     /* 系统时钟不分频 / 1*/     RCC->CFGR |= RCC_CFGR_HPRE_DIV1;     /* APB2 2分频 / 2*/     RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;     /* APB1 4分频 / 4*/     RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;     /* 配置PLL的/M xN /P /Q */     RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |                    (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);     /* 使能PLL */     RCC->CR |= RCC_CR_PLLON;     /* 等待PLL配置完成 */     while((RCC->CR & RCC_CR_PLLRDY) == 0)     {              }     /* 配置闪存提取、指令缓存、数据缓存和等待状态 */     FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;     /* 选择PLL作为Syste时钟 */     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));     RCC->CFGR |= RCC_CFGR_SW_PLL;     /* 等待PLL用作系统时钟 */     while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);     {     }   }   else   {    /* If HSE fails to start-up, the application will have wrong clock     configuration. User can add here some code to deal with this error */   }  }
/* 自写时钟配置代码-调用固件库 */  void bsp_SetSysClock(uint32_t PLLM) {  /* 复位 RCC 寄存器 */   RCC_DeInit();  /* 使能 HSE */  RCC_HSEConfig(RCC_HSE_ON);  /* 判断 HSE 是否就绪 */  ErrorStatus HSE_ErrorStatus = ERROR;  HSE_ErrorStatus = RCC_WaitForHSEStartUp();  /* 就绪 */  if(HSE_ErrorStatus == SUCCESS)  {   /* 使能源接口时钟 */   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);   /* 设置电压输出模式为 mode_1 */      PWR_MainRegulatorModeConfig(PWR_Regulator_Voltage_Scale1);   /* 设置系统时钟分频系数 */   RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB   RCC_PCLK1Config(RCC_HCLK_Div4);//APB1   RCC_PCLK2Config(RCC_HCLK_Div2);//APB2   /* 设置 PLL 分/倍频系数 */   RCC_PLLConfig(RCC_PLLSource_HSE, PLLM, 336, 2, 7);   /* 使能 PLL */   RCC_PLLCmd(ENABLE);      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)   {    /* 等待 PLL 开启完成 */   }   /* 配置闪存预取 */   FLASH_PrefetchBufferCmd(ENABLE);   /* 指令缓存 */   FLASH_InstructionCacheCmd(ENABLE);   /* 数据缓存 */   FLASH_DataCacheCmd(ENABLE);   /* 等待状态 */   FLASH_SetLatency(FLASH_Latency_5);   /* 选择 PLL 作为 SYSTEM 的时钟 */   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);            while(RCC_GetSYSCLKSource() != 0x08)   {    /* 等待 PLL 用作系统时钟 */   }  }  /* 超时 */  else  {   /* HSE时钟振荡器打开失败后运行的代码 */  } }

()

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章