125
1241
0
实习生
以MM32F031系列单片机为例,说一下使用情况。
这款国产单片机兼容ST同型号,ST的最高到48M主频,而MM的最高能到72M。
在灵动官网下载的示例程序系统时钟源是通过system_MM32F031x4x6_q.c中的宏选择的,如下图:
2257161508bac95802.png (405.25 KB ) 下载附件 2021-9-26 23:03 上传
2257161508bac95802.png (405.25 KB )
下载附件
2021-9-26 23:03 上传
使用特权
static void SetSysClockToHSE(void) { /* 使能HSE */ RCC->CR |= RCC_CR_HSEON; /* 等待HSE准备就绪 */ while(!(RCC->CR & RCC_CR_HSERDY)); /* 启用预取缓冲区并设置闪存延迟 */ FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY_1; /* 设置HCLK时钟分频为1分频 */ RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; /* 设置PCLK1时钟分频1分频 */ RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; /* 设置PCLK2时钟分频1分频 */ RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; /* 设置HSE作为PLL输入时钟 */ RCC->CFGR |= (1 << 16); /* 设置HSE不分频输入PLL */ RCC->CFGR &= (~(1 << 17)); /* 设置PLL倍频6倍到48M */ RCC->CR &= (~(1 << 26)); RCC->CR |= (5 << 26); // PLLDN = 5 RCC->CR &= (~(1 << 20)); // PLLDM = 0 /* 使能PLL */ RCC->CR |= (1 << 24); /* 等到PLL就绪 */ while(((RCC->CR & (1 << 25)) == 0)); /* 设置PLL输出作为系统时钟 */ RCC->CFGR &= (~RCC_CFGR_SW); RCC->CFGR |= RCC_CFGR_SW_1; /* 等待系统时钟切换就绪 */ while(((RCC->CFGR & (RCC_CFGR_SW_1 << 2)) == 0)); }
4082361508cb67754f.png (94.91 KB )
2021-9-26 23:07 上传
153
900
2703
初级工程师
72
598
1785
助理工程师
发表回复 本版积分规则 回帖后跳转到最后一页
5
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号