2.4总线操作和定时

文章详细介绍了总线操作的四个阶段以及总线定时的四种方式:同步通信提供了统一的时钟信号,速度快但可靠性较差;异步通信允许主从设备自适应对方节奏,可靠性高但速度较慢,包括不互锁、半互锁和全互锁三种方式;半同步通信结合同步和异步,增加了等待反馈信号,提高了可靠性;分离式通信则通过将总线传输周期分为独立子周期,提高了总线利用率。

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

一、引子

上一小节,已经介绍了总线仲裁相关的知识。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dd2tDO06-1674444464723)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230120164602959.png)]

由于总线在同一时刻只能提供给一组设备使用,所以需要决定总线的控制权分配给哪一个主设备,当一个主设备获得总线控制权之后,它就可以利用总线来对某一个从设备发出相关的命令(读/写数据)。

那么这一对主设备和从设备该如何用电信号进行数据的传输呢?

如何发出命令,如何给出数据,每一步操作的时序安排又是怎么样的?

这一小节,我们就来探讨一下总线的操作与定时,即如何让占用总线的一对设备进行数据传输?

二、介绍

1.总线周期

之前我们说过总线周期有四个阶段。

也就是要用总线传一次数据。

### STM32F103 定时器频率计算 对于STM32F103系列微控制器中的定时器,其工作频率取决于多个参数配置。具体来说,定时器的工作频率由输入时钟频率、预分频系数(Prescaler)、自动重装载值(Period)共同决定。 #### 输入时钟频率 STM32F103内部定时器的时钟源通常来自APB1或APB2总线上的外设时钟。例如,当使用默认设置时,这些外设运行于72 MHz下[^4]。 #### 预分频系数(Prescaler) 通过调整`TIM_Prescaler`可以改变进入定时器的实际脉冲速率。如果设定为N,则意味着每(N+1)个外部时钟周期才会触发一次定时器计数操作。因此,经过预分频后的有效时钟频率变为: \[ f_{eff}=\frac{f_{input}}{(PSC+1)} \] 其中\( PSC \)表示预分频寄存器(`TIM_Prescaler`)所存储的数值[^2]。 #### 自动重装载值(Period) 这个参数决定了每次溢出前的最大计数值。一旦达到最大值就会发生中断并重新从零开始计数。假设自动重装载值为ARR,则两次相邻中断之间的时间间隔T为: \[ T=(ARR+1)\times\frac{1}{f_{eff}} \] 由此可知,最终产生的PWM信号或其他形式输出波形的频率 \( F_o \),可以通过下面公式来估算: \[ F_o=\frac{1}{T}=\frac{f_{eff}}{(ARR+1)}=\frac{f_{input}}{(PSC+1)(ARR+1)} \][^1] 为了更直观理解上述概念,考虑一个具体的例子:假如希望创建一个大约2.4 MHz的方波输出,并已知系统时钟为72 MHz,那么可以选择合适的预分频自动重装载组合使得输出满足需求。比如采用 `TIM3_Init(1,7)` 初始化函数调用,这相当于设置了预分频为7而自动重装载为1,从而实现了约200 ns的高低电平切换时间。 ```c // 设置定时器参数以获得特定频率输出 void TIM3_Init(uint16_t PrescalerValue,uint16_t PeriodValue){ // ...省略部分初始化代码... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨翼轻尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值