原子哥是谁的板子是25M晶振,程序上要怎么改呢

查看: 5629|回复: 22
在线时间12891 小时
阅读权限100
http://mmchifi.taobao.com
经验8614 点
金钱4346 ¥
小弟手上有一台八位LED频率计,HC-F1000L,平时用来测测频率感觉也还好用,八位显示一般情况下也够用了。
输入频率范围是10HZ~100MHZ,100MHZ~1GHZ。
前段时间手痒拆开了外壳,看看内部到底如何,呵呵。
发现内部10MHZ晶振(振荡器)好似不太好,就铁皮外壳封住的,不像正规厂家成品晶振,汗一个,供电是5V,估计也是温补晶振之类的:
另外其电源变压器次级交流带负载都有10V,还是高了点,因为整个线路的工作电压是7805稳压后提供的,
7805的压差比较大,散热片比较烫手。
测试10MHZ晶振波形如下:
决定从两方面摩改这台频率计:
1。用成品恒温晶振替代原机的晶振
2。将次级10V的变压器更换为7.5V的(因为更换恒温晶振之后,电流会增加,那么降低次级电压,有利于降低7805功耗)。
计划好之后,就是备料:
首先网上找了恒温晶振,5V 10MHZ方波全新的,要好几百个大洋,也太贵啦,只好退而求其次,买二手的吧。
回来四个:
其中那个OCXO82-59的,网上有这颗恒温晶振的指标,还不错,就选她啦。
用洞洞板将她固定好:
频率计和恒温晶振通电10多分钟后,用频率计测试这颗恒温晶振的频率:
测试结果:HZ。
如果以被测试恒温晶振为基准,那么可以推算出频率计的晶振频率就偏低了!
准备的一颗变压器:
跟原变压器比较:
还好,脚位都合得上,而且叠厚比原机的厚些,说明功率比原机大。
另外次级电压由原来的10多伏降低为7.5V,有利于降低7805的发热。
最终装好恒温晶振和变压器的内部图:
摩改好之后,频率计通电10多分钟,
拆下来的原晶振也通电10多分钟
这个时候测试原晶振频率:
9999964HZ,果然跟开始推算的原频率计晶振频率偏慢相吻合。
当然这都建立在以OCXO82-59恒温晶振为基准的情况下得出来的结论,
如果还要更进一步确认所换恒温晶振频率的准确性,只能用更高精度的时钟来验证啦,
下一步就准备搞个铷原子钟来校正吧,呵呵。
在线时间1603 小时
阅读权限50
业余侠客, 积分 305, 距离下一级还需 195 积分
业余侠客, 积分 305, 距离下一级还需 195 积分
经验305 点
金钱304 ¥
顶一个。。。毛大又搞咩东东
在线时间2911 小时
阅读权限100
罗宾汉, 积分 2155, 距离下一级还需 3845 积分
罗宾汉, 积分 2155, 距离下一级还需 3845 积分
经验2155 点
金钱2137 ¥
厉害,不是一般的牛人。
在线时间12891 小时
阅读权限100
http://mmchifi.taobao.com
经验8614 点
金钱4346 ¥
厉害,不是一般的牛人。
languifan 发表于
不是吧,就换两个零件,感觉还是挺简单的啊。
在线时间1715 小时
阅读权限50
职业侠客, 积分 752, 距离下一级还需 248 积分
职业侠客, 积分 752, 距离下一级还需 248 积分
经验752 点
金钱737 ¥
这个都能发烧,恭喜毛大找到新的发烧目标,基准仪器发烧不是一般的呀~
在线时间12891 小时
阅读权限100
http://mmchifi.taobao.com
经验8614 点
金钱4346 ¥
顶一个。。。毛大又搞咩东东
yijkgdiqplr 发表于
是看了小明大大的这篇文章:
感觉频率计的精确度、稳定性这些还是挺重要的,所以就想将手上的频率计摩改下。
下一步就准备搞个铷原子钟来校正一下恒温晶振。
如果直接用铷原子钟来升级晶振,这种方式是最好的
只是铷原子钟体积大,供电麻烦,所以感觉用恒温晶振也就是一个不错的选择。
在线时间2035 小时
阅读权限70
侠之大者, 积分 1803, 距离下一级还需 197 积分
侠之大者, 积分 1803, 距离下一级还需 197 积分
经验1803 点
金钱1544 ¥
cs原子钟你都有?强人吖,
另外请教下 能否分析一下这台频率计的原理,本振是10m 的要测1000m的.差100倍,
怎么采样的,我之前也有diy一台数字频率计,测的频率是K级的,当然通过微调整程序
理论上可以测到 本振附近,现在想上到10-100M,
难道是先利用硬件的10或者100进制的脉冲编码输出,再送单片机采样?
我做的比较土,请老兄指教一二
在线时间5040 小时
阅读权限70
一级二类非限定女神
侠之大者, 积分 1847, 距离下一级还需 153 积分
侠之大者, 积分 1847, 距离下一级还需 153 积分
经验1847 点
金钱1820 ¥
楼主的频率计二手的见有80元的,不知要得吗
在线时间7179 小时
阅读权限150
经验6219 点
金钱2905 ¥
不错不错,但这样的频率计说是8位,但是要10S 的闸门才行吧。恒温晶振放进去是有点浪费了。找些1ppm 的温补就不错了。省电好用,恒温可是要通电好长时间才能稳定下来的。
我是用这个频率计,1S闸门能出11位。
[img[/img]
在线时间5875 小时
阅读权限120
经验6195 点
金钱4484 ¥
不错不错,但这样的频率计说是8位,但是要10S 的闸门才行吧。恒温晶振放进去是有点浪费了。找些1ppm 的温补就不错了。省电好用,恒温可是要通电好长时间才能稳定下来的。
我是用这个频率计,1S闸门能出11位。
aeon 发表于
打打打……打劫!
我的频率计也该整整了。。嘿嘿。
在线时间4528 小时
阅读权限100
经验851 点
金钱562 ¥
已经玩梗原子钟啦。现在10M的只系1百几,性价比超高!
(52.92 KB, 下载次数: 2)
19:32 上传
在线时间12891 小时
阅读权限100
http://mmchifi.taobao.com
经验8614 点
金钱4346 ¥
cs原子钟你都有?强人吖,
另外请教下 能否分析一下这台频率计的原理,本振是10m 的要测1000m的.差100倍,
怎么采样的,我之前也有diy一台数字频率计,测的频率是K级的,当然通过微调整程序
理论上可以测到 本振附近,现 ...
fedora10 发表于
不好意思啊,具体工作原理,小弟也不清楚。
如果要测试100MHZ到1000MHZ,个人感觉还是先硬件10或者100进制再去单片机处理比较好,这样对软件要求低很多。
这台频率计,其100M~1G,就是B通道完成的,有个专门的小铁盒屏蔽的,所以感觉是先硬件处理了的。
在线时间12891 小时
阅读权限100
http://mmchifi.taobao.com
经验8614 点
金钱4346 ¥
楼主的频率计二手的见有80元的,不知要得吗
LF-GODDESS 发表于
我这台频率计是很早前的,现在二手卖的80元,就不清楚内部如何了哦。
如果内部差不多,80元还是相当划算啊。
在线时间12891 小时
阅读权限100
http://mmchifi.taobao.com
经验8614 点
金钱4346 ¥
不错不错,但这样的频率计说是8位,但是要10S 的闸门才行吧。恒温晶振放进去是有点浪费了。找些1ppm 的温补就不错了。省电好用,恒温可是要通电好长时间才能稳定下来的。
我是用这个频率计,1S闸门能出11位。
aeon 发表于
aeon版主这台HP的53131A不错啊,二手都要7~8000哦。
我那台显示8位时,闸门是1秒。
恒温晶振要稳定下来,时间是比较长,一般都得10多分钟吧。
在线时间12891 小时
阅读权限100
http://mmchifi.taobao.com
经验8614 点
金钱4346 ¥
已经玩梗原子钟啦。现在10M的只系1百几,性价比超高!
heyj 发表于
用铷钟当然好啦,呵呵。
不过铷钟太大,电源供应也麻烦。
这种不能改频的,好像需要两组电源。
我准备入一个铷钟,也只是来校正下恒温晶振
感觉8位频率计,用恒温晶振已经很不错啦
在线时间7179 小时
阅读权限150
经验6219 点
金钱2905 ¥
其实偶尔用来校对使用,用GPS驯服重更准确,只是每次使用麻烦点,一般锁定需要时间比较长,对环境要求也大,信号不好也不行。但基本不存在可分辨的老化。(相对来说)
在线时间1016 小时
阅读权限50
论坛游民, 积分 115, 距离下一级还需 85 积分
论坛游民, 积分 115, 距离下一级还需 85 积分
经验115 点
金钱113 ¥
很好的教程,留个记号.
在线时间12891 小时
阅读权限100
http://mmchifi.taobao.com
经验8614 点
金钱4346 ¥
其实偶尔用来校对使用,用GPS驯服重更准确,只是每次使用麻烦点,一般锁定需要时间比较长,对环境要求也大,信号不好也不行。但基本不存在可分辨的老化。(相对来说)
aeon 发表于
GPS驯服钟听说过,不过不知怎么用。
看介绍还得GPS天线,利用更精准的时钟系统,来校正10MHZ。
一套带GPS驯服的二手器材,价格也不便宜哦。
在线时间31 小时
阅读权限40
注册会员, 积分 13, 距离下一级还需 37 积分
注册会员, 积分 13, 距离下一级还需 37 积分
学习啦,真的很强大!
在线时间3041 小时
阅读权限50
职业侠客, 积分 531, 距离下一级还需 469 积分
职业侠客, 积分 531, 距离下一级还需 469 积分
经验531 点
金钱490 ¥
很好的教程,学习啦!
Powered by查看: 3356|回复: 6
网上买了一个LAN8720 ETH那个网络模块,发现板子是lan8720用的晶振是有源50M的晶振,原子哥的板子是25M晶振,程序上要怎么改呢?谢谢了
主题帖子精华
初级会员, 积分 92, 距离下一级还需 108 积分
在线时间0 小时
网上买了一个LAN8720 ETH那个网络模块,发现板子是lan8720用的晶振是有源50M的晶振,原子哥的板子是25M晶振,程序上要怎么改呢?谢谢了
主题帖子精华
金钱129425
在线时间1160 小时
配置时钟控制的寄存器吧,看看LAN8720的寄存器了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
主题帖子精华
新手上路, 积分 44, 距离下一级还需 6 积分
在线时间4 小时
网上买了一个LAN8720 ETH那个网络模块,发现板子是lan8720用的晶振是有源50M的晶振,掉到同一个坑里了。唉!!!
主题帖子精华
金牌会员, 积分 1316, 距离下一级还需 1684 积分
在线时间311 小时
程序不用改,可以直接用。
主题帖子精华
初级会员, 积分 99, 距离下一级还需 101 积分
在线时间15 小时
这样会不会丢包率很高?
主题帖子精华
新手入门, 积分 8, 距离下一级还需 12 积分
在线时间4 小时
结果怎么样?
我测试的结果只需要将PHY地址修改为1就好了。当然是STM32Cube官方的LAN8720A驱动。如果从DP83848修改,需要改3个寄存器内容就好。
主题帖子精华
新手入门, 积分 8, 距离下一级还需 12 积分
在线时间4 小时
#define PHY_SR& && && && && && && && &&&((uint16_t)0x1F)& & /*!& PHY special control/ status register Offset& &&&*/
#define PHY_SPEED_STATUS& && && && && & ((uint16_t)0x0004)&&/*!& PHY Speed mask& && && && && && && && && && && & */
#define PHY_DUPLEX_STATUS& && && && && &((uint16_t)0x0010)&&/*!& PHY Duplex mask& && && && && && && && && && && &*/
"原子哥”推荐 /1
资料包括正点原子开发板全套视频,源码,手册等。原子粉丝请关注公众号。
Powered by【每天学点电子学】关于STM32开发板晶振相关的问题汇总【梦想新世界吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:37贴子:
【每天学点电子学】关于STM32开发板晶振相关的问题汇总
1、自己做了个STM32 的板子,,但是手里没有8M的晶振,所以就用 了,12M的,,但是不正常,上电之后PA15和PA14接的是两个led,PA15接的led常亮,PA14接的的led不亮,,而且芯片下载程序又能下载,应该不是芯片坏的问题吧,,而且不管我些什么程序进去,两个脚的状态都不变,,我怀疑是电路有问题,,可是我仔细检查了电路和板子,都没问题,,JTAG正常使用。我用的是12M的晶振,这会有影响吗?感觉不管下什么程序进去感觉芯片好像没有运行。答:如果使用12M的晶振,那么要修改启动文档中的关于RCC的语句。 因为如果你使用库文件的话,ST的库,默认外部晶振是8M,所以如果你不修改RCC部分的语句,会造成CPU不启动,或者启动不成功。 现象是,在MDK环境下,能够通过JTAG识别到芯片,但是无法下载或者debug。 会提示 can not attach CPU。2、突然想到这个问题,外部无源晶振选择大小的区别是什么?对STM32芯片它都要先分频,再倍频。我在想,假设,如果它分频都要降到2M,再倍频上去那我直接2M的晶振1分频再倍频,跟24M先12分频再倍频他们的区别是什么?还是说本身就是任意的,根据自己需要选择?答:方便各种应用场景。3、自己做的STM32F103RBT6板子,外接8M晶振,现在程序下载正常,运行正常,在程序初始化时用到Stm32_Clock_Init(9)这条语句,我想问下是不是外部晶振如果没起振在执行这条语句时会停止?也就是说我的程序下载和运行都正常说明外部晶振肯定起振了,而且已经倍频到72M了。答:默认是用内部8M RC震荡的,你切换为PLL之后,才是使用8M倍频的,如果你注释掉Stm32_Clock_Init(9),那么代码也会跑,但是是用内部8M RC震荡。4、外部晶振换成了25MHz,但是想方便的移植以前8MHz板子上程序,应该怎么修改系统时钟?看了system_stm32f10x.c系统时钟设置
,但是不知道怎么修改!求指点
谢谢下面参数是system_stm32f10x.c系统时钟设置
//默认SYSCLK_FREQ_72MHz
可在system_stm32f10x.c改变设置
//默认 HCLK = SYSCLK;
RCC-&CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
//默认 PCLK2 = HCLK ;
RCC-&CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
//默认 PCLK1 = HCLK ; RCC-&CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
//默认 PLL as
RCC_CFGR_SW_PLL;答:25M不用想了,必须是25的整数倍才行。原子哥
要是把它设置成75MHz
具体怎么修改哪些配置参数?25*3=75了 设置倍频数为3. 但是库函数这个不懂,寄存器的 就很简单5、STM32的RTC不能用,想确定是否硬件问题。但不知道测量的是哪2个引脚。希望知道的高手指教一下答:1,去掉RTC晶振的电容 2,换晶振. 如果1,2还不行,多换几个晶振. 如果还不行,换MCU. 换到能用为止.... STM32的RTC,就这么蛋疼...6、手头 有几块 RTC 初始化不成功的,到底是啥原因,用示波器也看不到波形,一共有30 块板子 大概有5块出现这种问题,时钟不正常,其中拿 一块是 换了 IC ,然后OK的, 不会是 IC问题吧,如果是IC 问题,那后期生产 不好弄啊,有经验的朋友 进来 看看,谢谢了答:就算你用6pf负载电容晶振,STM32的rtc还是会有一部分不能起振的. 如果产品确实需要RTC功能,我建议你还是外加RTC芯片靠谱点.7、32K内部晶振 16M内部晶振 32K外部晶振,弱弱的想有16M的可以分频还要那两个干嘛啊,为什么分内外啊16M的为什么不设成外部晶振呢?以下 是百度的一段话,外部晶振稳定 内部晶振的误差比较大,但如果对频率要求不高的话(比如不涉及串口通信和精确定时等的话),用内部晶振就行 。内部时钟,频率受温度等其它影响,但是能省下晶振的钱,还有2个I/O。如果对频率要求不高,一般是优先选用内部振荡。 如果你要省电,用了SLEEP,那你就不能用内部振荡了,内部振荡回停止!答:STM32一般推荐用内部8M RC或者外部8M晶振. 你这个16M,除非个人癖好,一般没必要用. 用内部还是外部,主要看你自己的考虑了. 理论上说,外部准确度高,用到USB通信的时候,建议用外部晶振.另外,内部RC是无法倍频到72M的,最高是4*16=64Mhz. 但是内部晶振如你所说:1,不占空间.2,省成本. 所以,到底用内部还是用外部,根据自己需求来就可以了.8、各位大大,求一个用内部晶振HSI作系统时钟源的系统时钟配置函数。最好是寄存器版的,谢谢了.答:把我们的Stm32_Clock_Init屏蔽,用的就是内部8M RC震荡了9、焊接了一个STM32F103C8T6的最小系统,晶振是16MHZ,程序不能正常运行?怎样修改哪些程序使芯片的还是在72MHZ下工作。只用下面这个函数修改时钟,但是程序还是不能运行,串口发送数据一堆没用的数据。该怎样设置???答:修改SetSysClockTo72函数中有关时钟配置的地方/* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */
RCC-&CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
RCC-&CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
RCC_CFGR_PLLMULL9);以上是8M晶振的设置,把分频和倍频改成你要的值10、请问在“Option for Target”里的“Target”的XTAL填的MHZ数就是开发板上那个两头圆的晶振的参数吗,我的那个上面显示的Y8.000,是不是就填8就可以了。另外,还有一个圆柱形两个管脚的听说那也是晶振,那“Target”里XTAL的参数到底该照谁的填?ALIENTEK教程里的源代码默认都是72MHZ,应该都要改吧答:填8M,32.768K是rtc晶振不用填11、STM32没有8M的外部晶振,依然可以运行跑马灯实验(程序设定使用外部晶振),有人知道是为啥不?自己焊了一块板子,没有接外部的8MHZ晶振,可是将原子的跑马灯程序下载进去之后,小灯竟然间歇性的闪烁了。可是原子的程序里面明明是用的外部晶振啊!答:没外部的直接切换到内部晶振。12、stm32f103c8t6的五六脚应该接多大的晶振?答:系统时钟(SYSCLK)有3个来源,内部高速8M时钟(HSI),PLL时钟和外部高速时钟(5 6脚接的HSE),而PLL时钟又有2个来源,即内部高速时钟2分频(HSI/2=4M)和外部高速时钟(HSE) 通常,SYSCLK常用PLL倍频而来,当SYSCLK=72M,外部(5 6脚)接8M晶振,经过9倍频即为72M,如果外部使用12M,那只需要6倍频即可得到72M
SYSCLK, 具体的细节请参考STM32参考手册6.2节(那个时钟树很清晰明了)13、战舰stm32开发板上,32.768K晶振电路的作用?这部分电路有什么作用啊?去掉会有什么影响吗?提供时钟的不是8M晶振那部分时钟电路吗?答:建议你看看时钟树,32.768可以做RTC的时钟源。14、系统时钟可以由内部时钟RC振荡器、外部时钟、锁相环三者提供,那么设置成内部时钟,是不用外部放置8M晶振了?答:可以用内部时钟,不用接外部晶振,只是外部时钟更好一些15、如果不用RTC,最小系统可以去掉一个晶振吗?最近正在自制32的最小系统,用来参加电设比赛的,感觉用不上RTC的功能。请教大家,可以把32.768K的晶振部分去掉,当作普通IO口使用吗?答:是的,不过32.768K晶振那两个脚当GPIO用的话,驱动能力会比其它的弱,具体的看手册上有具体说明16、做最小系统版的时候晶振布在底层是否会有影响 ?答:放在底层或者顶层 没什么影响, 但是晶振最好靠近芯片,晶振下面也最好不要走线。17、疑问?对于PCLK1是高速时钟,手册高速我们是不能超过36M,如果配置他为系统时钟,会有哪些影响。我有一份代码一直都是按照系统时钟运行的,所以,我也不清楚会造成什么问题?答:系统时钟是HCLK,不是PCLK1,PCLK1是无法设置为系统时钟的。18、最近开始画原理图,首先就是最小系统啦,参考战舰开发板、某火开发板、官方的硬件开发使用入门的外部晶振电路,都各不相同,又看了ST的晶体振荡器电路设计指南,还是有些不懂啊。我的理解是调整两个外部电容,使之与晶振的负载电容相等,看看战舰板上是22pF,难道8M晶振的负载电容是10pF?还有并联1M的电阻起什么作用呢?不加限流电阻是因为晶振功耗低?答:因为每一种晶振都有各自的特性,所以最好按制造厂商所提供的数值选择外部元器件。 ①在许可范围内,C1,C2值越低越好。C值偏大虽有利于振荡器的稳定,但将会增加起振时间。
②工作良好的振荡波形应该是一个漂亮的正弦波,峰峰值应该大于电源电压的70%。
若峰峰值小于70%,可适当减小OSCI及OSCO管脚上的外接负载电容。
反之,若峰峰值接近电源电压且振荡波形发生畸变,则可适当增加负载电容。
例子:若取中心值15pF,则C1,C2各取30pF可得到其串联等效电容值15pF,这个值与晶振内部等效电容接近最好,
如果要达到8pF(内部电容的),则要选择外部两个电容为15pF,
通常厂家建议的外接负载电容为10~30pF左右。并且C1,C2使用瓷片电容为佳。
③用示波器检测OSCI(Oscillator input)管脚,容易导致振荡器停振,原因是:部分的探头阻抗小不可以直接测试,可以用串电容的方法来进行测试。 ④当波形出现削峰,畸变时,可增加负载电阻调整(几十K到几百K).要稳定波形是并联一个1M左右的反馈电阻,电阻使稳定,并加速晶振起振时间
全新回合《逍遥情缘》2018回合巨制,激萌宠物,神兽自由交易,梦幻家园与你浪费相约,全新职业,回合巨制,情定逍遥,冲级领千元红包,九大活动喜迎公测,神兽,红包齐放送
这些都STM32F103系列相关的一些晶振问题,可类比到其他系列的STM32芯片
有误的地方请大家批评指正,共同学习
你做这个?
忘了个事,在下身份比较卑微。发不了文件。我这里说了吧!在新版本的库函数里面的启动代码中有下面这几句话在这段汇编代码中(虽然很多人看不懂)很明显的一点是在main函数入口之前有一个SystemInit函数的入口,意思就是在进入主函数之前先把系统配置好。在这里就有配置系统时钟的函数。这个函数在在system_stm32f10x.c之中如下是这段函数的内容:void SystemInit (void){
/* Reset the RCC clock configuration to the default reset state(for debug purpose) */
/* Set HSION bit */
RCC-&CR |= (uint32_t)0x;
/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */#ifndef STM32F10X_CL
RCC-&CFGR &= (uint32_t)0xF8FF0000;#else
RCC-&CFGR &= (uint32_t)0xF0FF0000;#endif /* STM32F10X_CL */
/* Reset HSEON, CSSON and PLLON bits */
RCC-&CR &= (uint32_t)0xFEF6FFFF;
/* Reset HSEBYP bit */
RCC-&CR &= (uint32_t)0xFFFBFFFF;
/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
RCC-&CFGR &= (uint32_t)0xFF80FFFF;#ifdef STM32F10X_CL
/* Reset PLL2ON and PLL3ON bits */
RCC-&CR &= (uint32_t)0xEBFFFFFF;
/* Disable all interrupts and clear pending bits
RCC-&CIR = 0x00FF0000;
/* Reset CFGR2 register */
RCC-&CFGR2 = 0x;#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* Disable all interrupts and clear pending bits
RCC-&CIR = 0x009F0000;
/* Reset CFGR2 register */
RCC-&CFGR2 = 0x;
/* Disable all interrupts and clear pending bits
RCC-&CIR = 0x009F0000;#endif /* STM32F10X_CL */
#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
#ifdef DATA_IN_ExtSRAM
SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */#endif
/* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
/* Configure the Flash Latency cycles and enable prefetch buffer */
SetSysClock();#ifdef VECT_TAB_SRAM
SCB-&VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */#else
SCB-&VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */#endif }这个库注释都写得很好,看注释(再加上数据手册有关寄存器的讲解)基本上就能看懂。(看不懂英文注释的不要找我。我会劝你不要玩芯片&开玩笑&)在这个库函数中我们还能找到他调用了这个函数这个就是设置系统时钟的函数具体内容如下:(库函数是用寄存器写的)这个函数也在system_stm32f10x.c这个文件中,它的意思是你上面定义了那个时钟就设置成哪个时钟。然而在这个文件中有确有这样的定义:默认是72MHz,其他都已经被注释掉了。所以会执行SetSysClockTo72()这个函数,这个函数内容如下:static void SetSysClockTo72(void){
__IO uint32_t StartUpCounter = 0, HSEStatus = 0;
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
/* Enable HSE */
RCC-&CR |= ((uint32_t)RCC_CR_HSEON);
/* Wait till HSE is ready and if Time out is reached exit */
HSEStatus = RCC-&CR & RCC_CR_HSERDY;
StartUpCounter++;
} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
if ((RCC-&CR & RCC_CR_HSERDY) != RESET)
HSEStatus = (uint32_t)0x01;
HSEStatus = (uint32_t)0x00;
if (HSEStatus == (uint32_t)0x01)
/* Enable Prefetch Buffer */
FLASH-&ACR |= FLASH_ACR_PRFTBE;
/* Flash 2 wait state */
FLASH-&ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
FLASH-&ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
/* HCLK = SYSCLK */
RCC-&CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
/* PCLK2 = HCLK */
RCC-&CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
/* PCLK1 = HCLK */
RCC-&CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;#ifdef STM32F10X_CL
/* Configure PLLs ------------------------------------------------------*/
/* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
/* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */
RCC-&CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
RCC-&CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
/* Enable PLL2 */
RCC-&CR |= RCC_CR_PLL2ON;
/* Wait till PLL2 is ready */
while((RCC-&CR & RCC_CR_PLL2RDY) == 0)
/* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */
RCC-&CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
RCC-&CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
RCC_CFGR_PLLMULL9); #else
PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
RCC-&CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
RCC_CFGR_PLLMULL));
RCC-&CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);#endif /* STM32F10X_CL */
/* Enable PLL */
RCC-&CR |= RCC_CR_PLLON;
/* Wait till PLL is ready */
while((RCC-&CR & RCC_CR_PLLRDY) == 0)
/* Select PLL as system clock source */
RCC-&CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC-&CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
/* Wait till PLL is used as system clock source */
while ((RCC-&CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
{ /* If HSE fails to start-up, the application will have wrong clock
configuration. User can add here some code to deal with this error */
}}这个就好参考数据手册上的寄存器的内容了。(找到相关的寄存器,相关的位翻看相关的功能就好了)执行玩这个函数后就会跑到主函数里面去执行你编写的函数了。如果不是有强迫症的人直接用库函数配置好了系统时钟就是72MHz。根本不用看这些,这只是为少数想知道库函数的系统时钟是怎么配置的人讲的。但是,同时也可以从这里入手改变系统时钟。比如运行了这个函数SetSysClockTo48(),系统时钟就会使48MHz。如果你根本不在乎系统时钟是怎么配置的,库函数默认就是72MHz,而这正是你想要的,那我告诉你上面我说的都是屁话
大神!不错
贴吧热议榜
使用签名档&&
保存至快速回贴}

我要回帖

更多关于 原子哥视频百度云 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信