【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
谢谢分享 那是寄存器的两个位,,并不表示实际的数值,上面写的很清楚,00 : PLLP=2,没写0=2吧 现在用寄存器的确实不多 风子 发表于 2015-12-21 17:59
那是寄存器的两个位,,并不表示实际的数值,上面写的很清楚,00 : PLLP=2,没写0=2吧 ...
大概就这意思,,,折腾一天:'(
页:
[1]