OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2116|回复: 5

stm32时钟知悉及系统定时器和延时剖析,求解!

[复制链接]

14

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2017-4-25
在线时间
110 小时
发表于 2019-4-23 16:28:42 | 显示全部楼层 |阅读模式
10金钱
目前手上用的是stm32f103,就是所谓的mini板。学习过程中仔细看stm32发现还是有很多问题点,需要注意的,希望原子及各位道友支解下:1:stm32f103芯片是自带除了HSI外还有HSE(意思是外部高速晶振,但还是会纠结)吗?还是说HSE是正点板子上的。

2:stm32 HSI明确表示为8MHZ,HSE支持4-16MHZ晶振,而mini板HSE具体使用的是多少?手册什么的没有看到说,程序及配置倒是有说8MHZ.不知道是不是。
3:根据图片1stm32代码配置打开了HSE和PLL时钟输出,HSE为8MH然后2倍频,PLL为16MHZ,最大也就16MHZ,寄存器,注释,手册对照都没错,AHB是1分频,AHB这边是16MHZ,HCLK也是16MHZ,cortex System time 是2MHZ啊,这个应该就是系统定时器时钟来源啊。但后面delay_init(72);就搞不懂了,最大72MHZ,现在是16MHZ怎么来个72,这个变量是什么,delay初始化如图片2          SysTick->CTRL&=~(1<<2);                                        //SYSTICKê1ó&#195;ía2&#191;ê±&#214;ó&#212;′         

        fac_us=SYSCLK/8;                                                //2&#187;&#194;&#219;ê&#199;·&#241;ê1ó&#195;OS,fac_us&#182;&#188;Dèòaê1ó&#195;,第一句好说使能时钟来源,第二个应该s是HCLK/8,怎么变成变量/8.搞不懂。求解。

图片1

图片1

图片2

图片2

最佳答案

查看完整内容[请看2#楼]

1.原子MINI板子外接的8M晶振经过倍频到72M 2.外接的8M晶振 3.代码设置的倍频系数为8,而外接的8M晶振作为了PLL的时钟源,最终主频72M 系统滴答定时器的时钟时根据AHB分频器分频好经过8分频而来,代码中AHB没分频,系统滴答定时器的时钟为9M 总的来说就是用的外部8M晶振经过倍频器倍频到72M ,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-4-23 16:28:43 | 显示全部楼层
1.原子MINI板子外接的8M晶振经过倍频到72M
2.外接的8M晶振
3.代码设置的倍频系数为8,而外接的8M晶振作为了PLL的时钟源,最终主频72M
系统滴答定时器的时钟时根据AHB分频器分频好经过8分频而来,代码中AHB没分频,系统滴答定时器的时钟为9M
总的来说就是用的外部8M晶振经过倍频器倍频到72M ,
回复

使用道具 举报

14

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2017-4-25
在线时间
110 小时
 楼主| 发表于 2019-4-24 09:02:19 | 显示全部楼层
问题是stm32时钟初始化里面并没有配置9倍频,对应手册stm32倍频只有一个地方才有,即PLLMUL,对应RCC_CFGR的21到18位,这几位一直都是0000,所有应该是两倍频啊。还有delay_init(72);                     //延时初始化。   这个里面72是什么?72MHZ 也不对啊。
回复

使用道具 举报

14

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2017-4-25
在线时间
110 小时
 楼主| 发表于 2019-4-24 09:07:26 | 显示全部楼层
不对,我7<<18算错了,是9倍频,没错。
回复

使用道具 举报

14

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2017-4-25
在线时间
110 小时
 楼主| 发表于 2019-4-24 09:16:37 | 显示全部楼层
但是延时函数里面的72我就不懂了,是根据实际时钟频率来吗?还有它的算法我不是很懂,我一般算时间是按1MHZ等于1us来算的,之前算其它单片机定时器时间这样算,它这个   fac_ms=(u16)fac_us*1000;         得到9000Mhz是什么,不是要时间吗?为什么直接用频率,还有它的延时跟死循环有什么区别?看不出来,不就是独占的一个定时器来更精准的延时吗?但里面不还是有while循环吗?在一定时间里不还是卡在里面吗?
回复

使用道具 举报

14

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2017-4-25
在线时间
110 小时
 楼主| 发表于 2019-4-24 09:17:20 | 显示全部楼层
求解。谢谢大佬!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 21:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表