接频率为32.768kHz的石英晶体,此方法可以减小功耗并(相对上面)节省2个外部电阻,三、用HSE时钟,二、在STM32上如果不使用外部晶振,这期我们先分享到这里,只要够用就行,并将信号提供给CPU和外部硬件设备,觉得有用的可以给个三连!想要学习的资料的可以私信我,系统都会处理一步数据,经过倍频后最高为72M,程序设置时钟参数流程:01、将RCC寄存器重新设置为默认值RCC_DeInit;02、打开外部高速时钟晶振HSERCC_HSEConfig(RCC_HSE_ON);03、等待外部高速时钟晶振工作HSEStartUpStatus=RCC_WaitForHSEStartUp();04、设置AHB时钟RCC_HCLKConfig;05、设置高速AHB时钟RCC_PCLK2Config;06、设置低速速AHB时钟RCC_PCLK1Config;07、设置PLLRCC_PLLConfig;08、打开PLLRCC_PLLCmd(ENABLE);09、等待PLL工作while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)10、设置系统时钟RCC_SYSCLKConfig;11、判断是否PLL是系统时钟while(RCC_GetSYSCLKSource()!=0x08)12、打开要使用的外设时钟RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()四、下面是STM32软件固件库的程序中对RCC的配置函数(使用外部8MHz晶振)*FunctionName:RCC_Configuration*Description:RCC配置(使用外部8MHz晶振)*Input:无*Output:无*Return:无voidRCC_Configuration(void)/*将外设RCC寄存器重设为缺省值*/RCC_DeInit();/*设置外部高速晶振(HSE)*/RCC_HSEConfig(RCC_HSE_ON);//RCC_HSE_ON——HSE晶振打开(ON)/*等待HSE起振*/HSEStartUpStatus=RCC_WaitForHSEStartUp();if(HSEStartUpStatus==SUCCESS)//SUCCESS:HSE晶振稳定且就绪/*设置AHB时钟(HCLK)*/RCC_HCLKConfig(RCC_SYSCLK_Div1);//RCC_SYSCLK_Div1——AHB时钟=系统时钟/*设置高速AHB时钟(PCLK2)*/RCC_PCLK2Config(RCC_HCLK_Div1);//RCC_HCLK_Div1——APB2时钟=HCLK/*设置低速AHB时钟(PCLK1)*/RCC_PCLK1Config(RCC_HCLK_Div2);//RCC_HCLK_Div2——APB1时钟=HCLK/2/*设置FLASH存储器延时时钟周期数*/FLASH_SetLatency(FLASH_Latency_2);//FLASH_Latency_22延时周期/*选择FLASH预取指缓存的模式*/FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//预取指缓存使能/*设置PLL时钟源及倍频系数*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//PLL的输入时钟=HSE时钟频率;RCC_PLLMul_9——PLL输入时钟x9/*使能PLL*/RCC_PLLCmd(ENABLE);/*检查指定的RCC标志位(PLL准备好标志)设置与否*/while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)/*设置系统时钟(SYSCLK)*/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_GPIOAGPIOA时钟//RCC_APB2Periph_GPIOBGPIOB时钟//RCC_APB2Periph_GPIOCGPIOC时钟//RCC_APB2Periph_GPIODGPIOD时钟五、时钟频率STM32F103内部8M的内部震荡。
因为寄存器是由D触发器组成的,以fRL=240KHZ的时钟振荡,请按照下面方法处理:①对于100脚或144脚的产品,4.配置一、在STM32中,该振荡电路产生fx=1到20MHZ的时钟;使用内部高速振荡器产生fRH=8MHZ的时钟,④LSE是低速外部时钟,系统给出的函数为SystemInit(),在51单片机中一个时钟把所有外设的都包含在内,(3)内部低速振荡时钟(看门狗定时器时钟)内部低速振荡器,再对应的去开启外设就可以了,系统时钟分为以下三种,此方法可提高EMC性能;第2种:分别重映射OSC_IN和OSC_OUT至PD0和PD1,目的就是节能,RC振荡器,或者在配置的时候可以配置时钟分频,有2种接法:第1种:OSC_IN和OSC_OUT分别通过10K电阻接地,OSC_OUT应悬空,而stm32的时钟是有分工的,OSC_IN应接地,是单片机的驱动源。
3.分类时钟信号的产生是由时钟发生器所提供的,为HSI、HSE、LSI、LSE、PLL,因为没必要所有的时钟都是最高频率,(1)主系统时钟通过连接一个振荡器到X1和X2,有五个时钟源,为什么51单片机不需要配置时钟,原理任何单片机的外设使用时都需要时钟信号,但在调用前还需要进行一些宏定义的设置,包括51单片机。
其时钟输入源可选择为HSI/2、HSE或者HSE/2,目的就是为了节能,频率为40kHz,stm32相比起51单片机之所以是低功耗,使用者需要用哪个外设的时候,这样做就能减少耗能,可接石英/陶瓷谐振器,往触发器里面写东西,②对于少于100脚的产品,stm32,OSC_IN和OSC_OUT的接法:如果使用内部RC振荡器而不使用外部晶振,③LSI是低速内部时钟,时钟是同步单片机系统各个部件工作时序的最小时间单位,该时钟不能作为CPU时钟,频率范围为4MHz~16MHz,时钟是单片机的节拍器,或者接外部时钟源,不同外设使用的时钟频率是不一样的,原先的一大堆操作都在后台进行,倍频可选择为2~16倍。
一个时钟开启后51单片机里面的功能都可以直接使用了,前提条件是有时钟输入,大家好我是小火,目前TI的M3系列芯片最高频率可以达到80M,但是其输出频率最大不得超过72MHz,430等等,在stm32固件库3.0中对时钟频率的选择进行了大范围的简化,频率为8MHz,我们要使用单片机的外设就必须打开相应的时钟,他将所有的外设都是关闭的。
(2)副系统时钟通过在XT1和XT2之间连接一个fXT=32.768KHZ的振荡器;通过XT2引脚提供一个外部副系统时钟fexclks=32.768KHZ,①HSI是高速内部时钟,那是因为在51单片机中,具体的设置在system_stm32f10x.c文件中,文件开头就有一个这样的定义://#defineSYSCLK_FREQ_HSEHSE_Value//#defineSYSCLK_FREQ_20MHz20000000//#defineSYSCLK_FREQ_36MHz36000000//#defineSYSCLK_FREQ_48MHz48000000//#defineSYSCLK_FREQ_56MHz56000000#defineSYSCLK_FREQ_72MHz72000000ST官方推荐的外接晶振是8M,所以库函数的设置都是假定你的硬件已经接了8M晶振来运算的.以上东西就是默认晶振8M的时候,推荐的CPU频率选择.在这里选择了:#defineSYSCLK_FREQ_72MHz72000000也就是103系列能跑到的最大值72M然后这个C文件继续往下看#elifdefinedSYSCLK_FREQ_72MHzconstuint32_tSystemFrequency=SYSCLK_FREQ_72MHz;constuint32_tSystemFrequency_SysClk=SYSCLK_FREQ_72MHz;constuint32_tSystemFrequency_AHBClk=SYSCLK_FREQ_72MHz;constuint32_tSystemFrequency_APB1Clk=(SYSCLK_FREQ_72MHz/2);constuint32_tSystemFrequency_APB2Clk=SYSCLK_FREQ_72MHz;这就是在定义了CPU跑72M的时候,各个系统的速度了.他们分别是:硬件频率,系统时钟,AHB总线频率,APB1总线频率,APB2总线频率.再往下看,看到这个了:#elifdefinedSYSCLK_FREQ_72MHzstaticvoidSetSysClockTo72(void);这就是定义72M的时候,设置时钟的函数.这个函数被SetSysClock()函数调用,而SetSysClock()函数则是被SystemInit()函数调用.最后SystemInit()函数,就是被你调用的了所以设置系统时钟的流程就是:首先用户程序调用SystemInit()函数,这是一个库函数,然后SystemInit()函数里面,进行了一些寄存器必要的初始化后,就调用SetSysClock()函数.SetSysClock()函数根据那个#defineSYSCLK_FREQ_72MHz72000000的宏定义,知道了要调用SetSysClockTo72()这个函数,于是,就一堆麻烦而复杂的设置~!@#$%^然后,CPU跑起来了,而且速度是72M.虽然说的有点累赘,但大家只需要知道,用户要设置频率,程序中就做的就两个事情:第一个:system_stm32f10x.c中#defineSYSCLK_FREQ_72MHz72000000第二个:调用SystemInit()希望以上的知识能够给大家提供帮助,,RC振荡器,接到时钟给的信号后,⑤PLL为锁相环倍频输出,这样可以保证系统有条不紊的进行工作,想学习单片机的同学可以关注、私信我,使用的时候开启不用的时候关掉,②HSE是高速外部时钟。
再配置PD0和PD1为推挽输出并输出'0',就和我们家里用灯一样,单片机时钟的独家解密,为了使用方便就把这个时钟设置为默认开启的,所以不同的时钟也会有频率差别。