stm32寄存器开发--rcc时钟树
·

这个图片清晰明了,寄存器配置从下往上即可。
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
void flash_init(){
// 2. Flash配置(升频前必须)
FLASH->ACR &= ~(0x03);
FLASH->ACR |= 0x02; // LATENCY=2,72M需要2个等待周期
FLASH->ACR |= (1UL << 4); // 预取缓冲
}
void rcc_init(){
//使能HSE并等待使能成功
RCC->CR |= (1ul << 16);
while( !(RCC->CR & (1UL << 17)) );
flash_init();
//HSE直接给PLL,不走二分频
RCC->CFGR &= ~(1ul << 17);
//配置PLL倍频
RCC->CFGR &= ~(0x0F << 18);
RCC->CFGR |= (0x07 << 18);
//使能PLL并等待使能成功
RCC->CR |= (1ul << 24);
while(!(RCC->CR & (1ul << 25)));
//选择PLL为系统时钟
RCC->CFGR |= (1ul << 1);
RCC->CFGR &= (1ul << 0);
//设置总线分频
RCC->CFGR &= ~(1ul << 7); //AHB不分频
RCC->CFGR |= (1ul << 10);
RCC->CFGR &= ~((1ul << 8) | (1ul << 9)); //APB1二分频
RCC->CFGR &= ~(1ul << 13); //APB2不分频
//关闭HSL
RCC->CR &= ~(1ul << 0);
}
int main(void)
{
while (1)
{
}
}
reset and clock contorl(rcc),时钟树配置流程:
1、使能HSE并等待
2、flash等待2周期并开启指令
3、设置HSE直接给PLL还是先2分频,HSE为4~16M
4、设置PLL的倍频系数
5、使能PLL并等待完成
6、选择PLL为系统时钟
7、设置APB1,APB2,AHB三条总线的分频,其中APB1规定不能超过36M
8、关闭HSL
关于flash,就是cpu从flash取指令,如果cpu主频太高,flash处理不过来,指令预取我认为算是提高一个传输效率吧。
有关于flash的操作要在使能PLL前完成。
注意,板子上电时先运行systeminit,系统帮配好时钟树,再运送main,如果想验证自己写的对不对,那就注释掉这个systeminit。
来财,来。
更多推荐

所有评论(0)