STM8 TIM1 PWM输入捕获学习

  • 格式:pdf
  • 大小:139.05 KB
  • 文档页数:8

下载文档原格式

  / 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Stm8 tim1 pwm 输入捕获学习笔记 -------------计算周期和占空比 作者 萧星
1图
2图 现已图2为例 理解一下普通的输入捕获的例子:
输入捕获 无非就是检验相同的一个或者几个边沿,根据差值 再按
照一定得运算求出输入波形的周期信息,这里每个通道每次只能配置 为不是上升沿就是下降沿。为什么不能配置为上升沿和下降沿都可 以?像外部中断一样。细想一想 我们便知道 那样做是没有意义的 因为我们不知道是上升沿还是下降沿的到来,所以对计算输入波形的 信息 并不能明确算出。而外部中断作为一个事件的产生,对怎样产 生 并不需要知道。
器。 CC1IF标志被设置(中断标志)。当发生至少2个连续的捕获时,而
CC1IF未曾被清除时,CC1OF也被置1。 如设置了CC1IE位,则会产生一个中断。 为了处理捕获溢出(CC1OF位),建议在读出重复捕获标志之前读
取数据,这是为了避免丢失在读出捕获溢出标志之后和读取数据之前 可能产生的重复捕获信息。
注:CC1S仅在通道关闭时(TIM1_CCER1寄存器Hale Waihona Puke BaiduCC1E=0)才是可写的。 就是说使能tim1的时候 不能配置相关寄存器
根据图2 可知选择 TI1FP1 01值 TIM1->CCMR1 |= 0x01;即可
当发生一个输入捕获时: 当产生有效的电平转换时,计数器的值被传送到TIM1_CCR1寄存
TIM1->CCER1 |= 0x11;//使能输入捕获1,2 TIM1_Cmd(ENABLE);
}
中断里的程序 if(TIM1_GetITStatus(TIM1_IT_CC1)) { TIM1_ClearITPendingBit(TIM1_IT_CC1); IC1Value=TIM1_GetCapture1(); i++; if(i==0xff) i=0; } if(TIM1_GetITStatus(TIM1_IT_CC2)) { TIM1_ClearITPendingBit(TIM1_IT_CC2); IC2Value=TIM1_GetCapture2(); i++; if(i==0xff) i=0;
} 读取波形信息的函数:
u16 GET_period(void) { return(IC1Value/2);//在默认内部8分频时钟2mhz 单位us }
u16 GET_highperiod(void) { return(IC2Value/2);//在默认内部8分频时钟2mhz 单位us }
u16 GET_lowperiod(void) { return((IC1Value-IC2Value)/2);//在默认内部8分频时钟2mhz 单位 us } 以上程序在微芯力科3合一板子上 已试验通过
CC1S=01(选中TI1)。 2. 选择TI1FP1的有效极性(用来捕获数据到TIM1_CCR1中和清除计
数器):置CC1P=0(上升沿有效)。 3. 选择TIM1_CCR2的有效输入:置TIM1_CCMR2寄存器的
CC2S=10(选中TI1FP2)。 4. 选择TI1FP2的有效极性(捕获数据到TIM1_CCR2):置CC2P=1(下
void tim1_config(void) {
TIM1_DeInit(); TIM1->CCER1 &= 0xee;//禁止输入捕获1,2 TIM1->CCMR1 |=0x01;// ch1到ti1fp1 TIM1->CCER1&= 0xec;//ch1 上升沿触发 TIM1->CCMR2 |=0x02;// ch2选择 ti1fp2上 TIM1->CCER1|= 0x20;//ch1 下降沿触发 ic2 TIM1->SMCR |=0X54;//选源触发源和触发方式 复位 TIM1->IER |=0x06;//使能中断ch1 ch2
IC1PS=00) 选择有效输入端:例如TIM1_CCMR1连接到TI1输入,所以写入 TIM1_CCMR1寄存器中的CC1S=01,此时通道被配置为输入,并 且TIM1_CCR1寄存器变为只读。 设置TIM1_CCER1寄存器的CC1E=1,允许捕获计数器的值到捕 获寄存器中。 如果需要,通过设置TIM1_IER寄存器中的CC1IE位允许相关中断 请求。 以上便完成了 基本通道 如果有有效电平来 就产生事件或者中断。 配置很简单 诸如以下的例程:选择有效输入端 配置CCMR1的 CC1S位
PWM 输入捕获是普通捕获的一种特殊情况: 它使用两个通道计算波形的周期和占空比:
看上图 我们使用 CH1 和 CH2 一起,不过我们配置信号只是 从 CH1 口输入,然后通过 TI1FP2 到 IC2 然后进入边沿检测,按照 手册的配置过程:
你可以用以下方式测量TI1上输入的PWM信号的周期(TIM1_CCR1 寄存器)和占空比(TIM1_CCR2寄存器)。(具体取决于fMASTER的频 率和预分频器的值) 1. 选择TIM1_CCR1的有效输入:置TIM1_CCMR1寄存器的
降沿有效)。 5. 选择有效的触发输入信号:置TIM1_SMCR寄存器中的TS=101(选
择TI1FP1)。 6. 配置触发模式控制器为复位触发模式:置TIM1_SMCR中的
SMS=100。
5 6的触发输入 配置 是前面时间的产生去选择某一个做为触发事 件 去控制比如技术控制器和技术存储器等动作 7. 使能捕获:置TIM1_CCER1寄存器中CC1E=1,CC2E=1。 配置如下:
怎样检测输入信息: 以 下 例 子 说 明 如 何 在 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寄存器的
CC1S[1:0]:捕获/比较1 选择。 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC1通道被配置为输出; 01:CC1通道被配置为输入,IC1映射在TI1FP1上; 10:CC1通道被配置为输入,IC1映射在TI2FP1上; 11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部 触发器输入被选中时(由TIM1_SMCR寄存器的TS位选择)。