欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    自己整理STM32学习笔记关于 时钟.docx

    • 资源ID:1757671       资源大小:57.90KB        全文页数:17页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    自己整理STM32学习笔记关于 时钟.docx

    1、自己整理STM32学习笔记关于 时钟STM32学习-时钟(转载)在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。、HSI是高速内部时钟,RC振荡器,频率为8MHz。、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz16MHz。、LSI是低速内部时钟,RC振荡器,频率为40kHz。、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为216倍,但是其输出频率最大不得超过72MHz。其中40kHz的LSI供独立看门狗IWDG使用,另外它还可以被

    2、选择为实时时钟RTC的时钟源。另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。RTC的时钟源通过RTCSEL1:0来选择。STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。另外,STM32还可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。系统时钟SYSCLK,它是供STM32中绝大部分部件工作的时钟源。系统时钟可选择为PL

    3、L输出、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、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。连

    5、接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。注意USB模块虽然需要一个单独的48MHz时钟信号,但它应该不是供USB模块工作的时钟,而只是提供给串行接口引擎(SIE)使用的时钟。USB模块工作的时钟应该是由APB1提供的。连接在APB2(高速外设)上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口(PAPE)、第二功能IO口。下图为STM32芯片的时钟结构图。从图中可以直观的看出STM32的时钟封装。 STM32芯片时钟配置20

    6、09-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(

    7、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) /若成功起振,(下面为系统总线

    8、时钟设置) /* 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_PCLK2Co

    9、nfig(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_PL

    10、LMul_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_

    11、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 */ R

    12、CC_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_APB

    13、1PeriphClockCmd(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, E

    14、NABLE);/使能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 div

    15、ided by 1.5 used as USB clock source */ / RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); /根据不同PLLCLK选择分频比,必须确保USBCLK始终是48MHz / RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);/使能USB时钟/* CAN clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);/使能CAN时钟/* BKP clock enable */ RCC_APB

    16、1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);/使能BKP时钟/* PWR clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);/使能PWR时钟/* APB1Periph_ALL clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL, ENABLE);/使能APB1Periph_ALL时钟 /* Enable APB2 peripheral clocks -APB2外设时钟使能-*/* Enable GPIOA

    17、,B,C,D,E clocks */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/使能GPIOA时钟/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);/使能GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);/使能GPIOC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);/使能GPIOD时钟/ RCC_APB2PeriphClockCmd(RCC

    18、_APB2Periph_GPIOE, ENABLE);/使能GPIOE时钟/* AFIO clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);/使能AFIO时钟/* Enable ADC1,2clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);/使能ADC1时钟/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);/使能ADC2时钟/* TIM1 clock enable */ RCC_AP

    19、B2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);/使能TIM1时钟/* Enable SPI1 clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);/使能SPI1时钟/* USART1 clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);/使能USART1时钟(对应万利开发板上的USART0)/* APB1Periph_ALL clock enable */ RCC_APB2PeriphCloc

    20、kCmd(RCC_APB2Periph_ALL, ENABLE);/使能APB2Periph_ALL时钟/* Enable no peripheral clocks -非总线上外设时钟配置-*/* Enable Internal High Speed oscillator */ /RCC_HSICmd(ENABLE); /* Enable the Internal Low Speed oscillator */ /RCC_LSICmd(ENABLE); /给IWDG提供时钟信号(如果IWDG运行的话,LSI不能被失能) /* Configure RTCCLK such as ADCCLK =

    21、PCLK2/2 */ / RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);/* Select the LSE as RTC clock source */ / RCC_RTCCLKCmd(ENABLE);/* Enable the RTC clock */ /* Enable the Clock Security System */ /RCC_ClockSecuritySystemCmd(ENABLE); /* Output PLL clock divided by 2 on MCO pin */ /RCC_MCOConfig(RCC_MCO_PLLCLK_Div

    22、2);/ 警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。 在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理:1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。2)对于少于100脚的产品,有2种接法: 2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。 2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出0。此方法可以减小功耗并(相对上面2.1)节省2个外部电阻。

    23、使用HSE时钟,程序设置时钟参数流程:1、将RCC寄存器重新设置为默认值 RCC_DeInit;2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);3、等待外部高速时钟晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp();4、设置AHB时钟 RCC_HCLKConfig;5、设置高速AHB时钟 RCC_PCLK2Config;6、设置低速速AHB时钟 RCC_PCLK1Config;7、设置PLL RCC_PLLConfig;8、打开PLL RCC_PLLCmd(ENABLE);9、等待PLL工作 while(RCC_G

    24、etFlagStatus(RCC_FLAG_PLLRDY) = RESET) 10、设置系统时钟 RCC_SYSCLKConfig;11、判断是否PLL是系统时钟 while(RCC_GetSYSCLKSource() != 0x08)12、打开要使用的外设时钟 RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()下面是TM32软件固件库的程序中对RCC的配置函数(使用外部8MHz晶振)/* Function Name: RCC_Configuration * Description :RCC配置(使用外部8MHz晶振)* Input : 无* O

    25、utput : 无* Return : 无*/void RCC_Configuration(void)/*将外设RCC寄存器重设为缺省值 */RCC_DeInit();/*设置外部高速晶振(HSE)*/RCC_HSEConfig(RCC_HSE_ON); /RCC_HSE_ONHSE晶振打开(ON)/*等待HSE起振*/HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus = SUCCESS) /SUCCESS:HSE晶振稳定且就绪 /*设置AHB时钟(HCLK)*/ RCC_HCLKConfig(RCC_SYSCLK_D

    26、iv1);/RCC_SYSCLK_Div1AHB时钟 = 系统时钟 /* 设置高速AHB时钟(PCLK2)*/ RCC_PCLK2Config(RCC_HCLK_Div1); /RCC_HCLK_Div1APB2时钟 = HCLK /*设置低速AHB时钟(PCLK1)*/ RCC_PCLK1Config(RCC_HCLK_Div2); /RCC_HCLK_Div2APB1时钟 = HCLK / 2 /*设置FLASH存储器延时时钟周期数*/ FLASH_SetLatency(FLASH_Latency_2); /FLASH_Latency_22延时周期 /*选择FLASH预取指缓存的模式*/

    27、FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); / 预取指缓存使能 /*设置PLL时钟源及倍频系数*/ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); / PLL的输入时钟 = HSE时钟频率;RCC_PLLMul_9PLL输入时钟x 9/*使能PLL */ RCC_PLLCmd(ENABLE); /*检查指定的RCC标志位(PLL准备好标志)设置与否*/ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /*设置系统时钟(SY

    28、SCLK) */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /RCC_SYSCLKSource_PLLCLK选择PLL作为系统时钟 /* PLL返回用作系统时钟的时钟源*/ while(RCC_GetSYSCLKSource() != 0x08) /0x08:PLL作为系统时钟 /*使能或者失能APB2外设时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE); /RCC_APB2Periph_GPIOA GPIOA时钟/RCC_APB2Periph_GPIOB GPIOB时钟/RCC_APB2Periph_GPIOC GPIOC时钟/RCC_APB2Periph_GPIOD GPIOD时钟系统时钟函数,要设置系统使用哪个晶振工作。*


    注意事项

    本文(自己整理STM32学习笔记关于 时钟.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开