在线时间0 小时
UID96138
ST金币0
蝴蝶豆0
注册时间2008-2-29
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
现已图2为例 理解一下普通的输入捕获的例子:
输入捕获无非就是检验相同的一个或者几个边沿,根据差值 再按照一定得运算求出输入波形的周期信息,这里每个通道每次只能配置为不是上升沿就是下降沿。为什么不能配置为上升沿和下降沿都可以?像外部中断一样。细想一想我们便知道 那样做是没有意义的 因为我们不知道是上升沿还是下降沿的到来,所以对计算输入波形的信息 并不能明确算出。而外部中断作为一个事件的产生,对怎样产生 并不需要知道。
怎样检测输入信息:
以下例子说明如何在TI1输入的上升沿时捕获计数器的值到TIM1_CCR1寄存器中,步骤如下:
K看图2 从左到右 依次配置完成检测通道:
根据输入信号TIi的特点,可通过配置TIM1_CCMRi寄存器中的ICiF位来设置相应的输入滤波器的滤波时间。假设输入信号在最多5个时钟周期的时间内抖动,我们须配置滤波器的带宽长于5个时钟周期;因此我们可以连续采样8次,以确认在TI1上一次真实的边沿变换,即在TIMi_CCMR1寄存器中写入IC1F=0011,此时,只有连续采样到8个相同的TI1信号,信号才为有效(采样频率为fMASTER)。
选择TI1通道的有效转换边沿,在TIM1_CCER1寄存器中写入CC1P=0(上升沿)。
配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写TIM1_CCMR1寄存器的IC1PS=00)
选择有效输入端:例如TIM1_CCMR1连接到TI1输入,所以写入TIM1_CCMR1寄存器中的CC1S=01,此时通道被配置为输入,并且TIM1_CCR1寄存器变为只读。
设置TIM1_CCER1寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。
如果需要,通过设置TIM1_IER寄存器中的CC1IE位允许相关中断请求。
以上便完成了 基本通道 如果有有效电平来 就产生事件或者中断。
配置很简单 诸如以下的例程:选择有效输入端 配置CCMR1的 CC1S位
CC1S[1:0]:捕获/比较1 选择。
这2位定义通道的方向(输入/输出),及输入脚的选择:
00:CC1通道被配置为输出;
01:CC1通道被配置为输入,IC1映射在TI1FP1上;
10:CC1通道被配置为输入,IC1映射在TI2FP1上;
11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由TIM1_SMCR寄存器的TS位选择)。
注:CC1S仅在通道关闭时(TIM1_CCER1寄存器的CC1E=0)才是可写的。就是说使能tim1的时候 不能配置相关寄存器
根据图2 可知选择 TI1FP1 01值
TIM1->CCMR1 |= 0x01;即可
当发生一个输入捕获时:
当产生有效的电平转换时,计数器的值被传送到TIM1_CCR1寄存器。
CC1IF标志被设置(中断标志)。当发生至少2个连续的捕获时,而CC1IF未曾被清除时,CC1OF也被置1。
如设置了CC1IE位,则会产生一个中断。
为了处理捕获溢出(CC1OF位),建议在读出重复捕获标志之前读取数据,这是为了避免丢失在读出捕获溢出标志之后和读取数据之前可能产生的重复捕获信息。
|
|