关于CFGR2设置

2019-03-23 19:45发布

各位前辈,本人初学STM32,实验室有块板子,上面是stm32f107芯片的,时钟是25M,我根据手册说明,想通过设置寄存器得到72M系统时钟,以下是我的程序: void MYRCC_Init(void)
{
 MYRCC_DeInit();
  
 RCC->CR|=1<<16; //外部高速时钟使能 HSION
 while(!RCC->CR>>17);//等待外部时钟就绪  RCC->CFGR2 |=4<<4;//预分频2进行5分频
 RCC->CFGR2 |=0x0E<<8;//PLL2倍频16倍
 RCC->CR|=1<<26;//PLL2倍频开
 while(!(RCC->CR>>27));//等待PLL2锁定  RCC->CFGR2 |=1<<16;//PLL2作为预分频1的时钟源
 RCC->CFGR2 |=9;//预分频1进行10倍分频
 RCC->CFGR|=1<<16;//预分频11输出作为PLL输入时钟  RCC->CFGR|=7<<18;//PLL1倍频9倍
 RCC->CR|=1<<24;//PLL1倍频开
 while(!(RCC->CR>>25));//等待PLL1锁定
 RCC->CFGR|=2<<1;//选择PLL输出作为系统时钟源 
} 具体步骤:HSE(25MHZ)->PREDIV2(5分频)——5MHZ——>PLL2MUL(16倍频)——80MHZ——>PREDIV1SCR(选择PLL2)——80MHZ——>PREDIV1(10分频)——8MHZ——>PLLSCR(PREDIV1输入)——8MHZ——>PLLMUL(9倍频)——72MHZ——>SW(选择PLL)——SYSCLK(72MHZ).   但在程序编译的时候出现错误编译不过,错误提示如下:struct "<unnamed>" has no field "CFGR2" 请求前辈指导,感谢! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
tonxim
2019-03-24 05:23
以上问题我自己已经解决,程序代码如下,经过测试能够实现功能
                        MYRCC_DeInit();                               
                        RCC->CR|=1<<16;        //外部高速时钟使能 HSION
                        while(!RCC->CR>>17);//等待外部时钟就绪               
                        RCC->CR&=~(1<<26);//PLL2倍频关
                        RCC->CFGR2&=~(0X0F<<4);//预分频2进行5分频
                        RCC->CFGR2|=4<<4;//预分频2进行5分频
                        RCC->CFGR2&=~(0X0F<<8);
                        RCC->CFGR2|=6<<8;//PLL2倍频8倍
                        RCC->CR|=1<<26;//PLL2倍频开
                        while(!(RCC->CR>>27));//等待PLL2锁定               
                        RCC->CR&=~(1<<24);//PLL1倍频关
                        RCC->CFGR2|=1<<16;//PLL2作为预分频1的时钟源
                        RCC->CFGR2|=1<<2;//预分频1进行5倍分频
                        RCC->CFGR|=1<<16;//预分频1输出作为PLL输入时钟
                        RCC->CFGR&=~(0X0F<<18);
                        RCC->CFGR|=7<<18;//PLL1倍频9倍
                        FLASH->ACR|=0x02;   //FLASH 2个延时周期
                        RCC->CR|=1<<24;//PLL1倍频开
                        while(!(RCC->CR>>25));//等待PLL1锁定
                        RCC->CFGR|=1<<1;//PLL作为系统时钟
                        while(!RCC->CFGR>>3);//等待PLL时钟选择就绪

一周热门 更多>