STM32学习笔记<14.时钟周期、机器周期、指令周期>

本文详细解释了STM32中的时钟周期、机器周期与指令周期的概念及相互之间的关系。通过实例说明了单条指令的执行时间,并讨论了中断性能的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 时钟周期

看配置的系统时钟是N,时钟周期就是1/N,例如103配置sysclk为72M,时钟周期就是1/72M = 0.01389us。

2. 机器周期

在计算机中,常把一条指令的执行过程划分为若干个阶段,每一个阶段完成一项工作。每一项工作称为一个基本操作,完成一个基本操作所需要的时间称为机器周期,是最小衡量单位。

对于51单片机,一个机器周期等于12个时钟周期。

3. 指令周期

1. 用C语言写的程序,会被转换成一条一条的指令,不同的指令执行的时间不同

2. 简单指令需要一个机器周期,复杂指令可能需要两个或两个以上的机器周期。

3. stm32中1.25 DMIPS/MHz,就是1Mhz的频率,每秒钟可以执行1.25M指令。72M,那么就是72*1.25。所以执行一条指令的时间:1/90us=0.011us=11ns

4. 指令分为单指令和多指令。

举例:

比如C语言编写的一条代码,这条代码对应3条指令,这里比如是单指令,每条指令又对应几个机器周期,一个机器周期又对应几个时钟周期。

备注:单位从小到大:时钟周期<机器周期<指令周期

CPU执行中断时需要时间的,如入栈,出栈,以及其他处理,都需要时间!一般情况下,STM32的中断性能不超过500Khz,也就是中断间隔达到2us一次时,不管你中断函数多精简,基本上CPU就不会干其他什么事情了,因为它都在进出中断了。

单条指令执行时间:STM32F10X单片机在主频为72MHz下,C语言程序执行一条指令需要的时间可认为10ns~100ns

### STM32 ADC 学习教程和笔记 #### 一、STM32 ADC 基本概念 STM32F103ZET6 单片机配备有三个12位精度的模拟数字转换器(ADC),总共提供18个通道,能够处理来自外部的16个信号源以及两个内部信号源。这些通道支持多种工作模式,包括但不限于单次转换、连续转换、扫描模式和间断模式。值得注意的是,为了确保正常运作,ADC模块所需的输入时钟频率不应超过14MHz,该时钟是从APB2总线上的PCLK2经过预分频得到的[^3]。 #### 二、ADC 软件启动机制分析 对于通过软件指令来发起一次新的转换操作而言,在某些情况下可能会涉及到查询`ADC_GetSoftwareStartConvStatus()`函数的状态返回值;然而实际上此方法并不常用,因为其功能较为有限,并未被广泛应用于实际项目开发当中[^2]。 #### 三、触发方式的选择 除了上述提到的纯软件控制之外,还可以利用硬件事件作为触发条件来进行自动化的数据采集过程。这类触发源通常来源于定时器产生的中断请求或者其他外设发出的相关脉冲信号。此外,整个AD转换流程依赖于由RCC配置好的专用时钟源——即所谓的ADC_CLK,它是驱动逐次逼近型A/D变换的核心动力源泉[^4]。 #### 四、性能参数考量 假设当前使用的ADC时钟频率设定为最大允许值14MHz,则完成一轮完整的采样加量化所需时间大约等于1微秒左右。具体计算公式如下所示: \[T_{conv}=(SMPR+12.5)\times\frac{1}{f_{adc}} \] 其中\( SMPR \)代表样本保持阶段所占用的时间长度,默认设置下取值为1.5个周期数[^5]。 ```python # Python代码片段用于验证理论计算结果 def calculate_conversion_time(f_adc, smpr=1.5): """Calculate the conversion time based on given parameters.""" t_conv = (smpr + 12.5) * (1 / f_adc) return round(t_conv, ndigits=9) print(calculate_conversion_time(14e6)) # Output should be close to 1 us ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值