OpenEdv-开源电子网

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

对原子提供的延时函数的初始化的理解

[复制链接]
回帖奖励 5 金钱 回复本帖可获得 1 金钱奖励! 每人限 1 次(中奖概率 80%)

24

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2017-10-21
在线时间
41 小时
发表于 2018-1-28 00:06:00 | 显示全部楼层 |阅读模式
库函数版本:
                              
东方红.png
在初始化中完成两件事:
1.系统滴答时钟systick时钟来源的选择。这里有两个选择(如下),一个是HCLK时钟一个是HCLK的八分频。库的可读性还是很高的!
阿尔山.png

黑寡妇.png
2.计算fac_us和fac_ms参数。这两个参数的物理意义分别为1us振动的次数、1ms振动的次数。
那么这里计算系数为什么用系统时钟SystemCoreClock而不是根据前面的选择的时钟呢?因为我们AHB预分频器一般设置为1(这个库就是设置为1),所以SYSCLK=HCLK,又因为选择的滴答时钟的时钟源为SysTick_CLKSource_HCLK_Div8,所以就是HCLK/8,即SYSCLK/8。
下面就是根据fac_us和fac_ms参数和传递的要延时的时间参数计算装载初值完成延时函数了。
寄存器数版本:
埃尔文.png
在初始化中完成两件事:
1. 系统滴答时钟systick时钟来源的选择。
2. 计算fac_us和fac_ms参数。需要强调的是传递参数为系统时钟(单位MHz)。配置的系统时钟是多少就传递多少。
下面就是根据fac_us和fac_ms参数和传递的要延时的时间参数计算装载初值完成延时函数。
综上,库函数版本和寄存器版本大体一致但略有不同。不同在于库函数版本中系统时钟初始化已经配好在启动文件中调用执行;并且外部可以通过SystemCoreClock访问获取时钟频率。但是寄存器版本并没有这样初始化时钟。
安抚.png
因此需要每次使用的时候配置。需要根据系统时钟来传递给延时初始化函数。


初入32,纯属个人理解,希望有耐心看我前面瞎BB的朋友希望多多指正和指导!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 21:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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