好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

STM32学习笔记(关于时钟).doc

13页
  • 卖家[上传人]:豆浆
  • 文档编号:11381797
  • 上传时间:2017-10-13
  • 文档格式:DOC
  • 文档大小:127KB
  • / 13 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • STM32 学习----时钟(转载)在 STM32 中,有五个时钟源,为 HSI、HSE、LSI、LSE、PLL①、HSI 是高速内部时钟,RC 振荡器,频率为 8MHz②、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~16MHzHSE/LSE 时钟源③、LSI 是低速内部时钟,RC 振荡器,频率为 40kHz④、LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体⑤、PLL 为锁相环倍频输出,其时钟输入源可选择为 HSI/2、HSE 或者 HSE/2倍频可选择为 2~16 倍,但是其输出频率最大不得超过 72MHz其中 40kHz 的 LSI 供独立看门狗 IWDG 使用,另外它还可以被选择为实时时钟 RTC 的时钟源另外,实时时钟 RTC 的时钟源还可以选择 LSE,或者是 HSE的 128 分频RTC 的时钟源通过 RTCSEL[1:0]来选择STM32 中有一个全速功能的 USB 模块,其串行接口引擎需要一个频率为48MHz 的时钟源该时钟源只能从 PLL 输出端获取,可以选择为 1.5 分频或者1 分频,也就是,当需要使用 USB 模块时,PLL 必须使能,并且时钟频率配置为48MHz 或 72MHz。

      另外,STM32 还可以选择一个时钟信号输出到 MCO 脚(PA8)上,可以选择为PLL 输出的 2 分频、HSI、HSE、或者系统时钟系统时钟 SYSCLK,它是供 STM32 中绝大部分部件工作的时钟源系统时钟可选择为 PLL 输出、HSI 或者 HSE系统时钟最大频率为 72MHz,它通过 AHB 分频器分频后送给各模块使用,AHB 分频器可选择1、2、4、8、16、64、128、256、512 分频其中 AHB 分频器输出的时钟送给5 大模块使用:①、送给 AHB 总线、内核、内存和 DMA 使用的 HCLK 时钟②、通过 8 分频后送给 Cortex 的系统定时器时钟③、直接送给 Cortex 的空闲运行时钟 FCLK④、送给 APB1 分频器APB1 分频器可选择 1、2、4、8、16 分频,其输出一路供 APB1 外设使用(PCLK1,最大频率 36MHz),另一路送给定时器(Timer)2、3、4 倍频器使用该倍频器可选择 1 或者 2 倍频,时钟输出供定时器2、3、4 使用⑤、送给 APB2 分频器APB2 分频器可选择 1、2、4、8、16 分频,其输出一路供 APB2 外设使用(PCLK2,最大频率 72MHz),另一路送给定时器(Timer)1 倍频器使用。

      该倍频器可选择 1 或者 2 倍频,时钟输出供定时器 1 使用另外,APB2 分频器还有一路输出供 ADC 分频器使用,分频后送给 ADC 模块使用ADC分频器可选择为 2、4、6、8 分频在以上的时钟输出中,有很多是带使能控制的,例如 AHB 总线时钟、内核时钟、各种 APB1 外设、APB2 外设等等当需要使用某模块时,记得一定要先使能对应的时钟需要注意的是定时器的倍频器,当 APB 的分频为 1 时,它的倍频值为 1,否则它的倍频值就为 2连接在 APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4注意 USB 模块虽然需要一个单独的 48MHz 时钟信号,但它应该不是供 USB 模块工作的时钟,而只是提供给串行接口引擎(SIE)使用的时钟USB 模块工作的时钟应该是由 APB1 提供的连接在 APB2(高速外设)上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通 IO 口(PA~PE)、第二功能 IO 口下图为 STM32 芯片的时钟结构图。

      从图中可以直观的看出 STM32 的时钟封装 STM32 芯片时钟配置2009-12-26 11:44对 STM32 进行软件开发时,最基本的就是对 STM32 芯片进行时钟和端口配置,然后是对项目所用到的片上资源进行配置并驱动,下面给出时钟和端口配置代码,该代码几乎涵盖了片上所有时钟和端口配置项目,可根据自己需要进行删除不必要的配置项: /******************************************************************************** Function Name : RCC_Configuration 复位时钟控制配置* Description : Configures the different system clocks.* Input : None* Output : None* Return : None*******************************************************************************/void RCC_Configuration(void){/* system clocks configuration -----------------系统时钟配置-------------------*//* RCC system reset(for debug purpose) */RCC_DeInit(); //将外设 RCC 寄存器重设为缺省值/* Enable HSE */RCC_HSEConfig(RCC_HSE_ON); //开启外部高速晶振(HSE)/* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待 HSE 起振if(HSEStartUpStatus == SUCCESS) //若成功起振,(下面为系统总线时钟设置){/* Enable Prefetch Buffer */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能 FLASH预取指缓存/* Flash 2 wait state */FLASH_SetLatency(FLASH_Latency_2); //设置 FLASH 存储器延时时钟周期数(根据不同的系统时钟选取不同的值)/* HCLK = SYSCLK */RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置 AHB 时钟=72 MHz/* PCLK2 = HCLK/2 */RCC_PCLK2Config(RCC_HCLK_Div2); //设置 APB1 时钟=36 MHz(APB1 时钟最大值)/* PCLK1 = HCLK/2 */RCC_PCLK1Config(RCC_HCLK_Div1); //设置 APB2 时钟=72 MHz/* Configure ADCCLK such as ADCCLK = PCLK2/2 */RCC_ADCCLKConfig(RCC_PCLK2_Div2); //RCC_PCLK2_Div2,4,6,8/* PLLCLK = 8MHz * 9 = 72 MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLL 必须在其激活前完成配置(设置 PLL 时钟源及倍频系数)/* 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){ } }/* Enable peripheral clocks -----------------外设时钟使能-------------------*/ /* Enable AHB peripheral clocks -----------------AHB 外设时钟使能-------------------*//* Enable DMA clock */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//使能 DMA 时钟/* Enable SRAM clock */// RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SRAM, ENABLE);//使能 SRAM 时钟/* Enable FLITF clock */// RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FLITF, ENABLE);//使能 FLITF 时钟/* Enable APB1 peripheral clocks -----------------APB1 外设时钟使能-------------------*//* TIM2,3,4 clock enable */// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能 TIM2 时钟 if (APB1 prescaler="1") x1// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//使能 TIM3 时钟 else x2// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//使能 TIM4 时钟/* WWDG clock enable */// RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);//使能 WWDG 时钟/* Enable SPI2 clocks */// RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI2, ENABLE);//使能 SPI2 时钟/* USART2,3 clock enable */// RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//使能 USART2时钟(对应万利开发板上的 USART1)// RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);//使能 USART3时钟(万利开发板上未接该串口)/* I2C1,2 clock enable */// RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);//使能 I2C1 时钟// RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);//使能 I2C2 时钟/* USB clock enable / PLL clock divided by 1.5 used as USB clock source */// RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); //根据不同 PLLCLK选择分频比,必须确保 USBCLK 始终是。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.