我的颈 发表于 2015-12-21 17:32:54

【NUCLEO-F410RB开发】+工程建立之RCC与众不同

本帖最后由 我的颈 于 2015-12-21 17:32 编辑

首先呢先感谢下论坛能有这么个活动,这么便宜得到一块开发板
东西不能白拿啊,所以呢写篇使用心得,作为一个小菜鸟第一次写,
写的不好,多多包涵!


1.板子到手之后就是建立工程
       我不太喜欢用库函数,感觉寄存器好用些,当然了涉及到复杂的协议,像USB什么的还是用官方的库比较省事,百度STM32F410RB 寄存的工程没找到(可能是我不太仔细吧…),百度没有,那STM32F410 NUCLEO(还是内部晶振) 这板子的更木有了.所以自己想着建个工程
开始喽,
       这是所需的文件,去keil文件下都能找到,include 记得填进去


2.工程文件弄好了就是捣鼓时钟了
       由于不带外部时钟而且官方的是库函数,所以需要自己配置一下RCC
/**
                              这是官方库函数的参数,我们按照他的参数设定
*            System Clock source            = PLL (HSI)
*            SYSCLK(Hz)                     = 100000000
*            HCLK(Hz)                     = 100000000
*            AHB Prescaler                  = 1
*            APB1 Prescaler               = 2
*            APB2 Prescaler               = 1
*            HSI Frequency(Hz)            = 16000000
*            PLL_M                        = 16
*            PLL_N                        = 200
*            PLL_P                        = 2
*            PLL_Q                        = 7
*            PLL_R                        = 2
*            VDD(V)                         = 3.3
*            Main regulator output voltage= Scale2 mode
*            Flash Latency(WS)            = 3
*/
void SYSClock_Init(void)
{
      RCC->APB1ENR      |=1<<28;                            //使能PWR
      PWR->CR               |=3<<14;                     //      等级3
      RCC->CFGR            |=(0<<4)|(4<<10)|(0<<13);    //AHB不分频 APB1 2分频   APB2 不分频
      RCC->CFGR            |=3<<21;                                  //时钟输出 测试PLL
      RCC->CFGR            |=7<<24;                                 //5分频
      RCC->PLLCFGR      =(16<<0)|(200<<6)|(0<<16)|(7<<24)|(2<<28);//M N P Q R
      RCC->CR               |=1<<24;                               //使能PLL
      while(!((RCC->CR>>25)&0x01));                                     //等待 Ready
      FLASH->ACR            |=1<<8;                                       //      Prefetch
      FLASH->ACR            |=1<<9;                                    /Instruction cache
      FLASH->ACR            |=1<<10;                                  //Data cache
      FLASH->ACR            |=3<<0;                                  //3个延时

      RCC->CFGR             &=~(3<<0);                           //清除
      RCC->CFGR             |=2<<0;                               //PLL source
      while((RCC->CFGR&(3<<2))!=(2<<2));                   //等待就绪
      SYSTick_Init(100);                                                   //滴答定时器
}
3 .这样就配置好了时钟了
       PCLK为100MH
       通过MCO1输出(PA8)
       MCO1:5分频
       选择 PLL输出
       我们用分析仪看下时序


4.个人认为使用寄存器能学到不少东西.尤其像我们这些新手,配置RCC使用了1天时间,
遇到不少错误,不过最终能成功也是蛮不错的
还有就是 STM32F4中文版的RM手册,和STM32F410有不少出入,
我看的是STM32F410-RM0401.pdf


卡在这个错误上一天
0不等于0 ,2不等于2
0等于2,2等于6
不知大家能否看懂
也让官方的参数误导了
好了就这些
第一次发帖,多多关注
如有不足,欢迎指出
827230081可以联系我 一起学习




827230081

dsjsjf 发表于 2015-12-21 17:50:05

谢谢分享

风子 发表于 2015-12-21 17:59:40

那是寄存器的两个位,,并不表示实际的数值,上面写的很清楚,00 : PLLP=2,没写0=2吧

zhangdaijin 发表于 2015-12-21 19:19:11

现在用寄存器的确实不多

我的颈 发表于 2015-12-21 19:19:32

风子 发表于 2015-12-21 17:59
那是寄存器的两个位,,并不表示实际的数值,上面写的很清楚,00 : PLLP=2,没写0=2吧 ...

大概就这意思,,,折腾一天:'(
页: [1]
查看完整版本: 【NUCLEO-F410RB开发】+工程建立之RCC与众不同