完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 MMCU5721167 于 2017-9-21 14:17 编辑 如何配置MM32系统时钟? 来源 MM32 大家都知道在使用MCU时,时钟相当于MCU的 “心脏”,时钟的速度取决于外部晶振或内部RC振荡电路的频率,是不可改变的。而ARM的出现打破了这一传统法则,可通过软件随意改变时钟的速度。这一出现让我们的设计更加灵活,频率可选空间也更加广泛,用户可以根据自己的实际需求配置需要的系统时钟。为了让用户能够更简单的使用这一功能,下面小编将教大家如何配置MM32L0产品的系统时钟。 从时钟频率来分可分为高速时钟源和低速时钟源,从来源可分为外部时钟源和内部时钟源,外部时钟源就是通过外部接晶振的方式获取时钟源,其中 HSE 和 LSE 是外部时钟源,其它的是内部时钟源。 用户可通过多个预分频器配置AHB 、高速APB(APB2)和低速APB(APB1)域的频率,AHB和APB1,APB2域的最大频率是48MHz。 MCO 是 MM32 的一个时钟输出 I/O (PA8),它可以选择一个时钟信号输出,可以选择为 PLL的 2 分频、 HSI、 HSE、LSI或者系统时钟。这个时钟可以用来给外部其他系统提供时钟源。 首先让我们来看看 MM32L0产品的时钟系统图吧: MM32L0产品时钟树 MM32时钟配置方法: 1、使用system_MM32L0产品.c配置时钟 在MM32固件库中对时钟频率的选择进行了大大的简化,原先的一大堆操作都在后台进行。系统给出的函数为SystemInit(),但在调用前还需要进行一些宏定义的设置,具体的设置在system_MM32L0xx.c文件中。 system_MM32L0xx.c文件中定义: //#defineSYSCLK_FREQ_HSE HSE_VALUE //#defineSYSCLK_FREQ_24MHz 24000000 //#defineSYSCLK_FREQ_36MHz 36000000 #defineSYSCLK_FREQ_48MHz 48000000 (配置外部48MHz系统时钟) //#defineSYSCLK_HSI_24MHz 24000000 //#defineSYSCLK_HSI_36MHz 36000000 //#define SYSCLK_HSI_48MHz 48000000 库函数的设置都是假定您的硬件已经接了外部8M晶振,所以上述宏都是在8MHz的基础上运算得来的,您只需要打开相对应的宏就可以实现对应的系统时钟配置。 2、使用库函数配置时钟 用HSE作为时钟源,程序设置时钟参数流程: 01、将RCC寄存器重新设置为默认值 RCC_DeInit; 02、打开外部高速时钟晶振 HSE RCC_HSEConfig(RCC_HSE_ON); 03、等待外部高速时钟晶振工作 RCC_WaitForHSEStartUp()!=0 04、设置AHB时钟 RCC_HCLKConfig; 05、设置APB2时钟 RCC_PCLK2Config; 06、设置APB1时钟 RCC_PCLK1Config; 07、设置PLL输入时钟源 RCC_PLLConfig; 08、打开PLL RCC_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() 下面是MM32软件固件库的程序中对RCC的配置函数: void System_HSE_Clock_Init(u8 PLL) { RCC_DeInit(); // RCC system reset RCC_HSEConfig(RCC_HSE_ON); // Enable HSE HSEStartUpStatus = RCC_WaitForHSEStartUp(); // Waittill HSE is ready if(HSEStartUpStatus == SUCCESS) // 当HSE准备完毕切振荡稳定后 { RCC_HCLKConfig(RCC_SYSCLK_Div1); // HCLK = SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK RCC_PCLK1Config(RCC_HCLK_Div2); // PCLK1 = HCLK/2 FLASH_SetLatency(FLASH_Latency_2); // Flash 2 wait state FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, PLL); //PLLis 48MHz RCC_PLLCmd(ENABLE); // Enable PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET) { } RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while (RCC_GetSYSCLKSource()!= 0x08) { } } } 3、使用寄存器配置时钟 void System_HSE_Clock_Init(u8 PLL) { unsigned char temp=0; RCC->CR|=RCC_CR_HSEON; // Enable HSE while(!(RCC->CR&RCC_CR_HSERDY)); // Wait till HSE is ready RCC->CFGR=RCC_CFGR_PPRE1_2; //APB1=DIV2;APB2=DIV1;AHB=DIV1; RCC->CFGR|=RCC_CFGR_PLLSRC; RCC->CR &=~(RCC_CR_PLLON); RCC->CR &=~(0x1f<<26); RCC->CR|=(PLL - 1) << 26; // FLASH->ACR|=FLASH_ACR_LATENCY_1|FLASH_ACR_PRFTBE|FLASH_ACR_PRFTBS; // Flash 2 wait state RCC->CR|=RCC_CR_PLLON; // Enable PLL while(!(RCC->CR&RCC_CR_PLLRDY)); RCC->CFGR|=RCC_CFGR_SW_PLL; // Wait till PLL is ready while(temp!=0x02) { temp=RCC->CFGR>>2; temp&=0x03; } } 通过上面三种方式都可配置MM32时钟,微控制器允许输出时钟信号到外部MCO管脚,用户可通过引脚PA8输出时钟更直观的方式观察时钟系统,配置方法如下: int RCC_OUT(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8; //MCO PA8 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_0); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); RCC_MCOConfig(RCC_MCO_SYSCLK); //通过PA8观察系统频率 } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
2249个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
11714 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5932 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
10973 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4579 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4307 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
982浏览 1评论
808浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 06:46 , Processed in 0.582217 second(s), Total 49, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号